mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2025-06-25 10:38:00 +03:00
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 <behlendorf1@llnl.gov> Reviewed-by: Rob Norris <rob.norris@klarasystems.com> Signed-off-by: Alexander Motin <mav@FreeBSD.org> Sponsored by: iXsystems, Inc. Closes #17409
This commit is contained in:
parent
108562344c
commit
68817d28c5
@ -102,8 +102,8 @@ void metaslab_trace_move(zio_alloc_list_t *, zio_alloc_list_t *);
|
|||||||
void metaslab_trace_init(zio_alloc_list_t *);
|
void metaslab_trace_init(zio_alloc_list_t *);
|
||||||
void metaslab_trace_fini(zio_alloc_list_t *);
|
void metaslab_trace_fini(zio_alloc_list_t *);
|
||||||
|
|
||||||
metaslab_class_t *metaslab_class_create(spa_t *, const metaslab_ops_t *,
|
metaslab_class_t *metaslab_class_create(spa_t *, const char *,
|
||||||
boolean_t);
|
const metaslab_ops_t *, boolean_t);
|
||||||
void metaslab_class_destroy(metaslab_class_t *);
|
void metaslab_class_destroy(metaslab_class_t *);
|
||||||
void metaslab_class_validate(metaslab_class_t *);
|
void metaslab_class_validate(metaslab_class_t *);
|
||||||
void metaslab_class_balance(metaslab_class_t *mc, boolean_t onsync);
|
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 *,
|
|||||||
boolean_t, boolean_t *);
|
boolean_t, boolean_t *);
|
||||||
boolean_t metaslab_class_throttle_unreserve(metaslab_class_t *, int, zio_t *);
|
boolean_t metaslab_class_throttle_unreserve(metaslab_class_t *, int, zio_t *);
|
||||||
void metaslab_class_evict_old(metaslab_class_t *, uint64_t);
|
void metaslab_class_evict_old(metaslab_class_t *, uint64_t);
|
||||||
|
const char *metaslab_class_get_name(metaslab_class_t *);
|
||||||
uint64_t metaslab_class_get_alloc(metaslab_class_t *);
|
uint64_t metaslab_class_get_alloc(metaslab_class_t *);
|
||||||
uint64_t metaslab_class_get_space(metaslab_class_t *);
|
uint64_t metaslab_class_get_space(metaslab_class_t *);
|
||||||
uint64_t metaslab_class_get_dspace(metaslab_class_t *);
|
uint64_t metaslab_class_get_dspace(metaslab_class_t *);
|
||||||
|
@ -181,6 +181,7 @@ typedef struct metaslab_class_allocator {
|
|||||||
struct metaslab_class {
|
struct metaslab_class {
|
||||||
kmutex_t mc_lock;
|
kmutex_t mc_lock;
|
||||||
spa_t *mc_spa;
|
spa_t *mc_spa;
|
||||||
|
const char *mc_name;
|
||||||
const metaslab_ops_t *mc_ops;
|
const metaslab_ops_t *mc_ops;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -412,7 +412,8 @@ metaslab_stat_fini(void)
|
|||||||
* ==========================================================================
|
* ==========================================================================
|
||||||
*/
|
*/
|
||||||
metaslab_class_t *
|
metaslab_class_t *
|
||||||
metaslab_class_create(spa_t *spa, const metaslab_ops_t *ops, boolean_t is_log)
|
metaslab_class_create(spa_t *spa, const char *name,
|
||||||
|
const metaslab_ops_t *ops, boolean_t is_log)
|
||||||
{
|
{
|
||||||
metaslab_class_t *mc;
|
metaslab_class_t *mc;
|
||||||
|
|
||||||
@ -420,6 +421,7 @@ metaslab_class_create(spa_t *spa, const metaslab_ops_t *ops, boolean_t is_log)
|
|||||||
mc_allocator[spa->spa_alloc_count]), KM_SLEEP);
|
mc_allocator[spa->spa_alloc_count]), KM_SLEEP);
|
||||||
|
|
||||||
mc->mc_spa = spa;
|
mc->mc_spa = spa;
|
||||||
|
mc->mc_name = name;
|
||||||
mc->mc_ops = ops;
|
mc->mc_ops = ops;
|
||||||
mc->mc_is_log = is_log;
|
mc->mc_is_log = is_log;
|
||||||
mc->mc_alloc_io_size = SPA_OLD_MAXBLOCKSIZE;
|
mc->mc_alloc_io_size = SPA_OLD_MAXBLOCKSIZE;
|
||||||
@ -689,6 +691,12 @@ metaslab_class_space_update(metaslab_class_t *mc, int64_t alloc_delta,
|
|||||||
atomic_add_64(&mc->mc_dspace, dspace_delta);
|
atomic_add_64(&mc->mc_dspace, dspace_delta);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const char *
|
||||||
|
metaslab_class_get_name(metaslab_class_t *mc)
|
||||||
|
{
|
||||||
|
return (mc->mc_name);
|
||||||
|
}
|
||||||
|
|
||||||
uint64_t
|
uint64_t
|
||||||
metaslab_class_get_alloc(metaslab_class_t *mc)
|
metaslab_class_get_alloc(metaslab_class_t *mc)
|
||||||
{
|
{
|
||||||
@ -2631,7 +2639,7 @@ metaslab_load_impl(metaslab_t *msp)
|
|||||||
ASSERT3U(max_size, <=, msp->ms_max_size);
|
ASSERT3U(max_size, <=, msp->ms_max_size);
|
||||||
hrtime_t load_end = gethrtime();
|
hrtime_t load_end = gethrtime();
|
||||||
msp->ms_load_time = load_end;
|
msp->ms_load_time = load_end;
|
||||||
zfs_dbgmsg("metaslab_load: txg %llu, spa %s, vdev_id %llu, "
|
zfs_dbgmsg("metaslab_load: txg %llu, spa %s, class %s, vdev_id %llu, "
|
||||||
"ms_id %llu, smp_length %llu, "
|
"ms_id %llu, smp_length %llu, "
|
||||||
"unflushed_allocs %llu, unflushed_frees %llu, "
|
"unflushed_allocs %llu, unflushed_frees %llu, "
|
||||||
"freed %llu, defer %llu + %llu, unloaded time %llu ms, "
|
"freed %llu, defer %llu + %llu, unloaded time %llu ms, "
|
||||||
@ -2639,6 +2647,7 @@ metaslab_load_impl(metaslab_t *msp)
|
|||||||
"max size error %lld, "
|
"max size error %lld, "
|
||||||
"old_weight %llx, new_weight %llx",
|
"old_weight %llx, new_weight %llx",
|
||||||
(u_longlong_t)spa_syncing_txg(spa), spa_name(spa),
|
(u_longlong_t)spa_syncing_txg(spa), spa_name(spa),
|
||||||
|
msp->ms_group->mg_class->mc_name,
|
||||||
(u_longlong_t)msp->ms_group->mg_vd->vdev_id,
|
(u_longlong_t)msp->ms_group->mg_vd->vdev_id,
|
||||||
(u_longlong_t)msp->ms_id,
|
(u_longlong_t)msp->ms_id,
|
||||||
(u_longlong_t)space_map_length(msp->ms_sm),
|
(u_longlong_t)space_map_length(msp->ms_sm),
|
||||||
@ -2744,11 +2753,12 @@ metaslab_unload(metaslab_t *msp)
|
|||||||
multilist_sublist_unlock(mls);
|
multilist_sublist_unlock(mls);
|
||||||
|
|
||||||
spa_t *spa = msp->ms_group->mg_vd->vdev_spa;
|
spa_t *spa = msp->ms_group->mg_vd->vdev_spa;
|
||||||
zfs_dbgmsg("metaslab_unload: txg %llu, spa %s, vdev_id %llu, "
|
zfs_dbgmsg("metaslab_unload: txg %llu, spa %s, class %s, "
|
||||||
"ms_id %llu, weight %llx, "
|
"vdev_id %llu, ms_id %llu, weight %llx, "
|
||||||
"selected txg %llu (%llu s ago), alloc_txg %llu, "
|
"selected txg %llu (%llu s ago), alloc_txg %llu, "
|
||||||
"loaded %llu ms ago, max_size %llu",
|
"loaded %llu ms ago, max_size %llu",
|
||||||
(u_longlong_t)spa_syncing_txg(spa), spa_name(spa),
|
(u_longlong_t)spa_syncing_txg(spa), spa_name(spa),
|
||||||
|
msp->ms_group->mg_class->mc_name,
|
||||||
(u_longlong_t)msp->ms_group->mg_vd->vdev_id,
|
(u_longlong_t)msp->ms_group->mg_vd->vdev_id,
|
||||||
(u_longlong_t)msp->ms_id,
|
(u_longlong_t)msp->ms_id,
|
||||||
(u_longlong_t)msp->ms_weight,
|
(u_longlong_t)msp->ms_weight,
|
||||||
|
@ -1687,11 +1687,15 @@ spa_activate(spa_t *spa, spa_mode_t mode)
|
|||||||
spa->spa_mode = mode;
|
spa->spa_mode = mode;
|
||||||
spa->spa_read_spacemaps = spa_mode_readable_spacemaps;
|
spa->spa_read_spacemaps = spa_mode_readable_spacemaps;
|
||||||
|
|
||||||
spa->spa_normal_class = metaslab_class_create(spa, msp, B_FALSE);
|
spa->spa_normal_class = metaslab_class_create(spa, "normal",
|
||||||
spa->spa_log_class = metaslab_class_create(spa, msp, B_TRUE);
|
msp, B_FALSE);
|
||||||
spa->spa_embedded_log_class = metaslab_class_create(spa, msp, B_TRUE);
|
spa->spa_log_class = metaslab_class_create(spa, "log", msp, B_TRUE);
|
||||||
spa->spa_special_class = metaslab_class_create(spa, msp, B_FALSE);
|
spa->spa_embedded_log_class = metaslab_class_create(spa,
|
||||||
spa->spa_dedup_class = metaslab_class_create(spa, msp, B_FALSE);
|
"embedded_log", msp, B_TRUE);
|
||||||
|
spa->spa_special_class = metaslab_class_create(spa, "special",
|
||||||
|
msp, B_FALSE);
|
||||||
|
spa->spa_dedup_class = metaslab_class_create(spa, "dedup",
|
||||||
|
msp, B_FALSE);
|
||||||
|
|
||||||
/* Try to create a covering process */
|
/* Try to create a covering process */
|
||||||
mutex_enter(&spa->spa_proc_lock);
|
mutex_enter(&spa->spa_proc_lock);
|
||||||
|
@ -4221,7 +4221,7 @@ again:
|
|||||||
zfs_dbgmsg("%s[%llu]: %s class spilling, req size %llu, "
|
zfs_dbgmsg("%s[%llu]: %s class spilling, req size %llu, "
|
||||||
"%llu allocated of %llu",
|
"%llu allocated of %llu",
|
||||||
spa_name(spa), (u_longlong_t)zio->io_txg,
|
spa_name(spa), (u_longlong_t)zio->io_txg,
|
||||||
mc == spa_dedup_class(spa) ? "dedup" : "special",
|
metaslab_class_get_name(mc),
|
||||||
(u_longlong_t)zio->io_size,
|
(u_longlong_t)zio->io_size,
|
||||||
(u_longlong_t)metaslab_class_get_alloc(mc),
|
(u_longlong_t)metaslab_class_get_alloc(mc),
|
||||||
(u_longlong_t)metaslab_class_get_space(mc));
|
(u_longlong_t)metaslab_class_get_space(mc));
|
||||||
@ -4245,10 +4245,12 @@ again:
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (zfs_flags & ZFS_DEBUG_METASLAB_ALLOC) {
|
if (zfs_flags & ZFS_DEBUG_METASLAB_ALLOC) {
|
||||||
zfs_dbgmsg("%s: metaslab allocation failure, "
|
zfs_dbgmsg("%s: metaslab allocation failure in %s "
|
||||||
"trying fallback: zio %px, size %llu, error %d",
|
"class, trying fallback to %s class: zio %px, "
|
||||||
spa_name(spa), zio, (u_longlong_t)zio->io_size,
|
"size %llu, error %d", spa_name(spa),
|
||||||
error);
|
metaslab_class_get_name(mc),
|
||||||
|
metaslab_class_get_name(newmc),
|
||||||
|
zio, (u_longlong_t)zio->io_size, error);
|
||||||
}
|
}
|
||||||
zio->io_metaslab_class = mc = newmc;
|
zio->io_metaslab_class = mc = newmc;
|
||||||
ZIOSTAT_BUMP(ziostat_alloc_class_fallbacks);
|
ZIOSTAT_BUMP(ziostat_alloc_class_fallbacks);
|
||||||
|
Loading…
Reference in New Issue
Block a user