Re: [f2fs-dev] [PATCH v8 12/12] f2fs: cache: show per-cache usage in debugfs

From: Zhiguo Niu

Date: Wed Sep 16 2026 - 05:40:43 EST


Chao Yu via Linux-f2fs-devel <linux-f2fs-devel@xxxxxxxxxxxxxxxxxxxxx>
于2026年9月16日周三 09:57写道:
>
> From: Chao Yu <chao@xxxxxxxxxx>
>
> This patch exposes per-cache memory usage (entry struct memory vs.
> cached block buffer memory) for meta, node, and compress caches under
> the memory section in debugfs:
> - meta entry: xxx KB, meta cache: xxx KB
> - node entry: xxx KB, node cache: xxx KB
> - compress entry: xxx KB, compress cache: xxx KB
>
> Signed-off-by: Chao Yu <chao@xxxxxxxxxx>
Reviewed-by: Zhiguo Niu <zhiguo.niu@xxxxxxxxxx>
thanks!
> ---
> fs/f2fs/cache.h | 1 +
> fs/f2fs/debug.c | 49 ++++++++++++++++++++++++++++++++++++++++---------
> fs/f2fs/f2fs.h | 2 ++
> 3 files changed, 43 insertions(+), 9 deletions(-)
>
> diff --git a/fs/f2fs/cache.h b/fs/f2fs/cache.h
> index a8c24f5282fa..d7983ee70337 100644
> --- a/fs/f2fs/cache.h
> +++ b/fs/f2fs/cache.h
> @@ -38,6 +38,7 @@ enum f2fs_cache_type {
> F2FS_META_CACHE,
> F2FS_NODE_CACHE,
> F2FS_COMPRESS_CACHE,
> + NR_CACHE_TYPES,
> };
>
> /* Main cache control structure (per sb_info) */
> diff --git a/fs/f2fs/debug.c b/fs/f2fs/debug.c
> index 4ed5c271dba3..8c0cffde2457 100644
> --- a/fs/f2fs/debug.c
> +++ b/fs/f2fs/debug.c
> @@ -380,17 +380,36 @@ static void update_mem_info(struct f2fs_sb_info *sbi)
> si->cache_mem += si->ext_mem[i];
> }
>
> - si->page_mem = 0;
> - si->page_mem += (unsigned long long)META_CACHE(sbi)->num_entries << PAGE_SHIFT;
> - si->cache_mem += META_CACHE(sbi)->num_entries * sizeof(struct f2fs_cached_block);
> - si->page_mem += (unsigned long long)NODE_CACHE(sbi)->num_entries << PAGE_SHIFT;
> - si->cache_mem += NODE_CACHE(sbi)->num_entries * sizeof(struct f2fs_cached_block);
> + si->cache_entry_mem[F2FS_META_CACHE] =
> + (unsigned long long)META_CACHE(sbi)->num_entries *
> + sizeof(struct f2fs_cached_block);
> + si->cache_data_mem[F2FS_META_CACHE] =
> + (unsigned long long)META_CACHE(sbi)->num_entries * sbi->blocksize;
> +
> + si->cache_entry_mem[F2FS_NODE_CACHE] =
> + (unsigned long long)NODE_CACHE(sbi)->num_entries *
> + sizeof(struct f2fs_cached_block);
> + si->cache_data_mem[F2FS_NODE_CACHE] =
> + (unsigned long long)NODE_CACHE(sbi)->num_entries * sbi->blocksize;
> +
> + si->cache_mem += si->cache_entry_mem[F2FS_META_CACHE] +
> + si->cache_entry_mem[F2FS_NODE_CACHE];
> + si->page_mem = si->cache_data_mem[F2FS_META_CACHE] +
> + si->cache_data_mem[F2FS_NODE_CACHE];
> #ifdef CONFIG_F2FS_FS_COMPRESSION
> if (test_opt(sbi, COMPRESS_CACHE)) {
> - unsigned long npages = COMPRESS_CACHE(sbi)->num_entries;
> -
> - si->page_mem += (unsigned long long)npages << PAGE_SHIFT;
> - si->cache_mem += npages * sizeof(struct f2fs_cached_block);
> + si->cache_entry_mem[F2FS_COMPRESS_CACHE] =
> + (unsigned long long)COMPRESS_CACHE(sbi)->num_entries *
> + sizeof(struct f2fs_cached_block);
> + si->cache_data_mem[F2FS_COMPRESS_CACHE] =
> + (unsigned long long)COMPRESS_CACHE(sbi)->num_entries *
> + sbi->blocksize;
> +
> + si->cache_mem += si->cache_entry_mem[F2FS_COMPRESS_CACHE];
> + si->page_mem += si->cache_data_mem[F2FS_COMPRESS_CACHE];
> + } else {
> + si->cache_entry_mem[F2FS_COMPRESS_CACHE] = 0;
> + si->cache_data_mem[F2FS_COMPRESS_CACHE] = 0;
> }
> #endif
> }
> @@ -749,6 +768,18 @@ static int stat_show(struct seq_file *s, void *v)
> si->ext_mem[EX_READ] >> 10);
> seq_printf(s, " - block age extent cache: %llu KB\n",
> si->ext_mem[EX_BLOCK_AGE] >> 10);
> + seq_printf(s, " - meta entry: %llu KB, meta cache: %llu KB\n",
> + si->cache_entry_mem[F2FS_META_CACHE] >> 10,
> + si->cache_data_mem[F2FS_META_CACHE] >> 10);
> + seq_printf(s, " - node entry: %llu KB, node cache: %llu KB\n",
> + si->cache_entry_mem[F2FS_NODE_CACHE] >> 10,
> + si->cache_data_mem[F2FS_NODE_CACHE] >> 10);
> +#ifdef CONFIG_F2FS_FS_COMPRESSION
> + if (test_opt(sbi, COMPRESS_CACHE))
> + seq_printf(s, " - compress entry: %llu KB, compress cache: %llu KB\n",
> + si->cache_entry_mem[F2FS_COMPRESS_CACHE] >> 10,
> + si->cache_data_mem[F2FS_COMPRESS_CACHE] >> 10);
> +#endif
> seq_printf(s, " - paged : %llu KB\n",
> si->page_mem >> 10);
> }
> diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
> index 69690b061236..34878d99a2f0 100644
> --- a/fs/f2fs/f2fs.h
> +++ b/fs/f2fs/f2fs.h
> @@ -4525,6 +4525,8 @@ struct f2fs_stat_info {
> unsigned int block_count[2];
> unsigned int inplace_count;
> unsigned long long base_mem, cache_mem, page_mem;
> + unsigned long long cache_entry_mem[NR_CACHE_TYPES];
> + unsigned long long cache_data_mem[NR_CACHE_TYPES];
> struct f2fs_dev_stats *dev_stats;
> };
>
> --
> 2.49.0
>
>
>
> _______________________________________________
> Linux-f2fs-devel mailing list
> Linux-f2fs-devel@xxxxxxxxxxxxxxxxxxxxx
> https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel