Message ID | e6a33294b00b5e02eb0b621e8192a641d34eea1f.1674822311.git.ojaswin@linux.ibm.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | multiblock allocator improvements | expand |
On Fri 27-01-23 18:07:33, Ojaswin Mujoo wrote: > Track number of allocations where the length of blocks allocated is equal to the > length of goal blocks (post normalization). This metric could be useful if > making changes to the allocator logic in the future as it could give us > visibility into how often do we trim our requests. > > PS: ac_b_ex.fe_len might get modified due to preallocation efforts and > hence we use ac_f_ex.fe_len instead since we want to compare how much the > allocator was able to actually find. > > Signed-off-by: Ojaswin Mujoo <ojaswin@linux.ibm.com> > Reviewed-by: Ritesh Harjani (IBM) <ritesh.list@gmail.com> Looks good to me. Feel free to add: Reviewed-by: Jan Kara <jack@suse.cz> Honza > --- > fs/ext4/ext4.h | 1 + > fs/ext4/mballoc.c | 3 +++ > 2 files changed, 4 insertions(+) > > diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h > index 4ba2c95915eb..d8fa01e54e81 100644 > --- a/fs/ext4/ext4.h > +++ b/fs/ext4/ext4.h > @@ -1636,6 +1636,7 @@ struct ext4_sb_info { > atomic_t s_bal_cX_ex_scanned[EXT4_MB_NUM_CRS]; /* total extents scanned */ > atomic_t s_bal_groups_scanned; /* number of groups scanned */ > atomic_t s_bal_goals; /* goal hits */ > + atomic_t s_bal_len_goals; /* len goal hits */ > atomic_t s_bal_breaks; /* too long searches */ > atomic_t s_bal_2orders; /* 2^order hits */ > atomic_t s_bal_cr0_bad_suggestions; > diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c > index 07a50a13751c..c4ab8f412d32 100644 > --- a/fs/ext4/mballoc.c > +++ b/fs/ext4/mballoc.c > @@ -2930,6 +2930,7 @@ int ext4_seq_mb_stats_show(struct seq_file *seq, void *offset) > atomic64_read(&sbi->s_bal_cX_failed[CR3])); > seq_printf(seq, "\textents_scanned: %u\n", atomic_read(&sbi->s_bal_ex_scanned)); > seq_printf(seq, "\t\tgoal_hits: %u\n", atomic_read(&sbi->s_bal_goals)); > + seq_printf(seq, "\t\tlen_goal_hits: %u\n", atomic_read(&sbi->s_bal_len_goals)); > seq_printf(seq, "\t\t2^n_hits: %u\n", atomic_read(&sbi->s_bal_2orders)); > seq_printf(seq, "\t\tbreaks: %u\n", atomic_read(&sbi->s_bal_breaks)); > seq_printf(seq, "\t\tlost: %u\n", atomic_read(&sbi->s_mb_lost_chunks)); > @@ -4233,6 +4234,8 @@ static void ext4_mb_collect_stats(struct ext4_allocation_context *ac) > if (ac->ac_g_ex.fe_start == ac->ac_b_ex.fe_start && > ac->ac_g_ex.fe_group == ac->ac_b_ex.fe_group) > atomic_inc(&sbi->s_bal_goals); > + if (ac->ac_f_ex.fe_len == ac->ac_g_ex.fe_len) > + atomic_inc(&sbi->s_bal_len_goals); > if (ac->ac_found > sbi->s_mb_max_to_scan) > atomic_inc(&sbi->s_bal_breaks); > } > -- > 2.31.1 >
diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h index 4ba2c95915eb..d8fa01e54e81 100644 --- a/fs/ext4/ext4.h +++ b/fs/ext4/ext4.h @@ -1636,6 +1636,7 @@ struct ext4_sb_info { atomic_t s_bal_cX_ex_scanned[EXT4_MB_NUM_CRS]; /* total extents scanned */ atomic_t s_bal_groups_scanned; /* number of groups scanned */ atomic_t s_bal_goals; /* goal hits */ + atomic_t s_bal_len_goals; /* len goal hits */ atomic_t s_bal_breaks; /* too long searches */ atomic_t s_bal_2orders; /* 2^order hits */ atomic_t s_bal_cr0_bad_suggestions; diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c index 07a50a13751c..c4ab8f412d32 100644 --- a/fs/ext4/mballoc.c +++ b/fs/ext4/mballoc.c @@ -2930,6 +2930,7 @@ int ext4_seq_mb_stats_show(struct seq_file *seq, void *offset) atomic64_read(&sbi->s_bal_cX_failed[CR3])); seq_printf(seq, "\textents_scanned: %u\n", atomic_read(&sbi->s_bal_ex_scanned)); seq_printf(seq, "\t\tgoal_hits: %u\n", atomic_read(&sbi->s_bal_goals)); + seq_printf(seq, "\t\tlen_goal_hits: %u\n", atomic_read(&sbi->s_bal_len_goals)); seq_printf(seq, "\t\t2^n_hits: %u\n", atomic_read(&sbi->s_bal_2orders)); seq_printf(seq, "\t\tbreaks: %u\n", atomic_read(&sbi->s_bal_breaks)); seq_printf(seq, "\t\tlost: %u\n", atomic_read(&sbi->s_mb_lost_chunks)); @@ -4233,6 +4234,8 @@ static void ext4_mb_collect_stats(struct ext4_allocation_context *ac) if (ac->ac_g_ex.fe_start == ac->ac_b_ex.fe_start && ac->ac_g_ex.fe_group == ac->ac_b_ex.fe_group) atomic_inc(&sbi->s_bal_goals); + if (ac->ac_f_ex.fe_len == ac->ac_g_ex.fe_len) + atomic_inc(&sbi->s_bal_len_goals); if (ac->ac_found > sbi->s_mb_max_to_scan) atomic_inc(&sbi->s_bal_breaks); }