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