I have created a patch which contains a preview of the statistics
code I intend to add to GEOM, and would invite people to play with
it and give me some feedback:
http://phk.freebsd.dk/patch/geom_iostat.patch
Here is a small shell-script to watch the output with:
http://phk.freebsd.dk/patch/geom_iostat.sh
Here's the story:
For each consumer and provider[0] in the GEOM mesh I collect three
metrics:
nop - Number of operations
nerr - Number of non-zero error returned.
dt - Accumulated request time.
These three are collected for the three I/O operations: Read, Write
and Delete[1].
(Currently the patch exports the values in ascii with a sysctl, this
will change to binary once the prototyping has finished)
If you run the shellscript above you will get auto-refreshing output
like this (Apologies for wide lines):
0xc412db00 "ad0s4c" R 4160 0 0.002670 W 232389 0 0.006616 D 4083
0 0.001208
0xc412dd00 "" R 4162 0 0.002641 W 232390 0 0.005835 D 4083
0 0.000098
0xc412c800 "ad0" R 4188 0 0.002628 W 232390 0 0.005661 D 4083
0 0.000010
0xc412d500 "" R 4150 0 0.002655 W 232389 0 0.006616 D 4083
0 0.001208
0xc414e000 "ad0s4" R 4167 0 0.002646 W 232390 0 0.005835 D 4083
0 0.000098
0xc414e100 "" R 4168 0 0.002612 W 232390 0 0.005661 D 4083
0 0.000010
The colums are:
Identifier - can be found in the "sysctl -b kern.geom.confxml" output)
Name - Only for providers and only while prototyping.
"R" - indicates read metrics follows.
nop - Number of read operations
nerr - Number of errored operations
dt - Average respons time.
(the, "W", nop, nerr, dt, "D", nop, nerr, dt)
Now, discussion time:
Collecting number of operations and number of errors is a nobrainer.
The timestamps cost something to make, and my plan was to only collect
them while a monitoring program is running. (Is this a good idea ?)
In difference from the devstat framework which measures how big a
percentage of the time a drive has one or more outstanding requests,
I think that measuring the responstime is a much more useful metric.
(comments, input, references welcome)
I pressume we also want to collect number of bytes transferred, and
I will add that in the next iteration.
Comments, ideas, suggestions.
Poul-Henning
[0] A consumer is the "filehandle" a geom method uses to initiate
I/O on. The BSD geom which splits ad0s1 int ad0s1[a-h] has a single
consumer which is attached to ad0s1's provider. Consumers are unnamed
and more than one consumer can be attached to a provider.
A provider is a service point on a method and it has a name. In
the above example, the BSD geom would have providers named ad0s1[a-h]
[1] Delete is used to indicate sectors no longer in use in order to
implement features like secure erase, pre-erase of flash devices etc.
--
Poul-Henning Kamp | UNIX since Zilog Zeus 3.20
[EMAIL PROTECTED] | TCP/IP since RFC 956
FreeBSD committer | BSD since 4.3-tahoe
Never attribute to malice what can adequately be explained by incompetence.
To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-current" in the body of the message