Commit Graph

38 Commits

Author SHA1 Message Date
Andriy Gapon
84a03ac69a devstat_selectdevs: resize dev_select only after copying data out of it
The resizing could be a downsizing so some data would be lost and we
could attempt to read past the end of the new memory allocation.

MFC after:	2 weeks
Sponsored by:	Panzura
2019-12-03 09:48:43 +00:00
Pedro F. Giffuni
5e53a4f90f lib: further adoption of SPDX licensing ID tags.
Mainly focus on files that use BSD 2-Clause license, however the tool I
was using mis-identified many licenses so this was mostly a manual - error
prone - task.

The Software Package Data Exchange (SPDX) group provides a specification
to make it easier for automated tools to detect and summarize well known
opensource licenses. We are gradually adopting the specification, noting
that the tags are considered only advisory and do not, in any way,
superceed or replace the license texts.
2017-11-26 02:00:33 +00:00
Marcelo Araujo
58c8c85234 Remove unused variable and silence clang warnings.
Differential Revision:	D2681
Reviewed by:		rodrigc
2015-06-04 02:50:13 +00:00
Kenneth D. Merry
999efd901b Remove an obsolete comment in devstat(3) about the accuracy of the
milliseconds per transaction (DSM_MS_PER_TRANSACTION) calculation.

The comment was accurate many years ago when the kernel didn't
record I/O times on a per-I/O basis, but now that we do collect
that information in most areas, it isn't correct.

The milliseconds per transaction values are correct, assuming the
I/O duration has been recorded.

Sponsored by:	Spectra Logic
MFC after:	3 days
2015-02-27 02:44:12 +00:00
Sergey Kandaurov
6a4d909530 Fix a typo. 2013-12-25 19:38:16 +00:00
Sergey Kandaurov
ef6b3fcf0f For vmcore, calculate time relative to device creation upon time_uptime.
Previously it used a clock from live kernel.

MFC after:	2 weeks
2013-12-25 17:11:49 +00:00
Mikolaj Golub
fdd6757e71 New devstat metrics for devstat_compute_statistics():
DSM_TOTAL_DURATION
  DSM_TOTAL_DURATION_READ
  DSM_TOTAL_DURATION_WRITE
  DSM_TOTAL_DURATION_FREE
  DSM_TOTAL_DURATION_OTHER
  DSM_TOTAL_BUSY_TIME
2012-12-15 18:19:48 +00:00
Guy Helmer
a18e46160b Handle memory allocation failures in devstat_getdevs(), devstat_selectdevs(),
and devstat_buildmatch().

PR:		bin/83359
Reviewed by:	ken
2012-01-06 21:28:29 +00:00
Sergey Kandaurov
1046090f1f Do not increment num_args if strsep(3) returned an empty field.
That fixes devstat_buildmatch(3) crashes with certain strings.

Reported by:	arundel
MFC after:	2 weeks
2011-04-04 09:25:27 +00:00
Stefan Farfeleder
9dbcd4b0c0 Remove an unused variable.
Reviewed by:	ken
2005-10-04 22:00:35 +00:00
Maxime Henrion
7d72cda3d3 Use __func__ throughout devstat.c instead of defining a func_name
variable in each function.
2005-04-26 15:02:01 +00:00
Maxime Henrion
140490e266 Make this compile with GCC4 by fixing a signedness issue.
Reviewed by:	md5(1)
2005-04-26 14:51:09 +00:00
Alexander Kabaev
f664b76fe4 Remove the use of cast as lvalue. GCC 3.4 isses a deprecation warning
for this now.
2004-06-25 01:16:02 +00:00
Bruce Evans
1f85f71570 Include <nlist.h> for nlist-related declarations instead of depending on
namespace pollution in <kvm.h>.
2003-10-13 05:30:20 +00:00
Poul-Henning Kamp
d2d0b14453 It is not an error to have no devices. 2003-08-17 12:06:44 +00:00
Poul-Henning Kamp
0b1b370c47 Add prototype for compute_stats() so that libdevstat is WARNS=4 clean.
Spotted by:	kris
2003-04-19 07:42:13 +00:00
Poul-Henning Kamp
1455c4e2ec If rounding results in -epsilon device busy %, set it to zero. 2003-04-09 07:49:15 +00:00
Poul-Henning Kamp
ec0fa09c8c typo 2003-03-19 14:15:32 +00:00
Poul-Henning Kamp
773865de4e Further unbreak devstat: sort the index array in correct order too. 2003-03-19 14:11:14 +00:00
Poul-Henning Kamp
36eab1f55a Add more devstat calculations, mostly filling in holes, but also adding
a couple of reqests:  DSM_BUSY_PCT and DSM_QUEUE_LENGTH.

I have no further plans for mutilating this API at this point in
time, and will update the man-page to reflect current reality as
the next thing.

