Re: [RFC 05/11] ext4: Add per CR extent scanned counter

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri 27-01-23 18:07:32, Ojaswin Mujoo wrote:
> This gives better visibility into the number of extents scanned in each
> particular CR. For example, this information can be used to see how out
> block group scanning logic is performing when the BG is fragmented.
> 
> Signed-off-by: Ojaswin Mujoo <ojaswin@xxxxxxxxxxxxx>
> Reviewed-by: Ritesh Harjani (IBM) <ritesh.list@xxxxxxxxx>

Looks good to me. Feel free to add:

Reviewed-by: Jan Kara <jack@xxxxxxx>

								Honza

> ---
>  fs/ext4/ext4.h    |  1 +
>  fs/ext4/mballoc.c | 12 ++++++++++++
>  fs/ext4/mballoc.h |  1 +
>  3 files changed, 14 insertions(+)
> 
> diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h
> index 6037b8e0af86..4ba2c95915eb 100644
> --- a/fs/ext4/ext4.h
> +++ b/fs/ext4/ext4.h
> @@ -1633,6 +1633,7 @@ struct ext4_sb_info {
>  	atomic_t s_bal_success;	/* we found long enough chunks */
>  	atomic_t s_bal_allocated;	/* in blocks */
>  	atomic_t s_bal_ex_scanned;	/* total extents scanned */
> +	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_breaks;	/* too long searches */
> diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c
> index 323604a2ff45..07a50a13751c 100644
> --- a/fs/ext4/mballoc.c
> +++ b/fs/ext4/mballoc.c
> @@ -2077,6 +2077,7 @@ static void ext4_mb_measure_extent(struct ext4_allocation_context *ac,
>  	BUG_ON(ac->ac_status != AC_STATUS_CONTINUE);
>  
>  	ac->ac_found++;
> +	ac->ac_cX_found[ac->ac_criteria]++;
>  
>  	/*
>  	 * The special case - take what you catch first
> @@ -2249,6 +2250,7 @@ void ext4_mb_simple_scan_group(struct ext4_allocation_context *ac,
>  			break;
>  		}
>  		ac->ac_found++;
> +		ac->ac_cX_found[ac->ac_criteria]++;
>  
>  		ac->ac_b_ex.fe_len = 1 << i;
>  		ac->ac_b_ex.fe_start = k << i;
> @@ -2362,6 +2364,7 @@ void ext4_mb_scan_aligned(struct ext4_allocation_context *ac,
>  			max = mb_find_extent(e4b, i, sbi->s_stripe, &ex);
>  			if (max >= sbi->s_stripe) {
>  				ac->ac_found++;
> +				ac->ac_cX_found[ac->ac_criteria]++;
>  				ex.fe_logical = 0xDEADF00D; /* debug value */
>  				ac->ac_b_ex = ex;
>  				ext4_mb_use_best_found(ac, e4b);
> @@ -2894,6 +2897,7 @@ int ext4_seq_mb_stats_show(struct seq_file *seq, void *offset)
>  	seq_printf(seq, "\t\thits: %llu\n", atomic64_read(&sbi->s_bal_cX_hits[CR0]));
>  	seq_printf(seq, "\t\tgroups_considered: %llu\n",
>  		   atomic64_read(&sbi->s_bal_cX_groups_considered[CR0]));
> +	seq_printf(seq, "\t\textents_scanned: %u\n", atomic_read(&sbi->s_bal_cX_ex_scanned[CR0]));
>  	seq_printf(seq, "\t\tuseless_loops: %llu\n",
>  		   atomic64_read(&sbi->s_bal_cX_failed[CR0]));
>  	seq_printf(seq, "\t\tbad_suggestions: %u\n",
> @@ -2903,6 +2907,7 @@ int ext4_seq_mb_stats_show(struct seq_file *seq, void *offset)
>  	seq_printf(seq, "\t\thits: %llu\n", atomic64_read(&sbi->s_bal_cX_hits[CR1]));
>  	seq_printf(seq, "\t\tgroups_considered: %llu\n",
>  		   atomic64_read(&sbi->s_bal_cX_groups_considered[CR1]));
> +	seq_printf(seq, "\t\textents_scanned: %u\n", atomic_read(&sbi->s_bal_cX_ex_scanned[CR1]));
>  	seq_printf(seq, "\t\tuseless_loops: %llu\n",
>  		   atomic64_read(&sbi->s_bal_cX_failed[CR1]));
>  	seq_printf(seq, "\t\tbad_suggestions: %u\n",
> @@ -2912,6 +2917,7 @@ int ext4_seq_mb_stats_show(struct seq_file *seq, void *offset)
>  	seq_printf(seq, "\t\thits: %llu\n", atomic64_read(&sbi->s_bal_cX_hits[CR2]));
>  	seq_printf(seq, "\t\tgroups_considered: %llu\n",
>  		   atomic64_read(&sbi->s_bal_cX_groups_considered[CR2]));
> +	seq_printf(seq, "\t\textents_scanned: %u\n", atomic_read(&sbi->s_bal_cX_ex_scanned[CR2]));
>  	seq_printf(seq, "\t\tuseless_loops: %llu\n",
>  		   atomic64_read(&sbi->s_bal_cX_failed[CR2]));
>  
> @@ -2919,6 +2925,7 @@ int ext4_seq_mb_stats_show(struct seq_file *seq, void *offset)
>  	seq_printf(seq, "\t\thits: %llu\n", atomic64_read(&sbi->s_bal_cX_hits[CR3]));
>  	seq_printf(seq, "\t\tgroups_considered: %llu\n",
>  		   atomic64_read(&sbi->s_bal_cX_groups_considered[CR3]));
> +	seq_printf(seq, "\t\textents_scanned: %u\n", atomic_read(&sbi->s_bal_cX_ex_scanned[CR3]));
>  	seq_printf(seq, "\t\tuseless_loops: %llu\n",
>  		   atomic64_read(&sbi->s_bal_cX_failed[CR3]));
>  	seq_printf(seq, "\textents_scanned: %u\n", atomic_read(&sbi->s_bal_ex_scanned));
> @@ -4216,7 +4223,12 @@ static void ext4_mb_collect_stats(struct ext4_allocation_context *ac)
>  		atomic_add(ac->ac_b_ex.fe_len, &sbi->s_bal_allocated);
>  		if (ac->ac_b_ex.fe_len >= ac->ac_o_ex.fe_len)
>  			atomic_inc(&sbi->s_bal_success);
> +
>  		atomic_add(ac->ac_found, &sbi->s_bal_ex_scanned);
> +		for (int i=0; i<EXT4_MB_NUM_CRS; i++) {
> +			atomic_add(ac->ac_cX_found[i], &sbi->s_bal_cX_ex_scanned[i]);
> +		}
> +
>  		atomic_add(ac->ac_groups_scanned, &sbi->s_bal_groups_scanned);
>  		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)
> diff --git a/fs/ext4/mballoc.h b/fs/ext4/mballoc.h
> index f0087a85e366..004b8d163cc9 100644
> --- a/fs/ext4/mballoc.h
> +++ b/fs/ext4/mballoc.h
> @@ -193,6 +193,7 @@ struct ext4_allocation_context {
>  	__u16 ac_groups_scanned;
>  	__u16 ac_groups_linear_remaining;
>  	__u16 ac_found;
> +	__u16 ac_cX_found[EXT4_MB_NUM_CRS];
>  	__u16 ac_tail;
>  	__u16 ac_buddy;
>  	__u8 ac_status;
> -- 
> 2.31.1
> 
-- 
Jan Kara <jack@xxxxxxxx>
SUSE Labs, CR



[Index of Archives]     [Linux Ext4 Filesystem]     [Union Filesystem]     [Filesystem Testing]     [Ceph Users]     [Ecryptfs]     [NTFS 3]     [AutoFS]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux Cachefs]     [Reiser Filesystem]     [Linux RAID]     [NTFS 3]     [Samba]     [Device Mapper]     [CEPH Development]

  Powered by Linux