aboutsummaryrefslogtreecommitdiffstats
path: root/module/zfs
diff options
context:
space:
mode:
Diffstat (limited to 'module/zfs')
-rw-r--r--module/zfs/spa_stats.c18
-rw-r--r--module/zfs/txg.c3
2 files changed, 15 insertions, 6 deletions
diff --git a/module/zfs/spa_stats.c b/module/zfs/spa_stats.c
index c415395f9..2576d867f 100644
--- a/module/zfs/spa_stats.c
+++ b/module/zfs/spa_stats.c
@@ -258,9 +258,9 @@ static int
spa_txg_history_headers(char *buf, size_t size)
{
size = snprintf(buf, size - 1, "%-8s %-16s %-5s %-12s %-12s %-12s "
- "%-8s %-8s %-12s %-12s %-12s\n", "txg", "birth", "state",
+ "%-8s %-8s %-12s %-12s %-12s %-12s\n", "txg", "birth", "state",
"nreserved", "nread", "nwritten", "reads", "writes",
- "otime", "qtime", "stime");
+ "otime", "qtime", "wtime", "stime");
buf[size] = '\0';
return (0);
@@ -270,13 +270,14 @@ static int
spa_txg_history_data(char *buf, size_t size, void *data)
{
spa_txg_history_t *sth = (spa_txg_history_t *)data;
- uint64_t open = 0, quiesce = 0, sync = 0;
+ uint64_t open = 0, quiesce = 0, wait = 0, sync = 0;
char state;
switch (sth->state) {
case TXG_STATE_BIRTH: state = 'B'; break;
case TXG_STATE_OPEN: state = 'O'; break;
case TXG_STATE_QUIESCED: state = 'Q'; break;
+ case TXG_STATE_WAIT_FOR_SYNC: state = 'W'; break;
case TXG_STATE_SYNCED: state = 'S'; break;
case TXG_STATE_COMMITTED: state = 'C'; break;
default: state = '?'; break;
@@ -290,17 +291,22 @@ spa_txg_history_data(char *buf, size_t size, void *data)
quiesce = sth->times[TXG_STATE_QUIESCED] -
sth->times[TXG_STATE_OPEN];
+ if (sth->times[TXG_STATE_WAIT_FOR_SYNC])
+ wait = sth->times[TXG_STATE_WAIT_FOR_SYNC] -
+ sth->times[TXG_STATE_QUIESCED];
+
if (sth->times[TXG_STATE_SYNCED])
sync = sth->times[TXG_STATE_SYNCED] -
- sth->times[TXG_STATE_QUIESCED];
+ sth->times[TXG_STATE_WAIT_FOR_SYNC];
size = snprintf(buf, size - 1, "%-8llu %-16llu %-5c %-12llu "
- "%-12llu %-12llu %-8llu %-8llu %-12llu %-12llu %-12llu\n",
+ "%-12llu %-12llu %-8llu %-8llu %-12llu %-12llu %-12llu %-12llu\n",
(longlong_t)sth->txg, sth->times[TXG_STATE_BIRTH], state,
(u_longlong_t)sth->nreserved,
(u_longlong_t)sth->nread, (u_longlong_t)sth->nwritten,
(u_longlong_t)sth->reads, (u_longlong_t)sth->writes,
- (u_longlong_t)open, (u_longlong_t)quiesce, (u_longlong_t)sync);
+ (u_longlong_t)open, (u_longlong_t)quiesce, (u_longlong_t)wait,
+ (u_longlong_t)sync);
buf[size] = '\0';
return (0);
diff --git a/module/zfs/txg.c b/module/zfs/txg.c
index c779c4b9a..89615a21a 100644
--- a/module/zfs/txg.c
+++ b/module/zfs/txg.c
@@ -555,6 +555,9 @@ txg_sync_thread(dsl_pool_t *dp)
txg, tx->tx_quiesce_txg_waiting, tx->tx_sync_txg_waiting);
mutex_exit(&tx->tx_sync_lock);
+ spa_txg_history_set(spa, txg, TXG_STATE_WAIT_FOR_SYNC,
+ gethrtime());
+
start = ddi_get_lbolt();
spa_sync(spa, txg);
delta = ddi_get_lbolt() - start;