From 410921241d00d9e6e48d6e544ab5fbf2f642a72d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hajo=20M=C3=B6ller?= Date: Sun, 24 May 2015 20:22:55 +0200 Subject: [PATCH] Add -y option to `zpool iostat` MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit sysstat's iostat omits the first report when the -y option is used. This patch adds that functionality and omits the first report with statistics since system boot. Signed-off-by: Hajo Möller Signed-off-by: Brian Behlendorf Closes #3439 --- cmd/zpool/zpool_main.c | 31 +++++++++++++++++++++++-------- man/man8/zpool.8 | 15 +++++++++++++-- 2 files changed, 36 insertions(+), 10 deletions(-) diff --git a/cmd/zpool/zpool_main.c b/cmd/zpool/zpool_main.c index 5c28e8bb13..fd1e8284aa 100644 --- a/cmd/zpool/zpool_main.c +++ b/cmd/zpool/zpool_main.c @@ -236,8 +236,8 @@ get_usage(zpool_help_t idx) { "[-R root] [-F [-n]]\n" "\t [newpool]\n")); case HELP_IOSTAT: - return (gettext("\tiostat [-v] [-T d|u] [pool] ... [interval " - "[count]]\n")); + return (gettext("\tiostat [-v] [-T d|u] [-y] [pool] ... " + "[interval [count]]\n")); case HELP_LABELCLEAR: return (gettext("\tlabelclear [-f] \n")); case HELP_LIST: @@ -2817,10 +2817,11 @@ zpool_do_iostat(int argc, char **argv) unsigned long interval = 0, count = 0; zpool_list_t *list; boolean_t verbose = B_FALSE; + boolean_t omit_since_boot = B_FALSE; iostat_cbdata_t cb; /* check options */ - while ((c = getopt(argc, argv, "T:v")) != -1) { + while ((c = getopt(argc, argv, "T:vy")) != -1) { switch (c) { case 'T': get_timestamp_arg(*optarg); @@ -2828,6 +2829,9 @@ zpool_do_iostat(int argc, char **argv) case 'v': verbose = B_TRUE; break; + case 'y': + omit_since_boot = B_TRUE; + break; case '?': (void) fprintf(stderr, gettext("invalid option '%c'\n"), optopt); @@ -2867,11 +2871,16 @@ zpool_do_iostat(int argc, char **argv) cb.cb_namewidth = 0; for (;;) { - pool_list_update(list); - if ((npools = pool_list_count(list)) == 0) (void) fprintf(stderr, gettext("no pools available\n")); else { + /* + * If this is the first iteration and -y was supplied + * we skip any printing. + */ + boolean_t skip = (omit_since_boot && + cb.cb_iteration == 0); + /* * Refresh all statistics. This is done as an * explicit step before calculating the maximum name @@ -2893,12 +2902,18 @@ zpool_do_iostat(int argc, char **argv) print_timestamp(timestamp_fmt); /* - * If it's the first time, or verbose mode, print the - * header. + * If it's the first time and we're not skipping it, + * or either skip or verbose mode, print the header. */ - if (++cb.cb_iteration == 1 || verbose) + if ((++cb.cb_iteration == 1 && !skip) || + (skip != verbose)) print_iostat_header(&cb); + if (skip) { + (void) sleep(interval); + continue; + } + (void) pool_list_iter(list, B_FALSE, print_iostat, &cb); /* diff --git a/man/man8/zpool.8 b/man/man8/zpool.8 index abd70c028f..68a57a15e6 100644 --- a/man/man8/zpool.8 +++ b/man/man8/zpool.8 @@ -94,7 +94,7 @@ zpool \- configures ZFS storage pools .LP .nf -\fBzpool iostat\fR [\fB-T\fR d | u ] [\fB-v\fR] [\fIpool\fR] ... [\fIinterval\fR[\fIcount\fR]] +\fBzpool iostat\fR [\fB-T\fR d | u ] [\fB-v\fR] [\fB-y\fR] [\fIpool\fR] ... [\fIinterval\fR[\fIcount\fR]] .fi .LP @@ -1608,7 +1608,7 @@ Allows a pool to import when there is a missing log device. .ne 2 .mk .na -\fB\fBzpool iostat\fR [\fB-T\fR \fBd\fR | \fBu\fR] [\fB-v\fR] [\fIpool\fR] ... [\fIinterval\fR[\fIcount\fR]]\fR +\fB\fBzpool iostat\fR [\fB-T\fR \fBd\fR | \fBu\fR] [\fB-v\fR] [\fB-y\fR] [\fIpool\fR] ... [\fIinterval\fR[\fIcount\fR]]\fR .ad .sp .6 .RS 4n @@ -1637,6 +1637,17 @@ Specify \fBu\fR for a printed representation of the internal representation of t Verbose statistics. Reports usage statistics for individual \fIvdevs\fR within the pool, in addition to the pool-wide statistics. .RE +.sp +.ne 2 +.mk +.na +\fB\fB-y\fR\fR +.ad +.RS 12n +.rt +Omit statistics since boot. Normally the first line of output reports the statistics since boot. This option suppresses that first line of output. +.RE + .RE .sp