Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 18 Sep 2012 14:15:20 +0300
From:      Mikolaj Golub <trociny@FreeBSD.org>
To:        freebsd-hackers@freebsd.org
Subject:   Changing `iostat -Ix' output
Message-ID:  <20120918111519.GB66984@gmail.com>

next in thread | raw e-mail | index | archive | help
Hi,

I don't like very much what `iostat -Ix' outputs and would like to
change this.

A typical output:

% iostat -Ix        
                        extended device statistics  
device     r/i   w/i    kr/i    kw/i qlen svc_t  %b  
ada0     5599136.0 3953193.0 39982760.0 86819866.5    0  15.1  16 
cd0      552.0   0.0     4.3     0.0    0   0.0   0 
pass0    333.0   0.0   166.5     0.0    0   0.0   0 
pass1      2.0   0.0     1.0     0.0    0   0.0   0 

Parameters like r/i, kr/i (total io operations/kbytes) are very
useful. They allow to use `iostat -Ix' to collect IO statistics
running it periodically (from cron or some monitoring tool) and
calculate average amount of operations or bytes per second at the
specified period subtracting the current value from the previous one
and dividing by time period.

But you can't do the same with % busy, which is very useful IO
characteristics. Average % busy at the specified period could be
calculated storing total busy time for the device at time t1, total
busy time at t2 and then subtracting the last value from the first (to
get busy time at this period) and dividing by the time period.

Currently iostat(8) does not provide 'total busy time' statistics. I
use sysutils/devstat for this but it would be nice if iostat(8) itself
provide such functionality.

I propose for `iostat -Ix` to output total busy time instead of %
busy, and also total duration of transactions instead of average
duration (to be able to calculate average duration for the period
between two iostat runs).

http://people.freebsd.org/~trociny/iostat.total_busy_time.1.patch

Average duration and % busy are still available via `iostat -x`.

Here is an output example

% ./iostat -Ix; sleep 60; ./iostat -Ix
                        extended device statistics  
device           r/i         w/i         kr/i         kw/i qlen       tdur        sb  
ada0       5599785.0   3961913.0   39985960.5   86902385.5    0   144055.5   35966.5 
cd0            554.0         0.0          4.3          0.0    0        0.0       9.5 
pass0          336.0         0.0        168.0          0.0    0        0.0      17.5 
pass1            2.0         0.0          1.0          0.0    0        0.0       0.0 
                        extended device statistics  
device           r/i         w/i         kr/i         kw/i qlen       tdur        sb  
ada0       5599922.0   3963177.0   40002608.0   86958230.5    0   144074.4   35970.5 
cd0            554.0         0.0          4.3          0.0    0        0.0       9.5 
pass0          336.0         0.0        168.0          0.0    0        0.0      17.5 
pass1            2.0         0.0          1.0          0.0    0        0.0       0.0 

So, for ada0, % busy for that period was 100 * (35970.5 - 35966.5) / 60 = 6.

And service time (assuming that only read and write operations were
serviced) was

1000 * (144074.4 - 144055.5) / (5599922 - 5599785 + 3963177 - 3961913)
= 13.4 msec.

What do you think about this?

-- 
Mikolaj Golub



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20120918111519.GB66984>