xref: /freebsd/lib/libdevstat/devstat.3 (revision 3b8ecdbbbec3a89d56cbdf4b23bb8ac3454065a8)
128fb27baSJustin T. Gibbs.\"
26f83979dSKenneth D. Merry.\" Copyright (c) 1998, 1999 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.\"
287f3dea24SPeter Wemm.\" $FreeBSD$
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
34b27e4ff3SAlexey Zelkin.Nm devstat ,
35b27e4ff3SAlexey Zelkin.Nm getnumdevs ,
36b27e4ff3SAlexey Zelkin.Nm getgeneration ,
37b27e4ff3SAlexey Zelkin.Nm getversion ,
38b27e4ff3SAlexey Zelkin.Nm checkversion ,
39b27e4ff3SAlexey Zelkin.Nm getdevs ,
40b27e4ff3SAlexey Zelkin.Nm selectdevs ,
41b27e4ff3SAlexey Zelkin.Nm buildmatch ,
42b27e4ff3SAlexey Zelkin.Nm compute_stats ,
43b27e4ff3SAlexey Zelkin.Nm compute_etime
4428fb27baSJustin T. Gibbs.Nd device statistics utility library
459d5b4f83SAlexey Zelkin.Sh LIBRARY
469d5b4f83SAlexey Zelkin.Lb libdevstat
4728fb27baSJustin T. Gibbs.Sh SYNOPSIS
48aedadd1cSBruce Evans.Fd #include <sys/dkstat.h>
4928fb27baSJustin T. Gibbs.Fd #include <devstat.h>
5028fb27baSJustin T. Gibbs.Ft int
5128fb27baSJustin T. Gibbs.Fn getnumdevs "void"
52bcc6a3daSKenneth D. Merry.Ft long
5328fb27baSJustin T. Gibbs.Fn getgeneration "void"
5428fb27baSJustin T. Gibbs.Ft int
5528fb27baSJustin T. Gibbs.Fn getversion "void"
5628fb27baSJustin T. Gibbs.Ft int
5728fb27baSJustin T. Gibbs.Fn checkversion "void"
5828fb27baSJustin T. Gibbs.Ft int
5928fb27baSJustin T. Gibbs.Fn getdevs "struct statinfo *stats"
6028fb27baSJustin T. Gibbs.Ft int
6128fb27baSJustin T. Gibbs.Fo selectdevs
6228fb27baSJustin T. Gibbs.Fa "struct device_selection **dev_select"
6328fb27baSJustin T. Gibbs.Fa "int *num_selected"
6428fb27baSJustin T. Gibbs.Fa "int *num_selections"
65bcc6a3daSKenneth D. Merry.Fa "long *select_generation"
66bcc6a3daSKenneth D. Merry.Fa "long current_generation"
6728fb27baSJustin T. Gibbs.Fa "struct devstat *devices"
6828fb27baSJustin T. Gibbs.Fa "int numdevs"
6928fb27baSJustin T. Gibbs.Fa "struct devstat_match *matches"
7028fb27baSJustin T. Gibbs.Fa "int num_matches"
7128fb27baSJustin T. Gibbs.Fa "char **dev_selections"
7228fb27baSJustin T. Gibbs.Fa "int num_dev_selections"
7328fb27baSJustin T. Gibbs.Fa "devstat_select_mode select_mode"
7428fb27baSJustin T. Gibbs.Fa "int maxshowdevs"
7528fb27baSJustin T. Gibbs.Fa "int perf_select"
7628fb27baSJustin T. Gibbs.Fc
7728fb27baSJustin T. Gibbs.Ft int
7828fb27baSJustin T. Gibbs.Fo buildmatch
7928fb27baSJustin T. Gibbs.Fa "char *match_str"
8028fb27baSJustin T. Gibbs.Fa "struct devstat_match **matches"
8128fb27baSJustin T. Gibbs.Fa "int *num_matches"
8228fb27baSJustin T. Gibbs.Fc
8328fb27baSJustin T. Gibbs.Ft int
8428fb27baSJustin T. Gibbs.Fo compute_stats
8528fb27baSJustin T. Gibbs.Fa "struct devstat *current"
8628fb27baSJustin T. Gibbs.Fa "struct devstat *previous"
8728fb27baSJustin T. Gibbs.Fa "long double etime"
8828fb27baSJustin T. Gibbs.Fa "u_int64_t *total_bytes"
8928fb27baSJustin T. Gibbs.Fa "u_int64_t *total_transfers"
9028fb27baSJustin T. Gibbs.Fa "u_int64_t *total_blocks"
9128fb27baSJustin T. Gibbs.Fa "long double *kb_per_transfer"
9228fb27baSJustin T. Gibbs.Fa "long double *transfers_per_second"
9328fb27baSJustin T. Gibbs.Fa "long double *mb_per_second"
9428fb27baSJustin T. Gibbs.Fa "long double *blocks_per_second"
9528fb27baSJustin T. Gibbs.Fa "long double *ms_per_transaction"
9628fb27baSJustin T. Gibbs.Fc
9728fb27baSJustin T. Gibbs.Ft long double
9828fb27baSJustin T. Gibbs.Fo compute_etime
9928fb27baSJustin T. Gibbs.Fa "struct timeval cur_time"
10028fb27baSJustin T. Gibbs.Fa "struct timeval prev_time"
10128fb27baSJustin T. Gibbs.Fc
10228fb27baSJustin T. Gibbs.Sh DESCRIPTION
10328fb27baSJustin T. GibbsThe
10428fb27baSJustin T. Gibbs.Nm
10528fb27baSJustin T. Gibbslibrary is a library of helper functions for dealing with the kernel
10628fb27baSJustin T. Gibbs.Xr devstat 9
10728fb27baSJustin T. Gibbsinterface, which is accessible to users via
10828fb27baSJustin T. Gibbs.Xr sysctl 3 .
10928fb27baSJustin T. Gibbs.Pp
11028fb27baSJustin T. Gibbs.Fn getnumdevs
11128fb27baSJustin T. Gibbsreturns the number of devices registered with the
1123b8ecdbbSRuslan Ermilov.Nm
11328fb27baSJustin T. Gibbssubsystem in the kernel.
11428fb27baSJustin T. Gibbs.Pp
11528fb27baSJustin T. Gibbs.Fn getgeneration
11628fb27baSJustin T. Gibbsreturns the current generation of the
1173b8ecdbbSRuslan Ermilov.Nm
11828fb27baSJustin T. Gibbslist of devices in the kernel.
11928fb27baSJustin T. Gibbs.Pp
12028fb27baSJustin T. Gibbs.Fn getversion
12128fb27baSJustin T. Gibbsreturns the current kernel
1223b8ecdbbSRuslan Ermilov.Nm
12328fb27baSJustin T. Gibbsversion.
12428fb27baSJustin T. Gibbs.Pp
12528fb27baSJustin T. Gibbs.Fn checkversion
12628fb27baSJustin T. Gibbschecks the userland devstat version against the kernel devstat version.  If
12728fb27baSJustin T. Gibbsthe two are identical, it returns zero.  Otherwise, it prints an
12828fb27baSJustin T. Gibbsappropriate error in
12928fb27baSJustin T. Gibbs.Va devstat_errbuf
13028fb27baSJustin T. Gibbsand returns -1.
13128fb27baSJustin T. Gibbs.Pp
13228fb27baSJustin T. Gibbs.Fn getdevs
13328fb27baSJustin T. Gibbsfetches the current list of devices and statistics into the supplied
13428fb27baSJustin T. Gibbs.Va statinfo
13528fb27baSJustin T. Gibbsstructure.  The
13628fb27baSJustin T. Gibbs.Va statinfo
13728fb27baSJustin T. Gibbsstructure can be found in
13828fb27baSJustin T. Gibbs.Aq Pa devstat.h :
13928fb27baSJustin T. Gibbs.Bd -literal -offset indent
14028fb27baSJustin T. Gibbsstruct statinfo {
14128fb27baSJustin T. Gibbs	long            cp_time[CPUSTATES];
14228fb27baSJustin T. Gibbs	long            tk_nin;
14328fb27baSJustin T. Gibbs	long            tk_nout;
14428fb27baSJustin T. Gibbs	struct devinfo  *dinfo;
14528fb27baSJustin T. Gibbs	struct timeval  busy_time;
14628fb27baSJustin T. Gibbs};
14728fb27baSJustin T. Gibbs.Ed
14828fb27baSJustin T. Gibbs.Pp
14928fb27baSJustin T. Gibbs.Fn getdevs
15028fb27baSJustin T. Gibbsexpects the
15128fb27baSJustin T. Gibbs.Va statinfo
15228fb27baSJustin T. Gibbsstructure to be allocated, and it also expects the
15328fb27baSJustin T. Gibbs.Va dinfo
1546f83979dSKenneth D. Merrysubelement to be allocated and zeroed prior to the first invocation of
1556f83979dSKenneth D. Merry.Fn getdevs .
1566f83979dSKenneth D. MerryThe
1576f83979dSKenneth D. Merry.Va dinfo
1586f83979dSKenneth D. Merrysubelement is used to store state between calls, and should not be modified
1596f83979dSKenneth D. Merryafter the first call to
1606f83979dSKenneth D. Merry.Fn getdevs .
1616f83979dSKenneth D. MerryThe
16228fb27baSJustin T. Gibbs.Va dinfo
16328fb27baSJustin T. Gibbssubelement contains the following elements:
16428fb27baSJustin T. Gibbs.Bd -literal -offset indent
16528fb27baSJustin T. Gibbsstruct devinfo {
16628fb27baSJustin T. Gibbs	struct devstat	*devices;
16728fb27baSJustin T. Gibbs	u_int8_t	*mem_ptr;
168bcc6a3daSKenneth D. Merry	long		generation;
16928fb27baSJustin T. Gibbs	int		numdevs;
17028fb27baSJustin T. Gibbs};
17128fb27baSJustin T. Gibbs.Ed
17228fb27baSJustin T. Gibbs.Pp
17328fb27baSJustin T. GibbsThe
17428fb27baSJustin T. Gibbs.Va kern.devstat.all
17528fb27baSJustin T. Gibbs.Nm sysctl
17628fb27baSJustin T. Gibbsvariable contains an array of
1773b8ecdbbSRuslan Ermilov.Nm
17828fb27baSJustin T. Gibbsstructures, but at the head of the array is the current
1793b8ecdbbSRuslan Ermilov.Nm
18028fb27baSJustin T. Gibbsgeneration.  The reason the generation is at the head of the buffer is so
18128fb27baSJustin T. Gibbsthat userland software accessing the devstat statistics information can
18228fb27baSJustin T. Gibbsatomically get both the statistics information and the corresponding
18328fb27baSJustin T. Gibbsgeneration number.  If client software were forced to get the generation
18428fb27baSJustin T. Gibbsnumber via a separate
18528fb27baSJustin T. Gibbs.Nm sysctl
18628fb27baSJustin T. Gibbsvariable (which is available for convenience), the list of devices could
18728fb27baSJustin T. Gibbschange between the time the client gets the generation and the time the
18828fb27baSJustin T. Gibbsclient gets the device list.
18928fb27baSJustin T. Gibbs.Pp
19028fb27baSJustin T. GibbsThe
19128fb27baSJustin T. Gibbs.Va mem_ptr
19228fb27baSJustin T. Gibbssubelement of the
19328fb27baSJustin T. Gibbs.Va devinfo
19428fb27baSJustin T. Gibbsstructure is a pointer to memory that is allocated, and resized if
19528fb27baSJustin T. Gibbsnecessary, by
19628fb27baSJustin T. Gibbs.Fn getdevs .
19728fb27baSJustin T. GibbsThe devices subelement of the
19828fb27baSJustin T. Gibbs.Va devinfo
19928fb27baSJustin T. Gibbsstructure is basically a pointer to the beginning of the array of devstat
20028fb27baSJustin T. Gibbsstructures from the
20128fb27baSJustin T. Gibbs.Va kern.devstat.all
20228fb27baSJustin T. Gibbs.Nm sysctl
20328fb27baSJustin T. Gibbsvariable.  The generation subelement of the
2043b8ecdbbSRuslan Ermilov.Va devinfo
20528fb27baSJustin T. Gibbsstructure contains the generation number from the
20628fb27baSJustin T. Gibbs.Va kern.devstat.all
20728fb27baSJustin T. Gibbs.Nm sysctl
20828fb27baSJustin T. Gibbsvariable.
20928fb27baSJustin T. GibbsThe
21028fb27baSJustin T. Gibbs.Va numdevs
21128fb27baSJustin T. Gibbssubelement of the
21228fb27baSJustin T. Gibbs.Va devinfo
21328fb27baSJustin T. Gibbsstructure contains the current
21428fb27baSJustin T. Gibbsnumber of devices registered with the kernel
2153b8ecdbbSRuslan Ermilov.Nm
21628fb27baSJustin T. Gibbssubsystem.
21728fb27baSJustin T. Gibbs.Pp
21828fb27baSJustin T. Gibbs.Fn selectdevs
21928fb27baSJustin T. Gibbsselects devices to display based upon a number of criteria:
22028fb27baSJustin T. Gibbs.Bl -tag -width flag
22128fb27baSJustin T. Gibbs.It specified devices
22228fb27baSJustin T. GibbsSpecified devices are the first selection priority.  These are generally
22328fb27baSJustin T. Gibbsdevices specified by name by the user.  e.g. da0, da1, cd0.
22428fb27baSJustin T. Gibbs.It match patterns
22528fb27baSJustin T. GibbsThese are pattern matching expressions generated by
22628fb27baSJustin T. Gibbs.Fn buildmatch
22728fb27baSJustin T. Gibbsfrom user input.
22828fb27baSJustin T. Gibbs.It performance
22928fb27baSJustin T. GibbsIf performance mode is enabled, devices will be sorted based on the
23028fb27baSJustin T. Gibbs.Va bytes
23128fb27baSJustin T. Gibbsfield in the
23228fb27baSJustin T. Gibbs.Va device_selection
23328fb27baSJustin T. Gibbsstructure passed in to
23428fb27baSJustin T. Gibbs.Fn selectdevs .
23528fb27baSJustin T. GibbsThe
23628fb27baSJustin T. Gibbs.Va bytes
23728fb27baSJustin T. Gibbsvalue currently must be maintained by the user.  In the future,
23828fb27baSJustin T. Gibbsthis may be done for him in a
23928fb27baSJustin T. Gibbs.Nm
24028fb27baSJustin T. Gibbslibrary routine.
24128fb27baSJustin T. GibbsIf no devices have been selected by name or by pattern, the performance
24228fb27baSJustin T. Gibbstracking code will select every device in the system, and sort them by
2435db9ad2cSDavid E. O'Brienperformance.  If devices have been selected by name or pattern, the
24428fb27baSJustin T. Gibbsperformance tracking code will honor those selections and will only sort
24528fb27baSJustin T. Gibbsamong the selected devices.
24628fb27baSJustin T. Gibbs.It order in the devstat list
24728fb27baSJustin T. GibbsIf the selection mode is set to DS_SELECT_ADD, and if there are still less
24828fb27baSJustin T. Gibbsthan
24928fb27baSJustin T. Gibbs.Va maxshowdevs
25028fb27baSJustin T. Gibbsdevices selected,
25128fb27baSJustin T. Gibbs.Fn selectdevs
25228fb27baSJustin T. Gibbswill automatically select up to
25328fb27baSJustin T. Gibbs.Va maxshowdevs
25428fb27baSJustin T. Gibbsdevices.
25528fb27baSJustin T. Gibbs.El
25628fb27baSJustin T. Gibbs.Pp
25728fb27baSJustin T. Gibbs.Fn selectdevs
25828fb27baSJustin T. Gibbsperforms selections in four different modes:
25928fb27baSJustin T. Gibbs.Bl -tag -width DS_SELECT_ADDONLY
26028fb27baSJustin T. Gibbs.It DS_SELECT_ADD
26128fb27baSJustin T. GibbsIn add mode,
26228fb27baSJustin T. Gibbs.Fn selectdevs
26328fb27baSJustin T. Gibbswill select any unselected devices specified by name or matching pattern.
26428fb27baSJustin T. GibbsIt will also select more devices, in devstat list order, until the number
26528fb27baSJustin T. Gibbsof selected devices is equal to
26628fb27baSJustin T. Gibbs.Va maxshowdevs
26728fb27baSJustin T. Gibbsor until all devices are
26828fb27baSJustin T. Gibbsselected.
26928fb27baSJustin T. Gibbs.It DS_SELECT_ONLY
27028fb27baSJustin T. GibbsIn only mode,
27128fb27baSJustin T. Gibbs.Fn selectdevs
27228fb27baSJustin T. Gibbswill clear all current selections, and will only select devices specified
27328fb27baSJustin T. Gibbsby name or by matching pattern.
27428fb27baSJustin T. Gibbs.It DS_SELECT_REMOVE
27528fb27baSJustin T. GibbsIn remove mode,
27628fb27baSJustin T. Gibbs.Fn selectdevs
27728fb27baSJustin T. Gibbswill remove devices specified by name or by matching pattern.  It will not
27828fb27baSJustin T. Gibbsselect any additional devices.
27928fb27baSJustin T. Gibbs.It DS_SELECT_ADDONLY
28028fb27baSJustin T. GibbsIn add only mode,
28128fb27baSJustin T. Gibbs.Fn selectdevs
28228fb27baSJustin T. Gibbswill select any unselected devices specified by name or matching pattern.
28328fb27baSJustin T. GibbsIn this respect it is identical to add mode.  It will not, however, select
28428fb27baSJustin T. Gibbsany devices other than those specified.
28528fb27baSJustin T. Gibbs.El
28628fb27baSJustin T. Gibbs.Pp
28728fb27baSJustin T. GibbsIn all selection modes,
28828fb27baSJustin T. Gibbs.Fn selectdevs
28928fb27baSJustin T. Gibbswill not select any more than
29028fb27baSJustin T. Gibbs.Va maxshowdevs
29128fb27baSJustin T. Gibbsdevices.  One exception to
29228fb27baSJustin T. Gibbsthis is when you are in
29328fb27baSJustin T. Gibbs.Dq top
29428fb27baSJustin T. Gibbsmode and no devices have been selected.  In
29528fb27baSJustin T. Gibbsthis case,
29628fb27baSJustin T. Gibbs.Fn selectdevs
29728fb27baSJustin T. Gibbswill select every device in the system.  Client programs must pay attention
29828fb27baSJustin T. Gibbsto selection order when deciding whether to pay attention to a particular
29928fb27baSJustin T. Gibbsdevice.  This may be the wrong behavior, and probably requires additional
30028fb27baSJustin T. Gibbsthought.
30128fb27baSJustin T. Gibbs.Pp
30228fb27baSJustin T. Gibbs.Fn selectdevs
30328fb27baSJustin T. Gibbshandles allocation and resizing of the
30428fb27baSJustin T. Gibbs.Va dev_select
30528fb27baSJustin T. Gibbsstructure passed in
30628fb27baSJustin T. Gibbsby the client.
30728fb27baSJustin T. Gibbs.Fn selectdevs
30828fb27baSJustin T. Gibbsuses the
30928fb27baSJustin T. Gibbs.Va numdevs
31028fb27baSJustin T. Gibbsand
31128fb27baSJustin T. Gibbs.Va current_generation
31228fb27baSJustin T. Gibbsfields to track the
31328fb27baSJustin T. Gibbscurrent
31428fb27baSJustin T. Gibbs.Nm
31528fb27baSJustin T. Gibbsgeneration and number of devices.  If
31628fb27baSJustin T. Gibbs.Va num_selections
31728fb27baSJustin T. Gibbsis not the same
31828fb27baSJustin T. Gibbsas
31928fb27baSJustin T. Gibbs.Va numdevs
32028fb27baSJustin T. Gibbsor if
32128fb27baSJustin T. Gibbs.Va select_generation
32228fb27baSJustin T. Gibbsis not the same as
32328fb27baSJustin T. Gibbs.Va current_generation ,
32428fb27baSJustin T. Gibbs.Fn selectdevs
32528fb27baSJustin T. Gibbswill resize the selection list as necessary, and re-initialize the
32628fb27baSJustin T. Gibbsselection array.
32728fb27baSJustin T. Gibbs.Pp
32828fb27baSJustin T. Gibbs.Fn buildmatch
32928fb27baSJustin T. Gibbstakes a comma separated match string and compiles it into a
33028fb27baSJustin T. Gibbs\fBdevstat_match\fR structure that is understood by
33128fb27baSJustin T. Gibbs.Fn selectdevs .
33228fb27baSJustin T. GibbsMatch strings have the following format:
33328fb27baSJustin T. Gibbs.Pp
33428fb27baSJustin T. Gibbs.Bd -literal -offset indent
33528fb27baSJustin T. Gibbsdevice,type,if
33628fb27baSJustin T. Gibbs.Ed
33728fb27baSJustin T. Gibbs.Pp
33828fb27baSJustin T. Gibbs.Fn buildmatch
33928fb27baSJustin T. Gibbstakes care of allocating and reallocating the match list as necessary.
34028fb27baSJustin T. GibbsCurrently known match types include:
34128fb27baSJustin T. Gibbs.Pp
34228fb27baSJustin T. Gibbs.Bl -tag -width indent -compact
34328fb27baSJustin T. Gibbs.It device type:
34428fb27baSJustin T. Gibbs.Bl -tag -width 123456789 -compact
34528fb27baSJustin T. Gibbs.It da
34628fb27baSJustin T. GibbsDirect Access devices
34728fb27baSJustin T. Gibbs.It sa
34828fb27baSJustin T. GibbsSequential Access devices
34928fb27baSJustin T. Gibbs.It printer
35028fb27baSJustin T. GibbsPrinters
35128fb27baSJustin T. Gibbs.It proc
35228fb27baSJustin T. GibbsProcessor devices
35328fb27baSJustin T. Gibbs.It worm
35428fb27baSJustin T. GibbsWrite Once Read Multiple devices
35528fb27baSJustin T. Gibbs.It cd
35628fb27baSJustin T. GibbsCD devices
35728fb27baSJustin T. Gibbs.It scanner
35828fb27baSJustin T. GibbsScanner devices
35928fb27baSJustin T. Gibbs.It optical
36028fb27baSJustin T. GibbsOptical Memory devices
36128fb27baSJustin T. Gibbs.It changer
36228fb27baSJustin T. GibbsMedium Changer devices
36328fb27baSJustin T. Gibbs.It comm
36428fb27baSJustin T. GibbsCommunication devices
36528fb27baSJustin T. Gibbs.It array
36628fb27baSJustin T. GibbsStorage Array devices
36728fb27baSJustin T. Gibbs.It enclosure
36828fb27baSJustin T. GibbsEnclosure Services devices
36928fb27baSJustin T. Gibbs.It floppy
37028fb27baSJustin T. GibbsFloppy devices
37128fb27baSJustin T. Gibbs.El
37228fb27baSJustin T. Gibbs.Pp
37328fb27baSJustin T. Gibbs.It interface:
37428fb27baSJustin T. Gibbs.Bl -tag -width 123456789 -compact
37528fb27baSJustin T. Gibbs.It IDE
37628fb27baSJustin T. GibbsIntegrated Drive Electronics devices
37728fb27baSJustin T. Gibbs.It SCSI
37828fb27baSJustin T. GibbsSmall Computer System Interface devices
37928fb27baSJustin T. Gibbs.It other
38028fb27baSJustin T. GibbsAny other device interface
38128fb27baSJustin T. Gibbs.El
38228fb27baSJustin T. Gibbs.Pp
38328fb27baSJustin T. Gibbs.It passthrough:
38428fb27baSJustin T. Gibbs.Bl -tag -width 123456789 -compact
38528fb27baSJustin T. Gibbs.It pass
38628fb27baSJustin T. GibbsPassthrough devices
38728fb27baSJustin T. Gibbs.El
38828fb27baSJustin T. Gibbs.El
38928fb27baSJustin T. Gibbs.Pp
39028fb27baSJustin T. Gibbs.Fn compute_stats
39128fb27baSJustin T. Gibbsprovides an easy way to obtain various device statistics.  Only two
39228fb27baSJustin T. Gibbsarguments are mandatory:
39328fb27baSJustin T. Gibbs.Va current
39428fb27baSJustin T. Gibbsand
39528fb27baSJustin T. Gibbs.Va etime .
39628fb27baSJustin T. GibbsEvery other argument is optional.  For most applications, the user will
39728fb27baSJustin T. Gibbswant to supply both
39828fb27baSJustin T. Gibbs.Va current
39928fb27baSJustin T. Gibbsand
40028fb27baSJustin T. Gibbs.Va previous
40128fb27baSJustin T. Gibbsdevstat structures so that statistics may be calculated over a given period
40228fb27baSJustin T. Gibbsof time.  In some instances, for instance when calculating statistics since
40328fb27baSJustin T. Gibbssystem boot, the user may pass in a NULL pointer for the
40428fb27baSJustin T. Gibbs.Va previous
40528fb27baSJustin T. Gibbsargument.  In that case,
40628fb27baSJustin T. Gibbs.Fn compute_stats
40728fb27baSJustin T. Gibbswill use the total stats in the
40828fb27baSJustin T. Gibbs.Va current
40928fb27baSJustin T. Gibbsstructure to calculate statistics over
41028fb27baSJustin T. Gibbs.Va etime .
41128fb27baSJustin T. GibbsThe various statistics that may be calculated by
41228fb27baSJustin T. Gibbs.Fn compute_stats
41328fb27baSJustin T. Gibbsshould be mostly explained by the function declaration itself, but for
41428fb27baSJustin T. Gibbscompleteness here is a list of variable names and the statistics that will
41528fb27baSJustin T. Gibbsbe put in them:
41628fb27baSJustin T. Gibbs.Bl -tag -width transfers_per_second
41728fb27baSJustin T. Gibbs.It total_bytes
41828fb27baSJustin T. GibbsThis is the total number of bytes transferred on the given device, both
41928fb27baSJustin T. Gibbsreads and writes, between the acquisition of
42028fb27baSJustin T. Gibbs.Va previous
42128fb27baSJustin T. Gibbsand the acquisition of
42228fb27baSJustin T. Gibbs.Va current .
42328fb27baSJustin T. GibbsIf
42428fb27baSJustin T. Gibbs.Va previous
42528fb27baSJustin T. Gibbsis NULL, the result will be the total reads and writes given in
42628fb27baSJustin T. Gibbs.Va current .
42728fb27baSJustin T. Gibbs.It total_transfers
42828fb27baSJustin T. GibbsThis is the total number of transfers completed between the
42928fb27baSJustin T. Gibbsacquisition of
43028fb27baSJustin T. Gibbs.Va previous
43128fb27baSJustin T. Gibbsand the acquisition of
43228fb27baSJustin T. Gibbs.Va current .
43328fb27baSJustin T. GibbsIf
43428fb27baSJustin T. Gibbs.Va previous
43528fb27baSJustin T. Gibbsis NULL, the result will be the total number of transactions listed in
43628fb27baSJustin T. Gibbs.Va current .
43728fb27baSJustin T. Gibbs.It total_blocks
43828fb27baSJustin T. GibbsThis is basically
43928fb27baSJustin T. Gibbs.Va total_bytes
44028fb27baSJustin T. Gibbsdivided by the device blocksize.  If the device blocksize is listed as
44128fb27baSJustin T. Gibbs.Sq 0 ,
44228fb27baSJustin T. Gibbsthe device blocksize will default to 512 bytes.
44328fb27baSJustin T. Gibbs.It kb_per_transfer
44428fb27baSJustin T. GibbsThis is the average number of kilobytes per transfer during the measurement
44528fb27baSJustin T. Gibbsperiod.
44628fb27baSJustin T. Gibbs.It transfers_per_second
44728fb27baSJustin T. GibbsThis is the average number of transfers per second.
44828fb27baSJustin T. Gibbs.It mb_per_second
44928fb27baSJustin T. GibbsThis is average megabytes per second.
45028fb27baSJustin T. Gibbs.It blocks_per_second
45128fb27baSJustin T. GibbsThis is average blocks per second.  If the device blocksize is
45228fb27baSJustin T. Gibbs.Sq 0 ,
45328fb27baSJustin T. Gibbsa default blocksize of 512 bytes will be used instead.
45428fb27baSJustin T. Gibbs.It ms_per_transaction
4555db9ad2cSDavid E. O'BrienThe average number of milliseconds per transaction.
45628fb27baSJustin T. Gibbs.El
45728fb27baSJustin T. Gibbs.Pp
45828fb27baSJustin T. Gibbs.Fn compute_etime
45928fb27baSJustin T. Gibbsprovides an easy way to find the difference in seconds between two
46028fb27baSJustin T. Gibbs.Va timeval
46128fb27baSJustin T. Gibbsstructures.  This is most commonly used in conjunction with the time
46228fb27baSJustin T. Gibbsrecorded by the
46328fb27baSJustin T. Gibbs.Fn getdevs
46428fb27baSJustin T. Gibbsfunction (in struct
46528fb27baSJustin T. Gibbs.Va statinfo )
46628fb27baSJustin T. Gibbseach time it fetches the current
46728fb27baSJustin T. Gibbs.Nm
46828fb27baSJustin T. Gibbslist.
46928fb27baSJustin T. Gibbs.Sh RETURN VALUES
47028fb27baSJustin T. Gibbs.Fn getnumdevs ,
47128fb27baSJustin T. Gibbs.Fn getgeneration ,
47228fb27baSJustin T. Gibbsand
47328fb27baSJustin T. Gibbs.Fn getversion
47428fb27baSJustin T. Gibbsreturn the indicated \fBsysctl\fR variable, or -1 if there is an error
47528fb27baSJustin T. Gibbsfetching the variable.
47628fb27baSJustin T. Gibbs.Pp
47728fb27baSJustin T. Gibbs.Fn checkversion
47828fb27baSJustin T. Gibbsreturns 0 if the kernel and userland
4793b8ecdbbSRuslan Ermilov.Nm
48028fb27baSJustin T. Gibbsversions match.  If they do not match, it returns -1.
48128fb27baSJustin T. Gibbs.Pp
48228fb27baSJustin T. Gibbs.Fn getdevs
48328fb27baSJustin T. Gibbsand
48428fb27baSJustin T. Gibbs.Fn selectdevs
48528fb27baSJustin T. Gibbsreturn -1 in case of an error, 0 if there is no error and 1 if the device
48628fb27baSJustin T. Gibbslist or selected devices have changed.  A return value of 1 from
48728fb27baSJustin T. Gibbs.Fn getdevs
48828fb27baSJustin T. Gibbsis usually a hint to re-run
48928fb27baSJustin T. Gibbs.Fn selectdevs
49028fb27baSJustin T. Gibbsbecause the device list has changed.
49128fb27baSJustin T. Gibbs.Pp
49228fb27baSJustin T. Gibbs.Fn buildmatch
49328fb27baSJustin T. Gibbsreturns -1 for error, and 0 if there is no error.
49428fb27baSJustin T. Gibbs.Pp
49528fb27baSJustin T. Gibbs.Fn compute_stats
49628fb27baSJustin T. Gibbsreturns -1 for error, and 0 for success.
49728fb27baSJustin T. Gibbs.Pp
49828fb27baSJustin T. Gibbs.Fn compute_etime
49928fb27baSJustin T. Gibbsreturns the computed elapsed time.
50028fb27baSJustin T. Gibbs.Pp
50128fb27baSJustin T. GibbsIf an error is returned from one of the
50228fb27baSJustin T. Gibbs.Nm
50328fb27baSJustin T. Gibbslibrary functions, the reason for the error is generally printed in
50428fb27baSJustin T. Gibbsthe global string
50528fb27baSJustin T. Gibbs.Va devstat_errbuf
50628fb27baSJustin T. Gibbswhich is
50728fb27baSJustin T. Gibbs.Dv DEVSTAT_ERRBUF_SIZE
50828fb27baSJustin T. Gibbscharacters long.
50928fb27baSJustin T. Gibbs.Sh SEE ALSO
51028fb27baSJustin T. Gibbs.Xr systat 1 ,
51128fb27baSJustin T. Gibbs.Xr iostat 8 ,
51228fb27baSJustin T. Gibbs.Xr rpc.rstatd 8 ,
51328fb27baSJustin T. Gibbs.Xr vmstat 8 ,
51428fb27baSJustin T. Gibbs.Xr devstat 9
51528fb27baSJustin T. Gibbs.Sh HISTORY
51628fb27baSJustin T. GibbsThe
51728fb27baSJustin T. Gibbs.Nm
51828fb27baSJustin T. Gibbsstatistics system first appeared in
51928fb27baSJustin T. Gibbs.Fx 3.0 .
52028fb27baSJustin T. Gibbs.Sh AUTHORS
521b27e4ff3SAlexey Zelkin.An Kenneth Merry Aq ken@FreeBSD.ORG
52228fb27baSJustin T. Gibbs.Sh BUGS
52328fb27baSJustin T. GibbsThere should probably be an interface to de-allocate memory allocated by
52428fb27baSJustin T. Gibbs.Fn getdevs ,
52528fb27baSJustin T. Gibbs.Fn selectdevs ,
52628fb27baSJustin T. Gibbsand
52728fb27baSJustin T. Gibbs.Fn buildmatch .
52828fb27baSJustin T. Gibbs.Pp
52928fb27baSJustin T. Gibbs.Fn selectdevs
53028fb27baSJustin T. Gibbsshould probably not select more than
53128fb27baSJustin T. Gibbs.Va maxshowdevs
53228fb27baSJustin T. Gibbsdevices in
53328fb27baSJustin T. Gibbs.Dq top
53428fb27baSJustin T. Gibbsmode when no devices have been selected previously.
53528fb27baSJustin T. Gibbs.Pp
53628fb27baSJustin T. GibbsThere should probably be functions to perform the statistics buffer
53728fb27baSJustin T. Gibbsswapping that goes on in most of the clients of this library.
53828fb27baSJustin T. Gibbs.Pp
53928fb27baSJustin T. GibbsThe
54028fb27baSJustin T. Gibbs.Va statinfo
54128fb27baSJustin T. Gibbsand
54228fb27baSJustin T. Gibbs.Va devinfo
54328fb27baSJustin T. Gibbsstructures should probably be cleaned up and thought out a little more.
544