]> granicus.if.org Git - zfs/commitdiff
Add -y option to `zpool iostat`
authorHajo Möller <dasjoe@gmail.com>
Sun, 24 May 2015 18:22:55 +0000 (20:22 +0200)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Wed, 17 Jun 2015 17:39:20 +0000 (10:39 -0700)
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 <dasjoe@gmail.com>
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Closes #3439

cmd/zpool/zpool_main.c
man/man8/zpool.8

index 5c28e8bb13f7d3f767208fe1ade3900d71424ed6..fd1e8284aa6c5dec86e905ef73b753d1f0c2f1cf 100644 (file)
@@ -236,8 +236,8 @@ get_usage(zpool_help_t idx) {
                    "[-R root] [-F [-n]]\n"
                    "\t    <pool | id> [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] <vdev>\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);
 
                        /*
index abd70c028f81da6ba81c5b3cfeaecdbb3f3f4d70..68a57a15e623552d295ddee59e63f82ad495d0c2 100644 (file)
@@ -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