]> xenbits.xensource.com Git - people/julieng/freebsd.git/commitdiff
Make geom_nop(4) collect statistics on all types of BIOs, not just
authortrasz <trasz@FreeBSD.org>
Sat, 10 Oct 2015 09:03:31 +0000 (09:03 +0000)
committertrasz <trasz@FreeBSD.org>
Sat, 10 Oct 2015 09:03:31 +0000 (09:03 +0000)
reads and writes.

PR: kern/198405
Submitted by: Matthew D. Fuller <fullermd at over-yonder dot net>
MFC after: 1 month
Sponsored by: The FreeBSD Foundation
Differential Revision: https://reviews.freebsd.org/D3679

sbin/geom/class/nop/gnop.8
sys/geom/nop/g_nop.c
sys/geom/nop/g_nop.h

index c83c2f56ba1f1e0f068ee2a7d9a0845d85098da6..fc7732db15647103b977d6f3b0c2449676be6fce 100644 (file)
@@ -24,7 +24,7 @@
 .\"
 .\" $FreeBSD$
 .\"
-.Dd September 15, 2015
+.Dd October 10, 2015
 .Dt GNOP 8
 .Os
 .Sh NAME
@@ -72,9 +72,10 @@ The
 utility is used for setting up transparent providers on existing ones.
 Its main purpose is testing other GEOM classes, as it allows forced provider
 removal and I/O error simulation with a given probability.
-It also gathers the following statistics: number of read requests, number of
-write requests, number of bytes read and number of bytes written.
-In addition, it can be used as a good starting point for implementing new GEOM
+It also gathers statistics on the number of read, write, delete,
+getattr, flush, and other requests, and the number of bytes read and written.
+.Nm
+can also be used as a good starting point for implementing new GEOM
 classes.
 .Pp
 The first argument to
index 837f3f4e3394514af6717ae1dc32404100ee97c1..f36472dc6450e14b1c4217ac3e7395111004b2c1 100644 (file)
@@ -119,6 +119,24 @@ g_nop_start(struct bio *bp)
                sc->sc_wrotebytes += bp->bio_length;
                failprob = sc->sc_wfailprob;
                break;
+       case BIO_DELETE:
+               sc->sc_deletes++;
+               break;
+       case BIO_GETATTR:
+               sc->sc_getattrs++;
+               break;
+       case BIO_FLUSH:
+               sc->sc_flushes++;
+               break;
+       case BIO_CMD0:
+               sc->sc_cmd0s++;
+               break;
+       case BIO_CMD1:
+               sc->sc_cmd1s++;
+               break;
+       case BIO_CMD2:
+               sc->sc_cmd2s++;
+               break;
        }
        mtx_unlock(&sc->sc_lock);
        if (failprob > 0) {
@@ -238,6 +256,12 @@ g_nop_create(struct gctl_req *req, struct g_class *mp, struct g_provider *pp,
        sc->sc_wfailprob = wfailprob;
        sc->sc_reads = 0;
        sc->sc_writes = 0;
+       sc->sc_deletes = 0;
+       sc->sc_getattrs = 0;
+       sc->sc_flushes = 0;
+       sc->sc_cmd0s = 0;
+       sc->sc_cmd1s = 0;
+       sc->sc_cmd2s = 0;
        sc->sc_readbytes = 0;
        sc->sc_wrotebytes = 0;
        mtx_init(&sc->sc_lock, "gnop lock", NULL, MTX_DEF);
@@ -602,6 +626,12 @@ g_nop_ctl_reset(struct gctl_req *req, struct g_class *mp)
                sc = pp->geom->softc;
                sc->sc_reads = 0;
                sc->sc_writes = 0;
+               sc->sc_deletes = 0;
+               sc->sc_getattrs = 0;
+               sc->sc_flushes = 0;
+               sc->sc_cmd0s = 0;
+               sc->sc_cmd1s = 0;
+               sc->sc_cmd2s = 0;
                sc->sc_readbytes = 0;
                sc->sc_wrotebytes = 0;
        }
@@ -659,6 +689,12 @@ g_nop_dumpconf(struct sbuf *sb, const char *indent, struct g_geom *gp,
        sbuf_printf(sb, "%s<Error>%d</Error>\n", indent, sc->sc_error);
        sbuf_printf(sb, "%s<Reads>%ju</Reads>\n", indent, sc->sc_reads);
        sbuf_printf(sb, "%s<Writes>%ju</Writes>\n", indent, sc->sc_writes);
+       sbuf_printf(sb, "%s<Deletes>%ju</Deletes>\n", indent, sc->sc_deletes);
+       sbuf_printf(sb, "%s<Getattrs>%ju</Getattrs>\n", indent, sc->sc_getattrs);
+       sbuf_printf(sb, "%s<Flushes>%ju</Flushes>\n", indent, sc->sc_flushes);
+       sbuf_printf(sb, "%s<Cmd0s>%ju</Cmd0s>\n", indent, sc->sc_cmd0s);
+       sbuf_printf(sb, "%s<Cmd1s>%ju</Cmd1s>\n", indent, sc->sc_cmd1s);
+       sbuf_printf(sb, "%s<Cmd2s>%ju</Cmd2s>\n", indent, sc->sc_cmd2s);
        sbuf_printf(sb, "%s<ReadBytes>%ju</ReadBytes>\n", indent,
            sc->sc_readbytes);
        sbuf_printf(sb, "%s<WroteBytes>%ju</WroteBytes>\n", indent,
index b5e954ad6337dc63e2a915e94d261f6fdbdbe071..beba43e50ae5984f448400a0b2949381ff4d0e0c 100644 (file)
@@ -65,6 +65,12 @@ struct g_nop_softc {
        u_int           sc_wfailprob;
        uintmax_t       sc_reads;
        uintmax_t       sc_writes;
+       uintmax_t       sc_deletes;
+       uintmax_t       sc_getattrs;
+       uintmax_t       sc_flushes;
+       uintmax_t       sc_cmd0s;
+       uintmax_t       sc_cmd1s;
+       uintmax_t       sc_cmd2s;
        uintmax_t       sc_readbytes;
        uintmax_t       sc_wrotebytes;
        struct mtx      sc_lock;