Skip to content

Commit 7b9e904

Browse files
committed
REVIEW ONLY: zio: add counters for total zio and bp allocations
Just a rough eyeball comparison to get a feel for what we're saving.
1 parent b7b44a6 commit 7b9e904

File tree

1 file changed

+19
-0
lines changed

1 file changed

+19
-0
lines changed

module/zfs/zio.c

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,20 +152,26 @@ typedef struct zio_stats {
152152
kstat_named_t ziostat_alloc_class_fallbacks;
153153
kstat_named_t ziostat_gang_writes;
154154
kstat_named_t ziostat_gang_multilevel;
155+
kstat_named_t ziostat_zio_total;
156+
kstat_named_t ziostat_zio_bp_total;
155157
} zio_stats_t;
156158

157159
static zio_stats_t zio_stats = {
158160
{ "total_allocations", KSTAT_DATA_UINT64 },
159161
{ "alloc_class_fallbacks", KSTAT_DATA_UINT64 },
160162
{ "gang_writes", KSTAT_DATA_UINT64 },
161163
{ "gang_multilevel", KSTAT_DATA_UINT64 },
164+
{ "zio_total", KSTAT_DATA_UINT64 },
165+
{ "zio_bp_total", KSTAT_DATA_UINT64 },
162166
};
163167

164168
struct {
165169
wmsum_t ziostat_total_allocations;
166170
wmsum_t ziostat_alloc_class_fallbacks;
167171
wmsum_t ziostat_gang_writes;
168172
wmsum_t ziostat_gang_multilevel;
173+
wmsum_t ziostat_zio_total;
174+
wmsum_t ziostat_zio_bp_total;
169175
} ziostat_sums;
170176

171177
#define ZIOSTAT_BUMP(stat) wmsum_add(&ziostat_sums.stat, 1);
@@ -191,6 +197,10 @@ zio_kstats_update(kstat_t *ksp, int rw)
191197
wmsum_value(&ziostat_sums.ziostat_gang_writes);
192198
zs->ziostat_gang_multilevel.value.ui64 =
193199
wmsum_value(&ziostat_sums.ziostat_gang_multilevel);
200+
zs->ziostat_zio_total.value.ui64 =
201+
wmsum_value(&ziostat_sums.ziostat_zio_total);
202+
zs->ziostat_zio_bp_total.value.ui64 =
203+
wmsum_value(&ziostat_sums.ziostat_zio_bp_total);
194204
return (0);
195205
}
196206

@@ -210,6 +220,8 @@ zio_init(void)
210220
wmsum_init(&ziostat_sums.ziostat_alloc_class_fallbacks, 0);
211221
wmsum_init(&ziostat_sums.ziostat_gang_writes, 0);
212222
wmsum_init(&ziostat_sums.ziostat_gang_multilevel, 0);
223+
wmsum_init(&ziostat_sums.ziostat_zio_total, 0);
224+
wmsum_init(&ziostat_sums.ziostat_zio_bp_total, 0);
213225
zio_ksp = kstat_create("zfs", 0, "zio_stats",
214226
"misc", KSTAT_TYPE_NAMED, sizeof (zio_stats) /
215227
sizeof (kstat_named_t), KSTAT_FLAG_VIRTUAL);
@@ -355,6 +367,8 @@ zio_fini(void)
355367
wmsum_fini(&ziostat_sums.ziostat_alloc_class_fallbacks);
356368
wmsum_fini(&ziostat_sums.ziostat_gang_writes);
357369
wmsum_fini(&ziostat_sums.ziostat_gang_multilevel);
370+
wmsum_fini(&ziostat_sums.ziostat_zio_total);
371+
wmsum_fini(&ziostat_sums.ziostat_zio_bp_total);
358372

359373
kmem_cache_destroy(zio_bp_cache);
360374
kmem_cache_destroy(zio_link_cache);
@@ -977,6 +991,7 @@ zio_create(zio_t *pio, spa_t *spa, uint64_t txg, const blkptr_t *bp,
977991
IMPLY(lsize != psize, (flags & ZIO_FLAG_RAW_COMPRESS) != 0);
978992

979993
zio = kmem_cache_alloc(zio_cache, KM_SLEEP);
994+
ZIOSTAT_BUMP(ziostat_zio_total);
980995
memset(zio, 0, sizeof (zio_t));
981996

982997
mutex_init(&zio->io_lock, NULL, MUTEX_NOLOCKDEP, NULL);
@@ -1002,12 +1017,14 @@ zio_create(zio_t *pio, spa_t *spa, uint64_t txg, const blkptr_t *bp,
10021017
zio->io_child_type == ZIO_CHILD_DDT) {
10031018
/* so caller can free */
10041019
zio->io_bp = zio->io_bp_copy = zio_dup_bp(bp);
1020+
ZIOSTAT_BUMP(ziostat_zio_bp_total);
10051021
} else {
10061022
zio->io_bp = (blkptr_t *)bp;
10071023
}
10081024
if (type == ZIO_TYPE_WRITE &&
10091025
zio->io_child_type != ZIO_CHILD_VDEV) {
10101026
zio->io_bp_orig = zio_dup_bp(bp);
1027+
ZIOSTAT_BUMP(ziostat_zio_bp_total);
10111028
}
10121029
if (zio->io_child_type == ZIO_CHILD_LOGICAL)
10131030
zio->io_logical = zio;
@@ -1087,6 +1104,7 @@ zio_force_bp(zio_t *zio, const blkptr_t *bp)
10871104
ASSERT3U(zio->io_stage, ==, ZIO_STAGE_DONE);
10881105
ASSERT0P(zio->io_bp_copy);
10891106
zio->io_bp = zio->io_bp_copy = zio_dup_bp(bp);
1107+
ZIOSTAT_BUMP(ziostat_zio_bp_total);
10901108
}
10911109

10921110
/*
@@ -5354,6 +5372,7 @@ zio_ready(zio_t *zio)
53545372
if (bp != NULL && bp != zio->io_bp_copy) {
53555373
if (zio->io_bp_copy == NULL)
53565374
zio->io_bp_copy = zio_dup_bp(bp);
5375+
/* Not bumping ziostat_zio_bp_total for debug. */
53575376
else
53585377
*zio->io_bp_copy = *bp;
53595378
}

0 commit comments

Comments
 (0)