在 2025/7/15 14:58, Chao Yu 写道:
On 7/15/25 11:10, Qi Han wrote:
Jens has already completed the development of uncached buffered I/O
in git [1], and in f2fs, the feature can be enabled simply by setting
the FOP_DONTCACHE flag in f2fs_file_operations.
Hi Qi, do you have any numbers of f2fs before/after this change? though
I'm not against supporting this feature in f2fs.
Thanks,
Hi, Chao
I have been testing a use case locally, which aligns with Jens' test
case [1]. In the read scenario, using uncached buffer I/O results in
more stable read performance and a lower load on the background memory
reclaim thread (kswapd).
However, in the write scenario, it appears that uncached buffer I/O
may not be suitable for F2FS. This is because F2FS calls folio_end_writeback
in the softirq context, as discussed in [2].
Read test data without using uncached buffer I/O:
reading bs 32768, uncached 0
1s: 1856MB/sec, MB=1856
2s: 1907MB/sec, MB=3763
3s: 1830MB/sec, MB=5594
4s: 1745MB/sec, MB=7333
5s: 1829MB/sec, MB=9162
6s: 1903MB/sec, MB=11075
7s: 1878MB/sec, MB=12942
8s: 1763MB/sec, MB=14718
9s: 1845MB/sec, MB=16549
10s: 1915MB/sec, MB=18481
11s: 1831MB/sec, MB=20295
12s: 1750MB/sec, MB=22066
13s: 1787MB/sec, MB=23832
14s: 1913MB/sec, MB=25769
15s: 1898MB/sec, MB=27668
16s: 1795MB/sec, MB=29436
17s: 1812MB/sec, MB=31248
18s: 1890MB/sec, MB=33139
19s: 1880MB/sec, MB=35020
20s: 1754MB/sec, MB=36810
08:36:26 UID PID %usr %system %guest %wait %CPU CPU
Command
08:36:27 0 93 0.00 0.00 0.00 0.00 0.00 7
kswapd0
08:36:28 0 93 0.00 0.00 0.00 0.00 0.00 7
kswapd0
08:36:29 0 93 0.00 0.00 0.00 0.00 0.00 7
kswapd0
08:36:30 0 93 0.00 56.00 0.00 0.00 56.00 7
kswapd0
08:36:31 0 93 0.00 73.00 0.00 0.00 73.00 7
kswapd0
08:36:32 0 93 0.00 83.00 0.00 0.00 83.00 7
kswapd0
08:36:33 0 93 0.00 75.00 0.00 0.00 75.00 7
kswapd0
08:36:34 0 93 0.00 81.00 0.00 0.00 81.00 7
kswapd0
08:36:35 0 93 0.00 54.00 0.00 1.00 54.00 2
kswapd0
08:36:36 0 93 0.00 61.00 0.00 0.00 61.00 0
kswapd0
08:36:37 0 93 0.00 68.00 0.00 0.00 68.00 7
kswapd0
08:36:38 0 93 0.00 53.00 0.00 0.00 53.00 2
kswapd0
08:36:39 0 93 0.00 82.00 0.00 0.00 82.00 7
kswapd0
08:36:40 0 93 0.00 77.00 0.00 0.00 77.00 1
kswapd0
08:36:41 0 93 0.00 74.00 0.00 1.00 74.00 7
kswapd0
08:36:42 0 93 0.00 71.00 0.00 0.00 71.00 7
kswapd0
08:36:43 0 93 0.00 78.00 0.00 0.00 78.00 7
kswapd0
08:36:44 0 93 0.00 85.00 0.00 0.00 85.00 7
kswapd0
08:36:45 0 93 0.00 83.00 0.00 0.00 83.00 7
kswapd0
08:36:46 0 93 0.00 70.00 0.00 0.00 70.00 7
kswapd0
08:36:47 0 93 0.00 78.00 0.00 1.00 78.00 2
kswapd0
08:36:48 0 93 0.00 81.00 0.00 0.00 81.00 3
kswapd0
08:36:49 0 93 0.00 54.00 0.00 0.00 54.00 7
kswapd0
08:36:50 0 93 0.00 76.00 0.00 0.00 76.00 1
kswapd0
08:36:51 0 93 0.00 75.00 0.00 0.00 75.00 0
kswapd0
08:36:52 0 93 0.00 73.00 0.00 0.00 73.00 7
kswapd0
08:36:53 0 93 0.00 61.00 0.00 1.00 61.00 7
kswapd0
08:36:54 0 93 0.00 80.00 0.00 0.00 80.00 7
kswapd0
08:36:55 0 93 0.00 64.00 0.00 0.00 64.00 7
kswapd0
08:36:56 0 93 0.00 56.00 0.00 0.00 56.00 7
kswapd0
08:36:57 0 93 0.00 26.00 0.00 0.00 26.00 2
kswapd0
08:36:58 0 93 0.00 24.00 0.00 1.00 24.00 3
kswapd0
08:36:59 0 93 0.00 22.00 0.00 1.00 22.00 3
kswapd0
08:37:00 0 93 0.00 15.84 0.00 0.00 15.84 3
kswapd0
08:37:01 0 93 0.00 0.00 0.00 0.00 0.00 3
kswapd0
08:37:02 0 93 0.00 0.00 0.00 0.00 0.00 3
kswapd0
Read test data after using uncached buffer I/O:
reading bs 32768, uncached 1
1s: 1863MB/sec, MB=1863
2s: 1903MB/sec, MB=3766
3s: 1860MB/sec, MB=5627
4s: 1864MB/sec, MB=7491
5s: 1860MB/sec, MB=9352
6s: 1854MB/sec, MB=11206
7s: 1874MB/sec, MB=13081
8s: 1874MB/sec, MB=14943
9s: 1840MB/sec, MB=16798
10s: 1849MB/sec, MB=18647
11s: 1863MB/sec, MB=20511
12s: 1798MB/sec, MB=22310
13s: 1897MB/sec, MB=24207
14s: 1817MB/sec, MB=26025
15s: 1893MB/sec, MB=27918
16s: 1917MB/sec, MB=29836
17s: 1863MB/sec, MB=31699
18s: 1904MB/sec, MB=33604
19s: 1894MB/sec, MB=35499
20s: 1907MB/sec, MB=37407
08:38:00 UID PID %usr %system %guest %wait %CPU CPU Command
08:38:01 0 93 0.00 0.00 0.00 0.00 0.00 4
kswapd0
08:38:02 0 93 0.00 0.00 0.00 0.00 0.00 4
kswapd0
08:38:03 0 93 0.00 0.00 0.00 0.00 0.00 4
kswapd0
08:38:04 0 93 0.00 0.00 0.00 0.00 0.00 4
kswapd0
08:38:05 0 93 0.00 0.00 0.00 0.00 0.00 4
kswapd0
08:38:06 0 93 0.00 1.00 0.00 1.00 1.00 0
kswapd0
08:38:07 0 93 0.00 0.00 0.00 0.00 0.00 0
kswapd0
08:38:08 0 93 0.00 0.00 0.00 0.00 0.00 0
kswapd0
08:38:09 0 93 0.00 1.00 0.00 0.00 1.00 1
kswapd0
08:38:10 0 93 0.00 0.00 0.00 0.00 0.00 1
kswapd0
08:38:11 0 93 0.00 0.00 0.00 0.00 0.00 1
kswapd0
08:38:12 0 93 0.00 0.00 0.00 0.00 0.00 1
kswapd0
08:38:13 0 93 0.00 0.00 0.00 0.00 0.00 1
kswapd0
08:38:14 0 93 0.00 0.00 0.00 0.00 0.00 1
kswapd0
08:38:15 0 93 0.00 3.00 0.00 0.00 3.00 0
kswapd0
08:38:16 0 93 0.00 0.00 0.00 0.00 0.00 0
kswapd0
08:38:17 0 93 0.00 0.00 0.00 0.00 0.00 0
kswapd0
08:38:18 0 93 0.00 0.00 0.00 0.00 0.00 0
kswapd0
08:38:19 0 93 0.00 0.00 0.00 0.00 0.00 0
kswapd0
08:38:20 0 93 0.00 0.00 0.00 0.00 0.00 0
kswapd0
08:38:21 0 93 0.00 0.00 0.00 0.00 0.00 0
kswapd0
08:38:22 0 93 0.00 0.00 0.00 0.00 0.00 0
kswapd0
08:38:23 0 93 0.00 3.00 0.00 0.00 3.00 4
kswapd0
08:38:24 0 93 0.00 0.00 0.00 0.00 0.00 4
kswapd0
08:38:25 0 93 0.00 0.00 0.00 0.00 0.00 4
kswapd0
08:38:26 0 93 0.00 4.00 0.00 0.00 4.00 3
kswapd0
08:38:27 0 93 0.00 0.00 0.00 0.00 0.00 3
kswapd0
08:38:28 0 93 0.00 0.00 0.00 0.00 0.00 3
kswapd0
08:38:29 0 93 0.00 0.00 0.00 0.00 0.00 3
kswapd0
08:38:30 0 93 0.00 0.00 0.00 0.00 0.00 3
kswapd0
08:38:31 0 93 0.00 0.00 0.00 0.00 0.00 3
kswapd0
08:38:32 0 93 0.00 0.00 0.00 0.00 0.00 3
kswapd0
08:38:33 0 93 0.00 0.00 0.00 0.00 0.00 3
kswapd0
[1] https://pastebin.com/u8eCBzB5
[2]
https://lore.kernel.org/all/20241220154831.1086649-10-ax...@kernel.dk/T/#m0dff9e4f79c95a75c6b2cf202bc9d3d6f4559723
Thanks,
Qi
[1]
https://lore.kernel.org/all/20241220154831.1086649-10-ax...@kernel.dk/T/#m58520a94b46f543d82db3711453dfc7bb594b2b0
Signed-off-by: Qi Han <ha...@vivo.com>
---
fs/f2fs/file.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c
index 696131e655ed..d8da1fc2febf 100644
--- a/fs/f2fs/file.c
+++ b/fs/f2fs/file.c
@@ -5425,5 +5425,5 @@ const struct file_operations f2fs_file_operations = {
.splice_read = f2fs_file_splice_read,
.splice_write = iter_file_splice_write,
.fadvise = f2fs_file_fadvise,
- .fop_flags = FOP_BUFFER_RASYNC,
+ .fop_flags = FOP_BUFFER_RASYNC | FOP_DONTCACHE,
};
_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel