erofs: support to readahead dirent blocks in erofs_readdir()
authorChao Yu <chao@kernel.org>
Mon, 21 Jul 2025 02:13:52 +0000 (10:13 +0800)
committerGao Xiang <hsiangkao@linux.alibaba.com>
Thu, 24 Jul 2025 11:44:08 +0000 (19:44 +0800)
commitdf0ce6cefa453d2236381645e529a27ef2f0a573
tree973e877f245f147326f26ec1f6c6243720affdfe
parent414091322c6363c9283aeb177101e4d7a3819ccd
erofs: support to readahead dirent blocks in erofs_readdir()

This patch supports to readahead more blocks in erofs_readdir(), it can
enhance readdir performance in large direcotry.

readdir test in a large directory which contains 12000 sub-files.

files_per_second
Before: 926385.54
After: 2380435.562

Meanwhile, let's introduces a new sysfs entry to control readahead
bytes to provide more flexible policy for readahead of readdir().
- location: /sys/fs/erofs/<disk>/dir_ra_bytes
- default value: 16384
- disable readahead: set the value to 0

Signed-off-by: Chao Yu <chao@kernel.org>
Reviewed-by: Gao Xiang <hsiangkao@linux.alibaba.com>
Link: https://lore.kernel.org/r/20250721021352.2495371-1-chao@kernel.org
[ Gao Xiang: minor styling adjustment. ]
Signed-off-by: Gao Xiang <hsiangkao@linux.alibaba.com>
Documentation/ABI/testing/sysfs-fs-erofs
fs/erofs/dir.c
fs/erofs/internal.h
fs/erofs/super.c
fs/erofs/sysfs.c