MFC r289110:
Make geom_nop(4) collect statistics on all types of BIOs, not just reads and writes. PR: kern/198405 Submitted by: Matthew D. Fuller <fullermd at over-yonder dot net> Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D3679
This commit is contained in:
parent
ea425694b7
commit
2d6e438962
@ -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
|
||||
|
@ -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,
|
||||
|
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user