Reviewed by:    ken
2003-03-18 09:57:54 +00:00
Poul-Henning Kamp
16830b0cc2 And I managed to make a regression here too.
I have too many source trees :-(
2003-03-15 22:22:11 +00:00
Poul-Henning Kamp
7194d335cf Run a revision of the devstat interface:
Kernel:

Change statistics to use the *uptime() timescale (ie: relative to
boottime) rather than the UTC aligned timescale.  This makes the
device statistics code oblivious to clock steps.

Change timestamps to bintime format, they are cheaper.

Remove the "busy_count", and replace it with two counter fields:
"start_count" and "end_count", which are updated in the down and
up paths respectively.  This removes the locking constraint on
devstat.

Add a timestamp argument to devstat_start_transaction(), this will
normally be a timestamp set by the *_bio() function in bp->bio_t0.
Use this field to calculate duration of I/O operations.

Add two timestamp arguments to devstat_end_transaction(), one is
the current time, a NULL pointer means "take timestamp yourself",
the other is the timestamp of when this transaction started (see
above).

Change calculation of busy_time to operate on "the salami principle":
Only when we are idle, which we can determine by the start+end
counts being identical, do we update the "busy_from" field in the
down path.  In the up path we accumulate the timeslice in busy_time
and update busy_from.

Change the byte_* and num_* fields into two arrays: bytes[] and
operations[].

Userland:

Change the misleading "busy_time" name to be called "snap_time" and
make the time long double since that is what most users need anyway,
fill it using clock_gettime(CLOCK_MONOTONIC) to put it on the same
timescale as the kernel fields.

Change devstat_compute_etime() to operate on struct bintime.

Remove the version 2 legacy interface: the change to bintime makes
compatibility far too expensive.

Fix a bug in systat's "vm" page where boot relative busy times would
be bogus.

Bump __FreeBSD_version to 500107

Review & Collaboration by:	ken
2003-03-15 21:59:06 +00:00
Poul-Henning Kamp
cd9c9ca63d Remove include of <sys/dkstat.h> 2003-02-16 14:08:52 +00:00
Poul-Henning Kamp
1259069021 Premptively include <sys/resource.h> to get the cp_time[CPUSTATES]. 2003-02-16 13:29:28 +00:00
David E. O'Brien
be04b6d190 Remove 'register' keyword. 2002-03-21 23:39:28 +00:00
Kenneth D. Merry
c3508206b2 Turn on WARNS?= 2 for libdevstat.
Submitted by:	"Sergey A. Osokin" <osa@freebsd.org.ru>
2001-09-23 23:03:23 +00:00
Matthew Dillon
e67f5b9fca Implement __FBSDID() 2001-09-16 21:35:07 +00:00
Kenneth D. Merry
4fb9d38429 Fix some style inconsistencies introduced in rev 1.10, as well as some
other inconsistencies that I missed in my review of rev 1.7.  Also fix
a cut-n-paste error from an earlier revision.
2001-08-21 05:23:37 +00:00
Brian Somers
6d3e1426db Better snprintf() handling.
Prompted by: bde
2001-08-20 15:43:14 +00:00
Brian Somers
2449bf28ad Handle snprintf() returning -1.
MFC after:	2 weeks
2001-08-20 12:50:21 +00:00
Kenneth D. Merry
884539f701 Implement compute_stats() in terms of devstat_compute_statistics(). This
gets rid of the duplicated code in compute_stats().

Add a new DSM_SKIP statistic type for devstat_compute_statistics() that
causes the subsequent variable argument to be skipped.

Thanks to Sergey Osokin for coding up my idea/code fragment.

Submitted by:	"Sergey A. Osokin" <osa@freebsd.org.ru>
2001-08-18 05:46:59 +00:00
Thomas Moestl
c4a5ef6ef3 Add some features to libdevstat, and overhaul the interface a bit:
1.) prefix all functions in the library with devstat_ (compatability
    functions are available for all functions that were chaned in an
    incompatible way, but are deprecated).
2.) Add a pointer to a kvm_t as the first argument to functions that
    used to get their information via sysctl; they behave the same
    as before when NULL is passed as this argument, otherwise, the
    information is obtained via libkvm using the supplied handle.
3.) Add a new function, devstat_compute_statistics(), that is intended
    to replace the old compute_stats() function. It offers more
    statistics data, and has a more flexible interface.

libdevstat does now require libkvm; a library depedency is added, so
that libkvm only needs to be explicitely specified for statically linked
programs.
The library major version number is bumped.

Submitted by:	Sergey A. Osokin <osa@freebsd.org.ru>, ken (3)
Reviewed by:	ken
2001-08-04 18:25:48 +00:00
Peter Wemm
7f3dea244c $Id$ -> $FreeBSD$ 1999-08-28 00:22:10 +00:00
Poul-Henning Kamp
057cfd176a Address our users in a civilized manner. (They may know better, but probably
just forgot it, it is certainly no reason to don't insult them.)
1999-03-22 10:38:07 +00:00
Kenneth D. Merry
17ee2b2055 Fix a couple of potential buffer overrun cases.
Submitted by:	imp
1998-10-14 23:28:26 +00:00
Kenneth D. Merry
bcc6a3da92 Change the devstat generation number from an int to a long. The int-sized
generation was causing unaligned access faults on the Alpha.

I have incremented the devstat version number, since this is an interface
change.  You'll need to recompile libdevstat, systat, iostat, vmstat and
rpc.rstatd along with your kernel.

Partially Submitted by:	Andrew Gallatin <gallatin@cs.duke.edu>
1998-09-20 00:11:23 +00:00
Kenneth D. Merry
eded794a13 Fix some error message format problems in checkversion() and getversion().
Reported By: bde
1998-09-18 02:35:25 +00:00
Justin T. Gibbs
28fb27ba21 Device statistics library. Used by iostat, vmstat, and systat to
format and analyze the output of the new device statistics sysctls.

Submitted by:	"Kenneth D. Merry" <ken@FreeBSD.org>
1998-09-15 06:23:21 +00:00