Change iostat -Ix to display total duration of transactions instead

of average duration, and total busy time instead of %.

This looks more useful when one runs `iostat -Ix` periodically to
collect statistics: e.g. now it is possible to calculate busy %
between two runs subtracting total busy times and dividing per time
period.

Average duration and % busy are still available via `iostat -x`.
This commit is contained in:
Mikolaj Golub 2012-12-15 18:21:09 +00:00
parent fdd6757e71
commit 3cfa2135c5
2 changed files with 42 additions and 13 deletions

View File

@ -56,7 +56,7 @@
.\" .\"
.\" @(#)iostat.8 8.1 (Berkeley) 6/6/93 .\" @(#)iostat.8 8.1 (Berkeley) 6/6/93
.\" .\"
.Dd November 24, 2010 .Dd December 15, 2012
.Dt IOSTAT 8 .Dt IOSTAT 8
.Os .Os
.Sh NAME .Sh NAME
@ -366,6 +366,32 @@ average duration of transactions, in milliseconds
% of time the device had one or more outstanding transactions % of time the device had one or more outstanding transactions
.El .El
.Pp .Pp
The extended
.Nm
device display, with the
.Fl x
and
.Fl I
flags specified, shows the following statistics:
.Pp
.Bl -tag -width indent -compact
.It r/i
read operations per time period
.It w/i
write operations per time period
.It kr/i
kilobytes read per time period
.It kw/i
kilobytes write per time period
.It qlen
transactions queue length
.It tsvc_t/i
total duration of transactions per time period, in seconds
.It sb/i
total time the device had one or more outstanding transactions per
time period, in seconds
.El
.Pp
The old-style The old-style
.Nm .Nm
display (using display (using

View File

@ -731,10 +731,10 @@ devstats(int perf_select, long double etime, int havelast)
u_int64_t total_bytes, total_transfers, total_blocks; u_int64_t total_bytes, total_transfers, total_blocks;
u_int64_t total_bytes_read, total_transfers_read; u_int64_t total_bytes_read, total_transfers_read;
u_int64_t total_bytes_write, total_transfers_write; u_int64_t total_bytes_write, total_transfers_write;
long double busy_pct; long double busy_pct, busy_time;
u_int64_t queue_len; u_int64_t queue_len;
long double total_mb; long double total_mb;
long double blocks_per_second, ms_per_transaction; long double blocks_per_second, ms_per_transaction, total_duration;
int firstline = 1; int firstline = 1;
char *devname; char *devname;
@ -745,14 +745,13 @@ devstats(int perf_select, long double etime, int havelast)
if (Cflag > 0) if (Cflag > 0)
printf(" cpu "); printf(" cpu ");
printf("\n"); printf("\n");
if (Iflag == 0) if (Iflag == 0) {
printf( printf("device r/s w/s kr/s kw/s qlen "
"device r/s w/s kr/s kw/s qlen svc_t %%b " "svc_t %%b ");
); } else {
else printf("device r/i w/i kr/i"
printf( " kw/i qlen tsvc_t/i sb/i ");
"device r/i w/i kr/i kw/i qlen svc_t %%b " }
);
if (Tflag > 0) if (Tflag > 0)
printf("tin tout "); printf("tin tout ");
if (Cflag > 0) if (Cflag > 0)
@ -789,6 +788,8 @@ devstats(int perf_select, long double etime, int havelast)
DSM_MS_PER_TRANSACTION, &ms_per_transaction, DSM_MS_PER_TRANSACTION, &ms_per_transaction,
DSM_BUSY_PCT, &busy_pct, DSM_BUSY_PCT, &busy_pct,
DSM_QUEUE_LENGTH, &queue_len, DSM_QUEUE_LENGTH, &queue_len,
DSM_TOTAL_DURATION, &total_duration,
DSM_TOTAL_BUSY_TIME, &busy_time,
DSM_NONE) != 0) DSM_NONE) != 0)
errx(1, "%s", devstat_errbuf); errx(1, "%s", devstat_errbuf);
@ -827,7 +828,9 @@ devstats(int perf_select, long double etime, int havelast)
queue_len, queue_len,
ms_per_transaction, busy_pct); ms_per_transaction, busy_pct);
else else
printf("%-8.8s %5.1Lf %5.1Lf %7.1Lf %7.1Lf %4" PRIu64 " %5.1Lf %3.0Lf ", printf("%-8.8s %11.1Lf %11.1Lf "
"%12.1Lf %12.1Lf %4" PRIu64
" %10.1Lf %9.1Lf ",
devname, devname,
(long double)total_transfers_read, (long double)total_transfers_read,
(long double)total_transfers_write, (long double)total_transfers_write,
@ -836,7 +839,7 @@ devstats(int perf_select, long double etime, int havelast)
(long double) (long double)
total_bytes_write / 1024, total_bytes_write / 1024,
queue_len, queue_len,
ms_per_transaction, busy_pct); total_duration, busy_time);
if (firstline) { if (firstline) {
/* /*
* If this is the first device * If this is the first device