@@ -368,6 +368,22 @@ static metaslab_stats_t metaslab_stats = {
368
368
#define METASLABSTAT_BUMP (stat ) \
369
369
atomic_inc_64(&metaslab_stats.stat.value.ui64);
370
370
371
+ static inline char *
372
+ metaslab_range_tree_instance (metaslab_group_t * mg , metaslab_t * ms ,
373
+ char * rt_name )
374
+ {
375
+ const size_t len = 4 * ZFS_MAX_DATASET_NAME_LEN ;
376
+ char * buf = kmem_zalloc (len , KM_SLEEP );
377
+
378
+ snprintf (buf , len , "{spa=%s vdev_guid=%llu ms_id=%llu %s}" ,
379
+ mg -> mg_vd -> vdev_spa -> spa_name ,
380
+ mg -> mg_vd -> vdev_guid ,
381
+ ms -> ms_id ,
382
+ rt_name );
383
+
384
+ return (buf );
385
+ }
386
+
371
387
372
388
static kstat_t * metaslab_ksp ;
373
389
@@ -2753,30 +2769,42 @@ metaslab_init(metaslab_group_t *mg, uint64_t id, uint64_t object,
2753
2769
zfs_range_seg_type_t type =
2754
2770
metaslab_calculate_range_tree_type (vd , ms , & start , & shift );
2755
2771
2756
- ms -> ms_allocatable = zfs_range_tree_create (NULL , type , NULL , start ,
2757
- shift );
2772
+ ms -> ms_allocatable = zfs_range_tree_create_usecase (NULL , type , NULL ,
2773
+ start , shift , ZFS_RANGE_TREE_UC_FREE_SPACE ,
2774
+ metaslab_range_tree_instance (mg , ms , "ms_allocatable" ));
2758
2775
for (int t = 0 ; t < TXG_SIZE ; t ++ ) {
2759
- ms -> ms_allocating [t ] = zfs_range_tree_create (NULL , type ,
2760
- NULL , start , shift );
2761
- }
2762
- ms -> ms_freeing = zfs_range_tree_create (NULL , type , NULL , start , shift );
2763
- ms -> ms_freed = zfs_range_tree_create (NULL , type , NULL , start , shift );
2776
+ ms -> ms_allocating [t ] = zfs_range_tree_create_usecase (NULL , type ,
2777
+ NULL , start , shift , ZFS_RANGE_TREE_UC_ALLOCATED_SPACE ,
2778
+ metaslab_range_tree_instance (mg , ms , "ms_allocating" ));
2779
+ }
2780
+ ms -> ms_freeing = zfs_range_tree_create_usecase (NULL , type , NULL , start ,
2781
+ shift , ZFS_RANGE_TREE_UC_FREE_SPACE ,
2782
+ metaslab_range_tree_instance (mg , ms , "ms_freeing" ));
2783
+ ms -> ms_freed = zfs_range_tree_create_usecase (NULL , type , NULL , start ,
2784
+ shift , ZFS_RANGE_TREE_UC_FREE_SPACE ,
2785
+ metaslab_range_tree_instance (mg , ms , "ms_freed" ));
2764
2786
for (int t = 0 ; t < TXG_DEFER_SIZE ; t ++ ) {
2765
- ms -> ms_defer [t ] = zfs_range_tree_create (NULL , type , NULL ,
2766
- start , shift );
2787
+ ms -> ms_defer [t ] = zfs_range_tree_create_usecase (NULL , type ,
2788
+ NULL , start , shift , ZFS_RANGE_TREE_UC_FREE_SPACE ,
2789
+ metaslab_range_tree_instance (mg , ms , "ms_defer" ));
2767
2790
}
2768
- ms -> ms_checkpointing =
2769
- zfs_range_tree_create (NULL , type , NULL , start , shift );
2770
- ms -> ms_unflushed_allocs =
2771
- zfs_range_tree_create (NULL , type , NULL , start , shift );
2791
+ ms -> ms_checkpointing = zfs_range_tree_create_usecase (NULL , type , NULL ,
2792
+ start , shift , ZFS_RANGE_TREE_UC_FREE_SPACE ,
2793
+ metaslab_range_tree_instance (mg , ms , "ms_checkpointing" ));
2794
+ ms -> ms_unflushed_allocs = zfs_range_tree_create_usecase (NULL , type ,
2795
+ NULL , start , shift , ZFS_RANGE_TREE_UC_ALLOCATED_SPACE ,
2796
+ metaslab_range_tree_instance (mg , ms , "ms_unflushed_allocs" ));
2772
2797
2773
2798
metaslab_rt_arg_t * mrap = kmem_zalloc (sizeof (* mrap ), KM_SLEEP );
2774
2799
mrap -> mra_bt = & ms -> ms_unflushed_frees_by_size ;
2775
2800
mrap -> mra_floor_shift = metaslab_by_size_min_shift ;
2776
- ms -> ms_unflushed_frees = zfs_range_tree_create (& metaslab_rt_ops ,
2777
- type , mrap , start , shift );
2801
+ ms -> ms_unflushed_frees = zfs_range_tree_create_usecase (& metaslab_rt_ops ,
2802
+ type , mrap , start , shift , ZFS_RANGE_TREE_UC_FREE_SPACE ,
2803
+ metaslab_range_tree_instance (mg , ms , "ms_unflushed_frees" ));
2778
2804
2779
- ms -> ms_trim = zfs_range_tree_create (NULL , type , NULL , start , shift );
2805
+ ms -> ms_trim = zfs_range_tree_create_usecase (NULL , type , NULL , start ,
2806
+ shift , ZFS_RANGE_TREE_UC_FREE_SPACE ,
2807
+ metaslab_range_tree_instance (mg , ms , "ms_trim" ));
2780
2808
2781
2809
metaslab_group_add (mg , ms );
2782
2810
metaslab_set_fragmentation (ms , B_FALSE );
@@ -3750,7 +3778,9 @@ metaslab_condense(metaslab_t *msp, dmu_tx_t *tx)
3750
3778
type = metaslab_calculate_range_tree_type (msp -> ms_group -> mg_vd , msp ,
3751
3779
& start , & shift );
3752
3780
3753
- condense_tree = zfs_range_tree_create (NULL , type , NULL , start , shift );
3781
+ condense_tree = zfs_range_tree_create_usecase (NULL , type , NULL , start ,
3782
+ shift , ZFS_RANGE_TREE_UC_FREE_SPACE ,
3783
+ metaslab_range_tree_instance (msp -> ms_group , msp , "condense_tree" ));
3754
3784
3755
3785
for (int t = 0 ; t < TXG_DEFER_SIZE ; t ++ ) {
3756
3786
zfs_range_tree_walk (msp -> ms_defer [t ],
0 commit comments