* [f2fs-dev] [RFC PATCH 1/1] f2fs: adjust readahead window based on extent length
@ 2025-12-12 13:52 Yongpeng Yang
2025-12-15 1:55 ` Chao Yu via Linux-f2fs-devel
2025-12-16 0:48 ` Jaegeuk Kim via Linux-f2fs-devel
0 siblings, 2 replies; 4+ messages in thread
From: Yongpeng Yang @ 2025-12-12 13:52 UTC (permalink / raw)
To: Chao Yu, Jaegeuk Kim; +Cc: Yongpeng Yang, Yongpeng Yang, linux-f2fs-devel
From: Yongpeng Yang <yangyongpeng@xiaomi.com>
For readahead, if the current readahead window is smaller than the extent
size, expand the window so that larger bios can be issued and improve
overall read performance.
Signed-off-by: Yongpeng Yang <yangyongpeng@xiaomi.com>
---
fs/f2fs/data.c | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c
index c30e69392a62..2e5cbdb7729c 100644
--- a/fs/f2fs/data.c
+++ b/fs/f2fs/data.c
@@ -2377,6 +2377,17 @@ static int f2fs_mpage_readpages(struct inode *inode,
map.m_seg_type = NO_CHECK_TYPE;
map.m_may_create = false;
+ if (rac) {
+ loff_t block_in_file;
+
+ block_in_file = rac->_index;
+ map.m_lblk = block_in_file;
+ map.m_len = max(nr_pages, inode_to_bdi(inode)->ra_pages);
+ if (!f2fs_map_blocks(inode, &map, F2FS_GET_BLOCK_DEFAULT) && map.m_len > nr_pages) {
+ readahead_expand(rac, block_in_file << F2FS_BLKSIZE_BITS, map.m_len << F2FS_BLKSIZE_BITS);
+ nr_pages = readahead_count(rac);
+ }
+ }
for (; nr_pages; nr_pages--) {
if (rac) {
folio = readahead_folio(rac);
--
2.43.0
_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [f2fs-dev] [RFC PATCH 1/1] f2fs: adjust readahead window based on extent length
2025-12-12 13:52 [f2fs-dev] [RFC PATCH 1/1] f2fs: adjust readahead window based on extent length Yongpeng Yang
@ 2025-12-15 1:55 ` Chao Yu via Linux-f2fs-devel
2025-12-16 13:02 ` Yongpeng Yang
2025-12-16 0:48 ` Jaegeuk Kim via Linux-f2fs-devel
1 sibling, 1 reply; 4+ messages in thread
From: Chao Yu via Linux-f2fs-devel @ 2025-12-15 1:55 UTC (permalink / raw)
To: Yongpeng Yang, Jaegeuk Kim; +Cc: Yongpeng Yang, Yongpeng Yang, linux-f2fs-devel
On 12/12/25 21:52, Yongpeng Yang wrote:
> From: Yongpeng Yang <yangyongpeng@xiaomi.com>
>
> For readahead, if the current readahead window is smaller than the extent
> size, expand the window so that larger bios can be issued and improve
> overall read performance.
Yongpeng,
Do you have any numbers to reveal how this patch improves the sequential
read performance?
In addition, will we suffer regression for random read case?
Thanks,
>
> Signed-off-by: Yongpeng Yang <yangyongpeng@xiaomi.com>
> ---
> fs/f2fs/data.c | 11 +++++++++++
> 1 file changed, 11 insertions(+)
>
> diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c
> index c30e69392a62..2e5cbdb7729c 100644
> --- a/fs/f2fs/data.c
> +++ b/fs/f2fs/data.c
> @@ -2377,6 +2377,17 @@ static int f2fs_mpage_readpages(struct inode *inode,
> map.m_seg_type = NO_CHECK_TYPE;
> map.m_may_create = false;
>
> + if (rac) {
> + loff_t block_in_file;
> +
> + block_in_file = rac->_index;
> + map.m_lblk = block_in_file;
> + map.m_len = max(nr_pages, inode_to_bdi(inode)->ra_pages);
> + if (!f2fs_map_blocks(inode, &map, F2FS_GET_BLOCK_DEFAULT) && map.m_len > nr_pages) {
> + readahead_expand(rac, block_in_file << F2FS_BLKSIZE_BITS, map.m_len << F2FS_BLKSIZE_BITS);
> + nr_pages = readahead_count(rac);
> + }
> + }
> for (; nr_pages; nr_pages--) {
> if (rac) {
> folio = readahead_folio(rac);
_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [f2fs-dev] [RFC PATCH 1/1] f2fs: adjust readahead window based on extent length
2025-12-12 13:52 [f2fs-dev] [RFC PATCH 1/1] f2fs: adjust readahead window based on extent length Yongpeng Yang
2025-12-15 1:55 ` Chao Yu via Linux-f2fs-devel
@ 2025-12-16 0:48 ` Jaegeuk Kim via Linux-f2fs-devel
1 sibling, 0 replies; 4+ messages in thread
From: Jaegeuk Kim via Linux-f2fs-devel @ 2025-12-16 0:48 UTC (permalink / raw)
To: Yongpeng Yang; +Cc: Yongpeng Yang, Yongpeng Yang, linux-f2fs-devel
On 12/12, Yongpeng Yang wrote:
> From: Yongpeng Yang <yangyongpeng@xiaomi.com>
>
> For readahead, if the current readahead window is smaller than the extent
> size, expand the window so that larger bios can be issued and improve
> overall read performance.
I don't think it's good to change the readahead size in deep filesystem level.
>
> Signed-off-by: Yongpeng Yang <yangyongpeng@xiaomi.com>
> ---
> fs/f2fs/data.c | 11 +++++++++++
> 1 file changed, 11 insertions(+)
>
> diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c
> index c30e69392a62..2e5cbdb7729c 100644
> --- a/fs/f2fs/data.c
> +++ b/fs/f2fs/data.c
> @@ -2377,6 +2377,17 @@ static int f2fs_mpage_readpages(struct inode *inode,
> map.m_seg_type = NO_CHECK_TYPE;
> map.m_may_create = false;
>
> + if (rac) {
> + loff_t block_in_file;
> +
> + block_in_file = rac->_index;
> + map.m_lblk = block_in_file;
> + map.m_len = max(nr_pages, inode_to_bdi(inode)->ra_pages);
> + if (!f2fs_map_blocks(inode, &map, F2FS_GET_BLOCK_DEFAULT) && map.m_len > nr_pages) {
> + readahead_expand(rac, block_in_file << F2FS_BLKSIZE_BITS, map.m_len << F2FS_BLKSIZE_BITS);
> + nr_pages = readahead_count(rac);
> + }
> + }
> for (; nr_pages; nr_pages--) {
> if (rac) {
> folio = readahead_folio(rac);
> --
> 2.43.0
_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [f2fs-dev] [RFC PATCH 1/1] f2fs: adjust readahead window based on extent length
2025-12-15 1:55 ` Chao Yu via Linux-f2fs-devel
@ 2025-12-16 13:02 ` Yongpeng Yang
0 siblings, 0 replies; 4+ messages in thread
From: Yongpeng Yang @ 2025-12-16 13:02 UTC (permalink / raw)
To: Chao Yu, Yongpeng Yang, Jaegeuk Kim
Cc: Yongpeng Yang, Yongpeng Yang, linux-f2fs-devel
On 12/15/25 09:55, Chao Yu via Linux-f2fs-devel wrote:
> On 12/12/25 21:52, Yongpeng Yang wrote:
>> From: Yongpeng Yang <yangyongpeng@xiaomi.com>
>>
>> For readahead, if the current readahead window is smaller than the extent
>> size, expand the window so that larger bios can be issued and improve
>> overall read performance.
>
> Yongpeng,
>
> Do you have any numbers to reveal how this patch improves the sequential
> read performance?
Yes, the goal is to improve sequential read performance when the
readahead window is not aligned with the device optimal I/O size.
>
> In addition, will we suffer regression for random read case?
>
*Background*
On Android systems, some SoC vendors reduce the readahead window in
order to avoid excessive useless readahead. As a result, the readahead
window can be smaller than the device optimal I/O size (q->limits.io_opt).
When reading large files with dd, the number of read I/Os issued by
f2fs_readahead is limited by the readahead window, preventing the device
from fully utilizing its performance.
*Test setup*
1. Test environment: UFS 4.1 device, q->limits.io_opt is 1 MB
2. Test conditions: a 2 GB file with all extents sized at 2 MB
3. Test variables: the readahead window (read_ahead_kb) and the
effective readahead size after adjustment by readahead_expand in
f2fs_readahead
4. Test case: dd if=file_2m.dat of=/dev/null bs=512K count=4096, The
file page cache is dropped between runs, and the test is repeated 3 times.
*Test results*
| read_ahead_kb | effective f2fs_readahead window | bandwidth (GB/s)|
|---------------|---------------------------------|-----------------|
| 512 KB | 512 KB | 2.2 |
| 512 KB | 1024KB | 2.6 |
| 1024KB | 1024KB | 2.6 |
| 1024KB | 2048KB | 3.0 |
*Analysis*
1. The first row reflects the commonly used configuration and serves as
the baseline.
2. When the readahead window is aligned with the device optimal I/O
size, the bandwidth improves by about 18%.
3。 Increasing the effective f2fs_readahead window to 2 MB improves
bandwidth by about 36%.
*Disscusion*
The goal of this patch is to improve sequential read bandwidth when the
readahead window is smaller than the device optimal I/O size. Would it
make sense to record the end offset of the previous file access in
f2fs_read_ahead to determine whether the current read is sequential, and
based on that, decide whether to increase the readahead size?
Thanks
Yongpeng,
> Thanks,
>
>>
>> Signed-off-by: Yongpeng Yang <yangyongpeng@xiaomi.com>
>> ---
>> fs/f2fs/data.c | 11 +++++++++++
>> 1 file changed, 11 insertions(+)
>>
>> diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c
>> index c30e69392a62..2e5cbdb7729c 100644
>> --- a/fs/f2fs/data.c
>> +++ b/fs/f2fs/data.c
>> @@ -2377,6 +2377,17 @@ static int f2fs_mpage_readpages(struct inode *inode,
>> map.m_seg_type = NO_CHECK_TYPE;
>> map.m_may_create = false;
>>
>> + if (rac) {
>> + loff_t block_in_file;
>> +
>> + block_in_file = rac->_index;
>> + map.m_lblk = block_in_file;
>> + map.m_len = max(nr_pages, inode_to_bdi(inode)->ra_pages);
>> + if (!f2fs_map_blocks(inode, &map, F2FS_GET_BLOCK_DEFAULT) && map.m_len > nr_pages) {
>> + readahead_expand(rac, block_in_file << F2FS_BLKSIZE_BITS, map.m_len << F2FS_BLKSIZE_BITS);
>> + nr_pages = readahead_count(rac);
>> + }
>> + }
>> for (; nr_pages; nr_pages--) {
>> if (rac) {
>> folio = readahead_folio(rac);
>
>
>
> _______________________________________________
> Linux-f2fs-devel mailing list
> Linux-f2fs-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel
_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2025-12-16 13:02 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-12-12 13:52 [f2fs-dev] [RFC PATCH 1/1] f2fs: adjust readahead window based on extent length Yongpeng Yang
2025-12-15 1:55 ` Chao Yu via Linux-f2fs-devel
2025-12-16 13:02 ` Yongpeng Yang
2025-12-16 0:48 ` Jaegeuk Kim via Linux-f2fs-devel
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.