在 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

Reply via email to