Skip to content

Commit 68817d2

Browse files
authored
Include class name into struct metaslab_class
With increasing number of metaslab classes it can be helpful for debugging to know what we are looking at. Reviewed-by: Brian Behlendorf <[email protected]> Reviewed-by: Rob Norris <[email protected]> Signed-off-by: Alexander Motin <[email protected]> Sponsored by: iXsystems, Inc. Closes #17409
1 parent 1085623 commit 68817d2

File tree

5 files changed

+35
-17
lines changed

5 files changed

+35
-17
lines changed

include/sys/metaslab.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -102,8 +102,8 @@ void metaslab_trace_move(zio_alloc_list_t *, zio_alloc_list_t *);
102102
void metaslab_trace_init(zio_alloc_list_t *);
103103
void metaslab_trace_fini(zio_alloc_list_t *);
104104

105-
metaslab_class_t *metaslab_class_create(spa_t *, const metaslab_ops_t *,
106-
boolean_t);
105+
metaslab_class_t *metaslab_class_create(spa_t *, const char *,
106+
const metaslab_ops_t *, boolean_t);
107107
void metaslab_class_destroy(metaslab_class_t *);
108108
void metaslab_class_validate(metaslab_class_t *);
109109
void metaslab_class_balance(metaslab_class_t *mc, boolean_t onsync);
@@ -114,6 +114,7 @@ boolean_t metaslab_class_throttle_reserve(metaslab_class_t *, int, zio_t *,
114114
boolean_t, boolean_t *);
115115
boolean_t metaslab_class_throttle_unreserve(metaslab_class_t *, int, zio_t *);
116116
void metaslab_class_evict_old(metaslab_class_t *, uint64_t);
117+
const char *metaslab_class_get_name(metaslab_class_t *);
117118
uint64_t metaslab_class_get_alloc(metaslab_class_t *);
118119
uint64_t metaslab_class_get_space(metaslab_class_t *);
119120
uint64_t metaslab_class_get_dspace(metaslab_class_t *);

