From: Gao Xiang <hsiangkao@linux.alibaba.com>
To: Chao Yu <chao@kernel.org>, xiang@kernel.org
Cc: linux-erofs@lists.ozlabs.org, linux-kernel@vger.kernel.org,
Yue Hu <zbestahu@gmail.com>,
Jeffle Xu <jefflexu@linux.alibaba.com>,
Sandeep Dhavale <dhavale@google.com>,
Hongbo Li <lihongbo22@huawei.com>
Subject: Re: [PATCH v4] erofs: support to readahead dirent blocks in erofs_readdir()
Date: Mon, 21 Jul 2025 10:24:54 +0800 [thread overview]
Message-ID: <085b2e3f-223f-4867-9fac-99cf7cb2fa21@linux.alibaba.com> (raw)
In-Reply-To: <20250721021352.2495371-1-chao@kernel.org>
On 2025/7/21 10:13, Chao Yu wrote:
> 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>
> ---
> v4:
> - clean up codes and comments
> Documentation/ABI/testing/sysfs-fs-erofs | 8 ++++++++
> fs/erofs/dir.c | 14 ++++++++++++++
> fs/erofs/internal.h | 4 ++++
> fs/erofs/super.c | 2 ++
> fs/erofs/sysfs.c | 2 ++
> 5 files changed, 30 insertions(+)
>
> diff --git a/Documentation/ABI/testing/sysfs-fs-erofs b/Documentation/ABI/testing/sysfs-fs-erofs
> index bf3b6299c15e..85fa56ca092c 100644
> --- a/Documentation/ABI/testing/sysfs-fs-erofs
> +++ b/Documentation/ABI/testing/sysfs-fs-erofs
> @@ -35,3 +35,11 @@ Description: Used to set or show hardware accelerators in effect
> and multiple accelerators are separated by '\n'.
> Supported accelerator(s): qat_deflate.
> Disable all accelerators with an empty string (echo > accel).
> +
> +What: /sys/fs/erofs/<disk>/dir_ra_bytes
> +Date: July 2025
> +Contact: "Chao Yu" <chao@kernel.org>
> +Description: Used to set or show readahead bytes during readdir(), by
> + default the value is 16384.
> +
> + - 0: disable readahead.
> diff --git a/fs/erofs/dir.c b/fs/erofs/dir.c
> index 3e4b38bec0aa..99745c272b60 100644
> --- a/fs/erofs/dir.c
> +++ b/fs/erofs/dir.c
> @@ -47,8 +47,12 @@ static int erofs_readdir(struct file *f, struct dir_context *ctx)
> struct inode *dir = file_inode(f);
> struct erofs_buf buf = __EROFS_BUF_INITIALIZER;
> struct super_block *sb = dir->i_sb;
> + struct file_ra_state *ra = &f->f_ra;
> unsigned long bsz = sb->s_blocksize;
> unsigned int ofs = erofs_blkoff(sb, ctx->pos);
> + pgoff_t ra_pages = DIV_ROUND_UP_POW2(
> + EROFS_I_SB(dir)->dir_ra_bytes, PAGE_SIZE);
> + pgoff_t nr_pages = DIV_ROUND_UP_POW2(dir->i_size, PAGE_SIZE);
> int err = 0;
> bool initial = true;
>
> @@ -63,6 +67,16 @@ static int erofs_readdir(struct file *f, struct dir_context *ctx)
> break;
> }
>
> + /* readahead blocks to enhance performance in large directory */
> + if (ra_pages) {
> + pgoff_t idx = DIV_ROUND_UP(ctx->pos, PAGE_SIZE);
Can we use DIV_ROUND_UP_POW2 here too? If it's okay,
I will update the patch manually when applied.
Otherwise it looks good to me,
Reviewed-by: Gao Xiang <hsiangkao@linux.alibaba.com>
Thanks,
Gao Xiang
next prev parent reply other threads:[~2025-07-21 2:25 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-07-21 2:13 [PATCH v4] erofs: support to readahead dirent blocks in erofs_readdir() Chao Yu
2025-07-21 2:24 ` Gao Xiang [this message]
2025-07-21 3:16 ` Chao Yu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=085b2e3f-223f-4867-9fac-99cf7cb2fa21@linux.alibaba.com \
--to=hsiangkao@linux.alibaba.com \
--cc=chao@kernel.org \
--cc=dhavale@google.com \
--cc=jefflexu@linux.alibaba.com \
--cc=lihongbo22@huawei.com \
--cc=linux-erofs@lists.ozlabs.org \
--cc=linux-kernel@vger.kernel.org \
--cc=xiang@kernel.org \
--cc=zbestahu@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.