On 2020/7/1 4:56, Jaegeuk Kim wrote: > On 06/30, Nathan Chancellor wrote: >> On Mon, Jun 29, 2020 at 01:27:20PM -0700, Jaegeuk Kim wrote: >>> If two readahead threads having same offset enter in readpages, every read >>> IOs are split and issued to the disk which giving lower bandwidth. >>> >>> This patch tries to avoid redundant readahead calls. >>> >>> Signed-off-by: Jaegeuk Kim <[email protected]> >>> --- >>> v3: >>> - use READ|WRITE_ONCE >>> v2: >>> - add missing code to bypass read >>> >>> fs/f2fs/data.c | 18 ++++++++++++++++++ >>> fs/f2fs/f2fs.h | 1 + >>> fs/f2fs/super.c | 2 ++ >>> 3 files changed, 21 insertions(+) >>> >>> diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c >>> index 995cf78b23c5e..360b4c9080d97 100644 >>> --- a/fs/f2fs/data.c >>> +++ b/fs/f2fs/data.c >>> @@ -2296,6 +2296,7 @@ static int f2fs_mpage_readpages(struct inode *inode, >>> unsigned nr_pages = rac ? readahead_count(rac) : 1; >>> unsigned max_nr_pages = nr_pages; >>> int ret = 0; >>> + bool drop_ra = false; >>> >>> map.m_pblk = 0; >>> map.m_lblk = 0; >>> @@ -2306,10 +2307,24 @@ static int f2fs_mpage_readpages(struct inode *inode, >>> map.m_seg_type = NO_CHECK_TYPE; >>> map.m_may_create = false; >>> >>> + /* >>> + * Two readahead threads for same address range can cause race condition >>> + * which fragments sequential read IOs. So let's avoid each other. >>> + */ >>> + if (rac && readahead_count(rac)) { >>> + if (READ_ONCE(F2FS_I(inode)->ra_offset) == readahead_index(rac)) >>> + drop_ra = true; >>> + else >>> + WRITE_ONCE(F2FS_I(inode)->ra_offset, >>> + readahead_index(rac)); >>> + } >>> + >>> for (; nr_pages; nr_pages--) { >>> if (rac) { >>> page = readahead_page(rac); >>> prefetchw(&page->flags); >>> + if (drop_ra) >>> + goto next_page; >> >> When CONFIG_F2FS_FS_COMPRESSION is not set (i.e. x86_64 defconfig + >> CONFIG_F2FS_FS=y): >> >> $ make -skj"$(nproc)" O=out distclean defconfig fs/f2fs/data.o >> ../fs/f2fs/data.c: In function ‘f2fs_mpage_readpages’: >> ../fs/f2fs/data.c:2327:5: error: label ‘next_page’ used but not defined >> 2327 | goto next_page; >> | ^~~~ >> ... > > Thanks. I pushed the fix for -next. > https://lore.kernel.org/linux-f2fs-devel/[email protected]/T/#t
Reviewed-by: Chao Yu <[email protected]> Thanks, > > Thanks, > >> >> Cheers, >> Nathan >> >> >> _______________________________________________ >> Linux-f2fs-devel mailing list >> [email protected] >> https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel > > > _______________________________________________ > Linux-f2fs-devel mailing list > [email protected] > https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel >

