[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-Id: <20240618114941.5935-1-zhangpengpeng0808@gmail.com>
Date: Tue, 18 Jun 2024 19:49:41 +0800
From: Peng Zhang <zhangpengpeng0808@...il.com>
To: willy@...radead.org,
akpm@...ux-foundation.org,
linux-fsdevel@...r.kernel.org,
linux-mm@...ck.org,
linux-kernel@...r.kernel.org
Cc: bruzzhang <bruzzhang@...cent.com>,
Rongwei Wang <zigiwang@...cent.com>,
Vern Hao <vernhao@...cent.com>
Subject: [PATCH RFC] mm/readahead: Fix repeat initial_readahead
From: bruzzhang <bruzzhang@...cent.com>
Now, if read from start of file, readahead
state will be repeatly initialized when
first time async readahead after sync one.
This case likes:
sequence read
page_cache_sync_readahead()
--> ondemand_readahead() <-- initial ra
--> folio ready <-- order=2, readahead flags
folio_test_readahead(folio)
filemap_readahead() <-- async readahead
--> ondemand_readahead() <-- initial ra again
The second initialization of ra seems a
mistake, and right ra window
(start, size, async_size) should be (4,8,8)
instead of (0,4,3) after async readahead.
What's more, this patch can improve sequence
read greatly, the result of test as following:
case name upstream upstream+fix speedup
---------- -------- ------------ --------
randread-4k-sync 48981.00 48948.0000 -0.0674%
seqread-4k-sync 1162630.00 1334915.00 14.8186%
randread-4k-libaio 47561.00 49910.00 4.9389%
seqread-4k-libaio 1058526.00 1257134.00 18.7627%
seqread-1024k-libaio 1365866.00 1411463.00 3.3383%
Signed-off-by: bruzzhang <bruzzhang@...cent.com>
Signed-off-by: Rongwei Wang <zigiwang@...cent.com>
Signed-off-by: Vern Hao <vernhao@...cent.com>
---
mm/readahead.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/mm/readahead.c b/mm/readahead.c
index c1b23989d..498708b4b 100644
--- a/mm/readahead.c
+++ b/mm/readahead.c
@@ -571,7 +571,7 @@ static void ondemand_readahead(struct readahead_control *ractl,
/*
* start of file
*/
- if (!index)
+ if (!folio && !index)
goto initial_readahead;
/*
--
2.39.3
Powered by blists - more mailing lists