include/sys/metaslab_impl.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,8 @@ typedef struct metaslab_class_allocator {
181181
struct metaslab_class {
182182
kmutex_t mc_lock;
183183
spa_t *mc_spa;
184-
const metaslab_ops_t *mc_ops;
184+
const char *mc_name;
185+
const metaslab_ops_t *mc_ops;
185186

186187
/*
187188
* Track the number of metaslab groups that have been initialized

module/zfs/metaslab.c

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -412,14 +412,16 @@ metaslab_stat_fini(void)
412412
* ==========================================================================
413413
*/
414414
metaslab_class_t *
415-
metaslab_class_create(spa_t *spa, const metaslab_ops_t *ops, boolean_t is_log)
415+
metaslab_class_create(spa_t *spa, const char *name,
416+
const metaslab_ops_t *ops, boolean_t is_log)
416417
{
417418
metaslab_class_t *mc;
418419

419420
mc = kmem_zalloc(offsetof(metaslab_class_t,
420421
mc_allocator[spa->spa_alloc_count]), KM_SLEEP);
421422

422423
mc->mc_spa = spa;
424+
mc->mc_name = name;
423425
mc->mc_ops = ops;
424426
mc->mc_is_log = is_log;
425427
mc->mc_alloc_io_size = SPA_OLD_MAXBLOCKSIZE;
@@ -689,6 +691,12 @@ metaslab_class_space_update(metaslab_class_t *mc, int64_t alloc_delta,
689691
atomic_add_64(&mc->mc_dspace, dspace_delta);
690692
}
691693

694+
const char *
695+
metaslab_class_get_name(metaslab_class_t *mc)
696+
{
697+
return (mc->mc_name);
698+
}
699+
692700
uint64_t
693701
metaslab_class_get_alloc(metaslab_class_t *mc)
694702
{
@@ -2631,14 +2639,15 @@ metaslab_load_impl(metaslab_t *msp)
26312639
ASSERT3U(max_size, <=, msp->ms_max_size);
26322640
hrtime_t load_end = gethrtime();
26332641
msp->ms_load_time = load_end;
2634-
zfs_dbgmsg("metaslab_load: txg %llu, spa %s, vdev_id %llu, "
2642+
zfs_dbgmsg("metaslab_load: txg %llu, spa %s, class %s, vdev_id %llu, "
26352643
"ms_id %llu, smp_length %llu, "
26362644
"unflushed_allocs %llu, unflushed_frees %llu, "
26372645
"freed %llu, defer %llu + %llu, unloaded time %llu ms, "
26382646
"loading_time %lld ms, ms_max_size %llu, "
26392647
"max size error %lld, "
26402648
"old_weight %llx, new_weight %llx",
26412649
(u_longlong_t)spa_syncing_txg(spa), spa_name(spa),
2650+
msp->ms_group->mg_class->mc_name,
26422651
(u_longlong_t)msp->ms_group->mg_vd->vdev_id,
26432652
(u_longlong_t)msp->ms_id,
26442653
(u_longlong_t)space_map_length(msp->ms_sm),
@@ -2744,11 +2753,12 @@ metaslab_unload(metaslab_t *msp)
27442753
multilist_sublist_unlock(mls);
27452754

27462755
spa_t *spa = msp->ms_group->mg_vd->vdev_spa;
2747-
zfs_dbgmsg("metaslab_unload: txg %llu, spa %s, vdev_id %llu, "
2748-
"ms_id %llu, weight %llx, "
2756+
zfs_dbgmsg("metaslab_unload: txg %llu, spa %s, class %s, "
2757+
"vdev_id %llu, ms_id %llu, weight %llx, "
27492758
"selected txg %llu (%llu s ago), alloc_txg %llu, "
27502759
"loaded %llu ms ago, max_size %llu",
27512760
(u_longlong_t)spa_syncing_txg(spa), spa_name(spa),
2761+
msp->ms_group->mg_class->mc_name,
27522762
(u_longlong_t)msp->ms_group->mg_vd->vdev_id,
27532763
(u_longlong_t)msp->ms_id,
27542764
(u_longlong_t)msp->ms_weight,

module/zfs/spa.c

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1687,11 +1687,15 @@ spa_activate(spa_t *spa, spa_mode_t mode)
16871687
spa->spa_mode = mode;
16881688
spa->spa_read_spacemaps = spa_mode_readable_spacemaps;
16891689

1690-
spa->spa_normal_class = metaslab_class_create(spa, msp, B_FALSE);
1691-
spa->spa_log_class = metaslab_class_create(spa, msp, B_TRUE);
1692-
spa->spa_embedded_log_class = metaslab_class_create(spa, msp, B_TRUE);
1693-
spa->spa_special_class = metaslab_class_create(spa, msp, B_FALSE);
1694-
spa->spa_dedup_class = metaslab_class_create(spa, msp, B_FALSE);
1690+
spa->spa_normal_class = metaslab_class_create(spa, "normal",
1691+
msp, B_FALSE);
1692+
spa->spa_log_class = metaslab_class_create(spa, "log", msp, B_TRUE);
1693+
spa->spa_embedded_log_class = metaslab_class_create(spa,
1694+
"embedded_log", msp, B_TRUE);
1695+
spa->spa_special_class = metaslab_class_create(spa, "special",
1696+
msp, B_FALSE);
1697+
spa->spa_dedup_class = metaslab_class_create(spa, "dedup",
1698+
msp, B_FALSE);
16951699

16961700
/* Try to create a covering process */
16971701
mutex_enter(&spa->spa_proc_lock);

module/zfs/zio.c

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4221,7 +4221,7 @@ zio_dva_allocate(zio_t *zio)
42214221
zfs_dbgmsg("%s[%llu]: %s class spilling, req size %llu, "
42224222
"%llu allocated of %llu",
42234223
spa_name(spa), (u_longlong_t)zio->io_txg,
4224-
mc == spa_dedup_class(spa) ? "dedup" : "special",
4224+
metaslab_class_get_name(mc),
42254225
(u_longlong_t)zio->io_size,
42264226
(u_longlong_t)metaslab_class_get_alloc(mc),
42274227
(u_longlong_t)metaslab_class_get_space(mc));
@@ -4245,10 +4245,12 @@ zio_dva_allocate(zio_t *zio)
42454245
}
42464246

42474247
if (zfs_flags & ZFS_DEBUG_METASLAB_ALLOC) {
4248-
zfs_dbgmsg("%s: metaslab allocation failure, "
4249-
"trying fallback: zio %px, size %llu, error %d",
4250-
spa_name(spa), zio, (u_longlong_t)zio->io_size,
4251-
error);
4248+
zfs_dbgmsg("%s: metaslab allocation failure in %s "
4249+
"class, trying fallback to %s class: zio %px, "
4250+
"size %llu, error %d", spa_name(spa),
4251+
metaslab_class_get_name(mc),
4252+
metaslab_class_get_name(newmc),
4253+
zio, (u_longlong_t)zio->io_size, error);
42524254
}
42534255
zio->io_metaslab_class = mc = newmc;
42544256
ZIOSTAT_BUMP(ziostat_alloc_class_fallbacks);

0 commit comments

Comments
 (0)