xref: /freebsd/lib/libdevstat/devstat.3 (revision 28fb27ba21cc1fd6d5fb0a4889059bf3e4b751d8)
128fb27baSJustin T. Gibbs.\"
228fb27baSJustin T. Gibbs.\" Copyright (c) 1998 Kenneth D. Merry.
328fb27baSJustin T. Gibbs.\" All rights reserved.
428fb27baSJustin T. Gibbs.\"
528fb27baSJustin T. Gibbs.\" Redistribution and use in source and binary forms, with or without
628fb27baSJustin T. Gibbs.\" modification, are permitted provided that the following conditions
728fb27baSJustin T. Gibbs.\" are met:
828fb27baSJustin T. Gibbs.\" 1. Redistributions of source code must retain the above copyright
928fb27baSJustin T. Gibbs.\"    notice, this list of conditions and the following disclaimer.
1028fb27baSJustin T. Gibbs.\" 2. Redistributions in binary form must reproduce the above copyright
1128fb27baSJustin T. Gibbs.\"    notice, this list of conditions and the following disclaimer in the
1228fb27baSJustin T. Gibbs.\"    documentation and/or other materials provided with the distribution.
1328fb27baSJustin T. Gibbs.\" 3. The name of the author may not be used to endorse or promote products
1428fb27baSJustin T. Gibbs.\"    derived from this software without specific prior written permission.
1528fb27baSJustin T. Gibbs.\"
1628fb27baSJustin T. Gibbs.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
1728fb27baSJustin T. Gibbs.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
1828fb27baSJustin T. Gibbs.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
1928fb27baSJustin T. Gibbs.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
2028fb27baSJustin T. Gibbs.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
2128fb27baSJustin T. Gibbs.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
2228fb27baSJustin T. Gibbs.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
2328fb27baSJustin T. Gibbs.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
2428fb27baSJustin T. Gibbs.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
2528fb27baSJustin T. Gibbs.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
2628fb27baSJustin T. Gibbs.\" SUCH DAMAGE.
2728fb27baSJustin T. Gibbs.\"
2828fb27baSJustin T. Gibbs.\"	$Id$
2928fb27baSJustin T. Gibbs.\"
3028fb27baSJustin T. Gibbs.Dd May 21, 1998
3128fb27baSJustin T. Gibbs.Dt DEVSTAT 3
3228fb27baSJustin T. Gibbs.Os FreeBSD 3.0
3328fb27baSJustin T. Gibbs.Sh NAME
3428fb27baSJustin T. Gibbs.Nm devstat
3528fb27baSJustin T. Gibbs.Nd device statistics utility library
3628fb27baSJustin T. Gibbs.Sh SYNOPSIS
3728fb27baSJustin T. Gibbs.Fd #include <devstat.h>
3828fb27baSJustin T. Gibbs.Ft int
3928fb27baSJustin T. Gibbs.Fn getnumdevs "void"
4028fb27baSJustin T. Gibbs.Ft int
4128fb27baSJustin T. Gibbs.Fn getgeneration "void"
4228fb27baSJustin T. Gibbs.Ft int
4328fb27baSJustin T. Gibbs.Fn getversion "void"
4428fb27baSJustin T. Gibbs.Ft int
4528fb27baSJustin T. Gibbs.Fn checkversion "void"
4628fb27baSJustin T. Gibbs.Ft int
4728fb27baSJustin T. Gibbs.Fn getdevs "struct statinfo *stats"
4828fb27baSJustin T. Gibbs.Ft int
4928fb27baSJustin T. Gibbs.Fo selectdevs
5028fb27baSJustin T. Gibbs.Fa "struct device_selection **dev_select"
5128fb27baSJustin T. Gibbs.Fa "int *num_selected"
5228fb27baSJustin T. Gibbs.Fa "int *num_selections"
5328fb27baSJustin T. Gibbs.Fa "int *select_generation"
5428fb27baSJustin T. Gibbs.Fa "int current_generation"
5528fb27baSJustin T. Gibbs.Fa "struct devstat *devices"
5628fb27baSJustin T. Gibbs.Fa "int numdevs"
5728fb27baSJustin T. Gibbs.Fa "struct devstat_match *matches"
5828fb27baSJustin T. Gibbs.Fa "int num_matches"
5928fb27baSJustin T. Gibbs.Fa "char **dev_selections"
6028fb27baSJustin T. Gibbs.Fa "int num_dev_selections"
6128fb27baSJustin T. Gibbs.Fa "devstat_select_mode select_mode"
6228fb27baSJustin T. Gibbs.Fa "int maxshowdevs"
6328fb27baSJustin T. Gibbs.Fa "int perf_select"
6428fb27baSJustin T. Gibbs.Fc
6528fb27baSJustin T. Gibbs.Ft int
6628fb27baSJustin T. Gibbs.Fo buildmatch
6728fb27baSJustin T. Gibbs.Fa "char *match_str"
6828fb27baSJustin T. Gibbs.Fa "struct devstat_match **matches"
6928fb27baSJustin T. Gibbs.Fa "int *num_matches"
7028fb27baSJustin T. Gibbs.Fc
7128fb27baSJustin T. Gibbs.Ft int
7228fb27baSJustin T. Gibbs.Fo compute_stats
7328fb27baSJustin T. Gibbs.Fa "struct devstat *current"
7428fb27baSJustin T. Gibbs.Fa "struct devstat *previous"
7528fb27baSJustin T. Gibbs.Fa "long double etime"
7628fb27baSJustin T. Gibbs.Fa "u_int64_t *total_bytes"
7728fb27baSJustin T. Gibbs.Fa "u_int64_t *total_transfers"
7828fb27baSJustin T. Gibbs.Fa "u_int64_t *total_blocks"
7928fb27baSJustin T. Gibbs.Fa "long double *kb_per_transfer"
8028fb27baSJustin T. Gibbs.Fa "long double *transfers_per_second"
8128fb27baSJustin T. Gibbs.Fa "long double *mb_per_second"
8228fb27baSJustin T. Gibbs.Fa "long double *blocks_per_second"
8328fb27baSJustin T. Gibbs.Fa "long double *ms_per_transaction"
8428fb27baSJustin T. Gibbs.Fc
8528fb27baSJustin T. Gibbs.Ft long double
8628fb27baSJustin T. Gibbs.Fo compute_etime
8728fb27baSJustin T. Gibbs.Fa "struct timeval cur_time"
8828fb27baSJustin T. Gibbs.Fa "struct timeval prev_time"
8928fb27baSJustin T. Gibbs.Fc
9028fb27baSJustin T. Gibbs.Sh DESCRIPTION
9128fb27baSJustin T. GibbsThe
9228fb27baSJustin T. Gibbs.Nm
9328fb27baSJustin T. Gibbslibrary is a library of helper functions for dealing with the kernel
9428fb27baSJustin T. Gibbs.Xr devstat 9
9528fb27baSJustin T. Gibbsinterface, which is accessible to users via
9628fb27baSJustin T. Gibbs.Xr sysctl 3 .
9728fb27baSJustin T. Gibbs.Pp
9828fb27baSJustin T. Gibbs.Fn getnumdevs
9928fb27baSJustin T. Gibbsreturns the number of devices registered with the
10028fb27baSJustin T. Gibbs.Nm devstat
10128fb27baSJustin T. Gibbssubsystem in the kernel.
10228fb27baSJustin T. Gibbs.Pp
10328fb27baSJustin T. Gibbs.Fn getgeneration
10428fb27baSJustin T. Gibbsreturns the current generation of the
10528fb27baSJustin T. Gibbs.Nm devstat
10628fb27baSJustin T. Gibbslist of devices in the kernel.
10728fb27baSJustin T. Gibbs.Pp
10828fb27baSJustin T. Gibbs.Fn getversion
10928fb27baSJustin T. Gibbsreturns the current kernel
11028fb27baSJustin T. Gibbs.Nm devstat
11128fb27baSJustin T. Gibbsversion.
11228fb27baSJustin T. Gibbs.Pp
11328fb27baSJustin T. Gibbs.Fn checkversion
11428fb27baSJustin T. Gibbschecks the userland devstat version against the kernel devstat version.  If
11528fb27baSJustin T. Gibbsthe two are identical, it returns zero.  Otherwise, it prints an
11628fb27baSJustin T. Gibbsappropriate error in
11728fb27baSJustin T. Gibbs.Va devstat_errbuf
11828fb27baSJustin T. Gibbsand returns -1.
11928fb27baSJustin T. Gibbs.Pp
12028fb27baSJustin T. Gibbs.Fn getdevs
12128fb27baSJustin T. Gibbsfetches the current list of devices and statistics into the supplied
12228fb27baSJustin T. Gibbs.Va statinfo
12328fb27baSJustin T. Gibbsstructure.  The
12428fb27baSJustin T. Gibbs.Va statinfo
12528fb27baSJustin T. Gibbsstructure can be found in
12628fb27baSJustin T. Gibbs.Aq Pa devstat.h :
12728fb27baSJustin T. Gibbs.Bd -literal -offset indent
12828fb27baSJustin T. Gibbsstruct statinfo {
12928fb27baSJustin T. Gibbs	long            cp_time[CPUSTATES];
13028fb27baSJustin T. Gibbs	long            tk_nin;
13128fb27baSJustin T. Gibbs	long            tk_nout;
13228fb27baSJustin T. Gibbs	struct devinfo  *dinfo;
13328fb27baSJustin T. Gibbs	struct timeval  busy_time;
13428fb27baSJustin T. Gibbs};
13528fb27baSJustin T. Gibbs.Ed
13628fb27baSJustin T. Gibbs.Pp
13728fb27baSJustin T. Gibbs.Fn getdevs
13828fb27baSJustin T. Gibbsexpects the
13928fb27baSJustin T. Gibbs.Va statinfo
14028fb27baSJustin T. Gibbsstructure to be allocated, and it also expects the
14128fb27baSJustin T. Gibbs.Va dinfo
14228fb27baSJustin T. Gibbssubelement to be allocated ahead of time.  The
14328fb27baSJustin T. Gibbs.Va dinfo
14428fb27baSJustin T. Gibbssubelement contains the following elements:
14528fb27baSJustin T. Gibbs.Bd -literal -offset indent
14628fb27baSJustin T. Gibbsstruct devinfo {
14728fb27baSJustin T. Gibbs	struct devstat	*devices;
14828fb27baSJustin T. Gibbs	u_int8_t	*mem_ptr;
14928fb27baSJustin T. Gibbs	int		generation;
15028fb27baSJustin T. Gibbs	int		numdevs;
15128fb27baSJustin T. Gibbs};
15228fb27baSJustin T. Gibbs.Ed
15328fb27baSJustin T. Gibbs.Pp
15428fb27baSJustin T. GibbsThe
15528fb27baSJustin T. Gibbs.Va kern.devstat.all
15628fb27baSJustin T. Gibbs.Nm sysctl
15728fb27baSJustin T. Gibbsvariable contains an array of
15828fb27baSJustin T. Gibbs.Nm devstat
15928fb27baSJustin T. Gibbsstructures, but at the head of the array is the current
16028fb27baSJustin T. Gibbs.Nm devstat
16128fb27baSJustin T. Gibbsgeneration.  The reason the generation is at the head of the buffer is so
16228fb27baSJustin T. Gibbsthat userland software accessing the devstat statistics information can
16328fb27baSJustin T. Gibbsatomically get both the statistics information and the corresponding
16428fb27baSJustin T. Gibbsgeneration number.  If client software were forced to get the generation
16528fb27baSJustin T. Gibbsnumber via a separate
16628fb27baSJustin T. Gibbs.Nm sysctl
16728fb27baSJustin T. Gibbsvariable (which is available for convenience), the list of devices could
16828fb27baSJustin T. Gibbschange between the time the client gets the generation and the time the
16928fb27baSJustin T. Gibbsclient gets the device list.
17028fb27baSJustin T. Gibbs.Pp
17128fb27baSJustin T. GibbsThe
17228fb27baSJustin T. Gibbs.Va mem_ptr
17328fb27baSJustin T. Gibbssubelement of the
17428fb27baSJustin T. Gibbs.Va devinfo
17528fb27baSJustin T. Gibbsstructure is a pointer to memory that is allocated, and resized if
17628fb27baSJustin T. Gibbsnecessary, by
17728fb27baSJustin T. Gibbs.Fn getdevs .
17828fb27baSJustin T. GibbsThe devices subelement of the
17928fb27baSJustin T. Gibbs.Va devinfo
18028fb27baSJustin T. Gibbsstructure is basically a pointer to the beginning of the array of devstat
18128fb27baSJustin T. Gibbsstructures from the
18228fb27baSJustin T. Gibbs.Va kern.devstat.all
18328fb27baSJustin T. Gibbs.Nm sysctl
18428fb27baSJustin T. Gibbsvariable.  The generation subelement of the
18528fb27baSJustin T. Gibbs.Nm devinfo
18628fb27baSJustin T. Gibbsstructure contains the generation number from the
18728fb27baSJustin T. Gibbs.Va kern.devstat.all
18828fb27baSJustin T. Gibbs.Nm sysctl
18928fb27baSJustin T. Gibbsvariable.
19028fb27baSJustin T. GibbsThe
19128fb27baSJustin T. Gibbs.Va numdevs
19228fb27baSJustin T. Gibbssubelement of the
19328fb27baSJustin T. Gibbs.Va devinfo
19428fb27baSJustin T. Gibbsstructure contains the current
19528fb27baSJustin T. Gibbsnumber of devices registered with the kernel
19628fb27baSJustin T. Gibbs.Nm devstat
19728fb27baSJustin T. Gibbssubsystem.
19828fb27baSJustin T. Gibbs.Pp
19928fb27baSJustin T. Gibbs.Fn selectdevs
20028fb27baSJustin T. Gibbsselects devices to display based upon a number of criteria:
20128fb27baSJustin T. Gibbs.Bl -tag -width flag
20228fb27baSJustin T. Gibbs.It specified devices
20328fb27baSJustin T. GibbsSpecified devices are the first selection priority.  These are generally
20428fb27baSJustin T. Gibbsdevices specified by name by the user.  e.g. da0, da1, cd0.
20528fb27baSJustin T. Gibbs.It match patterns
20628fb27baSJustin T. GibbsThese are pattern matching expressions generated by
20728fb27baSJustin T. Gibbs.Fn buildmatch
20828fb27baSJustin T. Gibbsfrom user input.
20928fb27baSJustin T. Gibbs.It performance
21028fb27baSJustin T. GibbsIf performance mode is enabled, devices will be sorted based on the
21128fb27baSJustin T. Gibbs.Va bytes
21228fb27baSJustin T. Gibbsfield in the
21328fb27baSJustin T. Gibbs.Va device_selection
21428fb27baSJustin T. Gibbsstructure passed in to
21528fb27baSJustin T. Gibbs.Fn selectdevs .
21628fb27baSJustin T. GibbsThe
21728fb27baSJustin T. Gibbs.Va bytes
21828fb27baSJustin T. Gibbsvalue currently must be maintained by the user.  In the future,
21928fb27baSJustin T. Gibbsthis may be done for him in a
22028fb27baSJustin T. Gibbs.Nm
22128fb27baSJustin T. Gibbslibrary routine.
22228fb27baSJustin T. GibbsIf no devices have been selected by name or by pattern, the performance
22328fb27baSJustin T. Gibbstracking code will select every device in the system, and sort them by
22428fb27baSJustin T. Gibbsperforcmance.  If devices have been selected by name or pattern, the
22528fb27baSJustin T. Gibbsperformance tracking code will honor those selections and will only sort
22628fb27baSJustin T. Gibbsamong the selected devices.
22728fb27baSJustin T. Gibbs.It order in the devstat list
22828fb27baSJustin T. GibbsIf the selection mode is set to DS_SELECT_ADD, and if there are still less
22928fb27baSJustin T. Gibbsthan
23028fb27baSJustin T. Gibbs.Va maxshowdevs
23128fb27baSJustin T. Gibbsdevices selected,
23228fb27baSJustin T. Gibbs.Fn selectdevs
23328fb27baSJustin T. Gibbswill automatically select up to
23428fb27baSJustin T. Gibbs.Va maxshowdevs
23528fb27baSJustin T. Gibbsdevices.
23628fb27baSJustin T. Gibbs.El
23728fb27baSJustin T. Gibbs.Pp
23828fb27baSJustin T. Gibbs.Fn selectdevs
23928fb27baSJustin T. Gibbsperforms selections in four different modes:
24028fb27baSJustin T. Gibbs.Bl -tag -width DS_SELECT_ADDONLY
24128fb27baSJustin T. Gibbs.It DS_SELECT_ADD
24228fb27baSJustin T. GibbsIn add mode,
24328fb27baSJustin T. Gibbs.Fn selectdevs
24428fb27baSJustin T. Gibbswill select any unselected devices specified by name or matching pattern.
24528fb27baSJustin T. GibbsIt will also select more devices, in devstat list order, until the number
24628fb27baSJustin T. Gibbsof selected devices is equal to
24728fb27baSJustin T. Gibbs.Va maxshowdevs
24828fb27baSJustin T. Gibbsor until all devices are
24928fb27baSJustin T. Gibbsselected.
25028fb27baSJustin T. Gibbs.It DS_SELECT_ONLY
25128fb27baSJustin T. GibbsIn only mode,
25228fb27baSJustin T. Gibbs.Fn selectdevs
25328fb27baSJustin T. Gibbswill clear all current selections, and will only select devices specified
25428fb27baSJustin T. Gibbsby name or by matching pattern.
25528fb27baSJustin T. Gibbs.It DS_SELECT_REMOVE
25628fb27baSJustin T. GibbsIn remove mode,
25728fb27baSJustin T. Gibbs.Fn selectdevs
25828fb27baSJustin T. Gibbswill remove devices specified by name or by matching pattern.  It will not
25928fb27baSJustin T. Gibbsselect any additional devices.
26028fb27baSJustin T. Gibbs.It DS_SELECT_ADDONLY
26128fb27baSJustin T. GibbsIn addonly mode,
26228fb27baSJustin T. Gibbs.Fn selectdevs
26328fb27baSJustin T. Gibbswill select any unselected devices specified by name or matching pattern.
26428fb27baSJustin T. GibbsIn this respect it is identical to add mode.  It will not, however, select
26528fb27baSJustin T. Gibbsany devices other than those specified.
26628fb27baSJustin T. Gibbs.El
26728fb27baSJustin T. Gibbs.Pp
26828fb27baSJustin T. GibbsIn all selection modes,
26928fb27baSJustin T. Gibbs.Fn selectdevs
27028fb27baSJustin T. Gibbswill not select any more than
27128fb27baSJustin T. Gibbs.Va maxshowdevs
27228fb27baSJustin T. Gibbsdevices.  One exception to
27328fb27baSJustin T. Gibbsthis is when you are in
27428fb27baSJustin T. Gibbs.Dq top
27528fb27baSJustin T. Gibbsmode and no devices have been selected.  In
27628fb27baSJustin T. Gibbsthis case,
27728fb27baSJustin T. Gibbs.Fn selectdevs
27828fb27baSJustin T. Gibbswill select every device in the system.  Client programs must pay attention
27928fb27baSJustin T. Gibbsto selection order when deciding whether to pay attention to a particular
28028fb27baSJustin T. Gibbsdevice.  This may be the wrong behavior, and probably requires additional
28128fb27baSJustin T. Gibbsthought.
28228fb27baSJustin T. Gibbs.Pp
28328fb27baSJustin T. Gibbs.Fn selectdevs
28428fb27baSJustin T. Gibbshandles allocation and resizing of the
28528fb27baSJustin T. Gibbs.Va dev_select
28628fb27baSJustin T. Gibbsstructure passed in
28728fb27baSJustin T. Gibbsby the client.
28828fb27baSJustin T. Gibbs.Fn selectdevs
28928fb27baSJustin T. Gibbsuses the
29028fb27baSJustin T. Gibbs.Va numdevs
29128fb27baSJustin T. Gibbsand
29228fb27baSJustin T. Gibbs.Va current_generation
29328fb27baSJustin T. Gibbsfields to track the
29428fb27baSJustin T. Gibbscurrent
29528fb27baSJustin T. Gibbs.Nm
29628fb27baSJustin T. Gibbsgeneration and number of devices.  If
29728fb27baSJustin T. Gibbs.Va num_selections
29828fb27baSJustin T. Gibbsis not the same
29928fb27baSJustin T. Gibbsas
30028fb27baSJustin T. Gibbs.Va numdevs
30128fb27baSJustin T. Gibbsor if
30228fb27baSJustin T. Gibbs.Va select_generation
30328fb27baSJustin T. Gibbsis not the same as
30428fb27baSJustin T. Gibbs.Va current_generation ,
30528fb27baSJustin T. Gibbs.Fn selectdevs
30628fb27baSJustin T. Gibbswill resize the selection list as necessary, and re-initialize the
30728fb27baSJustin T. Gibbsselection array.
30828fb27baSJustin T. Gibbs.Pp
30928fb27baSJustin T. Gibbs.Fn buildmatch
31028fb27baSJustin T. Gibbstakes a comma separated match string and compiles it into a
31128fb27baSJustin T. Gibbs\fBdevstat_match\fR structure that is understood by
31228fb27baSJustin T. Gibbs.Fn selectdevs .
31328fb27baSJustin T. GibbsMatch strings have the following format:
31428fb27baSJustin T. Gibbs.Pp
31528fb27baSJustin T. Gibbs.Bd -literal -offset indent
31628fb27baSJustin T. Gibbsdevice,type,if
31728fb27baSJustin T. Gibbs.Ed
31828fb27baSJustin T. Gibbs.Pp
31928fb27baSJustin T. Gibbs.Fn buildmatch
32028fb27baSJustin T. Gibbstakes care of allocating and reallocating the match list as necessary.
32128fb27baSJustin T. GibbsCurrently known match types include:
32228fb27baSJustin T. Gibbs.Pp
32328fb27baSJustin T. Gibbs.Bl -tag -width indent -compact
32428fb27baSJustin T. Gibbs.It device type:
32528fb27baSJustin T. Gibbs.Bl -tag -width 123456789 -compact
32628fb27baSJustin T. Gibbs.It da
32728fb27baSJustin T. GibbsDirect Access devices
32828fb27baSJustin T. Gibbs.It sa
32928fb27baSJustin T. GibbsSequential Access devices
33028fb27baSJustin T. Gibbs.It printer
33128fb27baSJustin T. GibbsPrinters
33228fb27baSJustin T. Gibbs.It proc
33328fb27baSJustin T. GibbsProcessor devices
33428fb27baSJustin T. Gibbs.It worm
33528fb27baSJustin T. GibbsWrite Once Read Multiple devices
33628fb27baSJustin T. Gibbs.It cd
33728fb27baSJustin T. GibbsCD devices
33828fb27baSJustin T. Gibbs.It scanner
33928fb27baSJustin T. GibbsScanner devices
34028fb27baSJustin T. Gibbs.It optical
34128fb27baSJustin T. GibbsOptical Memory devices
34228fb27baSJustin T. Gibbs.It changer
34328fb27baSJustin T. GibbsMedium Changer devices
34428fb27baSJustin T. Gibbs.It comm
34528fb27baSJustin T. GibbsCommunication devices
34628fb27baSJustin T. Gibbs.It array
34728fb27baSJustin T. GibbsStorage Array devices
34828fb27baSJustin T. Gibbs.It enclosure
34928fb27baSJustin T. GibbsEnclosure Services devices
35028fb27baSJustin T. Gibbs.It floppy
35128fb27baSJustin T. GibbsFloppy devices
35228fb27baSJustin T. Gibbs.El
35328fb27baSJustin T. Gibbs.Pp
35428fb27baSJustin T. Gibbs.It interface:
35528fb27baSJustin T. Gibbs.Bl -tag -width 123456789 -compact
35628fb27baSJustin T. Gibbs.It IDE
35728fb27baSJustin T. GibbsIntegrated Drive Electronics devices
35828fb27baSJustin T. Gibbs.It SCSI
35928fb27baSJustin T. GibbsSmall Computer System Interface devices
36028fb27baSJustin T. Gibbs.It other
36128fb27baSJustin T. GibbsAny other device interface
36228fb27baSJustin T. Gibbs.El
36328fb27baSJustin T. Gibbs.Pp
36428fb27baSJustin T. Gibbs.It passthrough:
36528fb27baSJustin T. Gibbs.Bl -tag -width 123456789 -compact
36628fb27baSJustin T. Gibbs.It pass
36728fb27baSJustin T. GibbsPassthrough devices
36828fb27baSJustin T. Gibbs.El
36928fb27baSJustin T. Gibbs.El
37028fb27baSJustin T. Gibbs.Pp
37128fb27baSJustin T. Gibbs.Fn compute_stats
37228fb27baSJustin T. Gibbsprovides an easy way to obtain various device statistics.  Only two
37328fb27baSJustin T. Gibbsarguments are mandatory:
37428fb27baSJustin T. Gibbs.Va current
37528fb27baSJustin T. Gibbsand
37628fb27baSJustin T. Gibbs.Va etime .
37728fb27baSJustin T. GibbsEvery other argument is optional.  For most applications, the user will
37828fb27baSJustin T. Gibbswant to supply both
37928fb27baSJustin T. Gibbs.Va current
38028fb27baSJustin T. Gibbsand
38128fb27baSJustin T. Gibbs.Va previous
38228fb27baSJustin T. Gibbsdevstat structures so that statistics may be calculated over a given period
38328fb27baSJustin T. Gibbsof time.  In some instances, for instance when calculating statistics since
38428fb27baSJustin T. Gibbssystem boot, the user may pass in a NULL pointer for the
38528fb27baSJustin T. Gibbs.Va previous
38628fb27baSJustin T. Gibbsargument.  In that case,
38728fb27baSJustin T. Gibbs.Fn compute_stats
38828fb27baSJustin T. Gibbswill use the total stats in the
38928fb27baSJustin T. Gibbs.Va current
39028fb27baSJustin T. Gibbsstructure to calculate statistics over
39128fb27baSJustin T. Gibbs.Va etime .
39228fb27baSJustin T. GibbsThe various statistics that may be calculated by
39328fb27baSJustin T. Gibbs.Fn compute_stats
39428fb27baSJustin T. Gibbsshould be mostly explained by the function declaration itself, but for
39528fb27baSJustin T. Gibbscompleteness here is a list of variable names and the statistics that will
39628fb27baSJustin T. Gibbsbe put in them:
39728fb27baSJustin T. Gibbs.Bl -tag -width transfers_per_second
39828fb27baSJustin T. Gibbs.It total_bytes
39928fb27baSJustin T. GibbsThis is the total number of bytes transferred on the given device, both
40028fb27baSJustin T. Gibbsreads and writes, between the acquisition of
40128fb27baSJustin T. Gibbs.Va previous
40228fb27baSJustin T. Gibbsand the acquisition of
40328fb27baSJustin T. Gibbs.Va current .
40428fb27baSJustin T. GibbsIf
40528fb27baSJustin T. Gibbs.Va previous
40628fb27baSJustin T. Gibbsis NULL, the result will be the total reads and writes given in
40728fb27baSJustin T. Gibbs.Va current .
40828fb27baSJustin T. Gibbs.It total_transfers
40928fb27baSJustin T. GibbsThis is the total number of transfers completed between the
41028fb27baSJustin T. Gibbsacquisition of
41128fb27baSJustin T. Gibbs.Va previous
41228fb27baSJustin T. Gibbsand the acquisition of
41328fb27baSJustin T. Gibbs.Va current .
41428fb27baSJustin T. GibbsIf
41528fb27baSJustin T. Gibbs.Va previous
41628fb27baSJustin T. Gibbsis NULL, the result will be the total number of transactions listed in
41728fb27baSJustin T. Gibbs.Va current .
41828fb27baSJustin T. Gibbs.It total_blocks
41928fb27baSJustin T. GibbsThis is basically
42028fb27baSJustin T. Gibbs.Va total_bytes
42128fb27baSJustin T. Gibbsdivided by the device blocksize.  If the device blocksize is listed as
42228fb27baSJustin T. Gibbs.Sq 0 ,
42328fb27baSJustin T. Gibbsthe device blocksize will default to 512 bytes.
42428fb27baSJustin T. Gibbs.It kb_per_transfer
42528fb27baSJustin T. GibbsThis is the average number of kilobytes per transfer during the measurement
42628fb27baSJustin T. Gibbsperiod.
42728fb27baSJustin T. Gibbs.It transfers_per_second
42828fb27baSJustin T. GibbsThis is the average number of transfers per second.
42928fb27baSJustin T. Gibbs.It mb_per_second
43028fb27baSJustin T. GibbsThis is average megabytes per second.
43128fb27baSJustin T. Gibbs.It blocks_per_second
43228fb27baSJustin T. GibbsThis is average blocks per second.  If the device blocksize is
43328fb27baSJustin T. Gibbs.Sq 0 ,
43428fb27baSJustin T. Gibbsa default blocksize of 512 bytes will be used instead.
43528fb27baSJustin T. Gibbs.It ms_per_transaction
43628fb27baSJustin T. GibbsThe average number of miliseconds per transaction.
43728fb27baSJustin T. Gibbs.El
43828fb27baSJustin T. Gibbs.Pp
43928fb27baSJustin T. Gibbs.Fn compute_etime
44028fb27baSJustin T. Gibbsprovides an easy way to find the difference in seconds between two
44128fb27baSJustin T. Gibbs.Va timeval
44228fb27baSJustin T. Gibbsstructures.  This is most commonly used in conjunction with the time
44328fb27baSJustin T. Gibbsrecorded by the
44428fb27baSJustin T. Gibbs.Fn getdevs
44528fb27baSJustin T. Gibbsfunction (in struct
44628fb27baSJustin T. Gibbs.Va statinfo )
44728fb27baSJustin T. Gibbseach time it fetches the current
44828fb27baSJustin T. Gibbs.Nm
44928fb27baSJustin T. Gibbslist.
45028fb27baSJustin T. Gibbs.Sh RETURN VALUES
45128fb27baSJustin T. Gibbs.Fn getnumdevs ,
45228fb27baSJustin T. Gibbs.Fn getgeneration ,
45328fb27baSJustin T. Gibbsand
45428fb27baSJustin T. Gibbs.Fn getversion
45528fb27baSJustin T. Gibbsreturn the indicated \fBsysctl\fR variable, or -1 if there is an error
45628fb27baSJustin T. Gibbsfetching the variable.
45728fb27baSJustin T. Gibbs.Pp
45828fb27baSJustin T. Gibbs.Fn checkversion
45928fb27baSJustin T. Gibbsreturns 0 if the kernel and userland
46028fb27baSJustin T. Gibbs.Nm devstat
46128fb27baSJustin T. Gibbsversions match.  If they do not match, it returns -1.
46228fb27baSJustin T. Gibbs.Pp
46328fb27baSJustin T. Gibbs.Fn getdevs
46428fb27baSJustin T. Gibbsand
46528fb27baSJustin T. Gibbs.Fn selectdevs
46628fb27baSJustin T. Gibbsreturn -1 in case of an error, 0 if there is no error and 1 if the device
46728fb27baSJustin T. Gibbslist or selected devices have changed.  A return value of 1 from
46828fb27baSJustin T. Gibbs.Fn getdevs
46928fb27baSJustin T. Gibbsis usually a hint to re-run
47028fb27baSJustin T. Gibbs.Fn selectdevs
47128fb27baSJustin T. Gibbsbecause the device list has changed.
47228fb27baSJustin T. Gibbs.Pp
47328fb27baSJustin T. Gibbs.Fn buildmatch
47428fb27baSJustin T. Gibbsreturns -1 for error, and 0 if there is no error.
47528fb27baSJustin T. Gibbs.Pp
47628fb27baSJustin T. Gibbs.Fn compute_stats
47728fb27baSJustin T. Gibbsreturns -1 for error, and 0 for success.
47828fb27baSJustin T. Gibbs.Pp
47928fb27baSJustin T. Gibbs.Fn compute_etime
48028fb27baSJustin T. Gibbsreturns the computed elapsed time.
48128fb27baSJustin T. Gibbs.Pp
48228fb27baSJustin T. GibbsIf an error is returned from one of the
48328fb27baSJustin T. Gibbs.Nm
48428fb27baSJustin T. Gibbslibrary functions, the reason for the error is generally printed in
48528fb27baSJustin T. Gibbsthe global string
48628fb27baSJustin T. Gibbs.Va devstat_errbuf
48728fb27baSJustin T. Gibbswhich is
48828fb27baSJustin T. Gibbs.Dv DEVSTAT_ERRBUF_SIZE
48928fb27baSJustin T. Gibbscharacters long.
49028fb27baSJustin T. Gibbs.Sh SEE ALSO
49128fb27baSJustin T. Gibbs.Xr systat 1 ,
49228fb27baSJustin T. Gibbs.Xr iostat 8 ,
49328fb27baSJustin T. Gibbs.Xr rpc.rstatd 8 ,
49428fb27baSJustin T. Gibbs.Xr vmstat 8 ,
49528fb27baSJustin T. Gibbs.Xr devstat 9
49628fb27baSJustin T. Gibbs.Sh HISTORY
49728fb27baSJustin T. GibbsThe
49828fb27baSJustin T. Gibbs.Nm
49928fb27baSJustin T. Gibbsstatistics system first appeared in
50028fb27baSJustin T. Gibbs.Fx 3.0 .
50128fb27baSJustin T. Gibbs.Sh AUTHORS
50228fb27baSJustin T. GibbsKenneth Merry
50328fb27baSJustin T. Gibbs.Aq ken@FreeBSD.ORG
50428fb27baSJustin T. Gibbs.Sh BUGS
50528fb27baSJustin T. GibbsThere should probably be an interface to de-allocate memory allocated by
50628fb27baSJustin T. Gibbs.Fn getdevs ,
50728fb27baSJustin T. Gibbs.Fn selectdevs ,
50828fb27baSJustin T. Gibbsand
50928fb27baSJustin T. Gibbs.Fn buildmatch .
51028fb27baSJustin T. Gibbs.Pp
51128fb27baSJustin T. Gibbs.Fn selectdevs
51228fb27baSJustin T. Gibbsshould probably not select more than
51328fb27baSJustin T. Gibbs.Va maxshowdevs
51428fb27baSJustin T. Gibbsdevices in
51528fb27baSJustin T. Gibbs.Dq top
51628fb27baSJustin T. Gibbsmode when no devices have been selected previously.
51728fb27baSJustin T. Gibbs.Pp
51828fb27baSJustin T. GibbsThere should probably be functions to perform the statistics buffer
51928fb27baSJustin T. Gibbsswapping that goes on in most of the clients of this library.
52028fb27baSJustin T. Gibbs.Pp
52128fb27baSJustin T. GibbsThe
52228fb27baSJustin T. Gibbs.Va statinfo
52328fb27baSJustin T. Gibbsand
52428fb27baSJustin T. Gibbs.Va devinfo
52528fb27baSJustin T. Gibbsstructures should probably be cleaned up and thought out a little more.
526