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