While testing Zoned UFS, I discovered that the background GC results in
excessive write operations. I wrote a script to capture the data, as shown
below:

Timestamp        Free_Sections        BG_GC_Calls        Dirty_Segment
2025/9/8 19:04   433                  0                  935  <-- begin
...
2025/9/8 20:17   224                  14533              27734  <-- stop
...
2025/9/8 22:07   244                  78722              728
2025/9/8 22:07   243                  78968              755
2025/9/8 22:08   243                  79201              706
...
2025/9/9 9:46    244                  273763             797
2025/9/9 9:47    244                  273930             791
2025/9/9 9:47    244                  274097             796
2025/9/9 9:48    243                  274265             791

Currently, in Zoned UFS, when free space is between 25% and 60%, background
GC is triggered without boosting. If the free space does not recover to
more than 60%, the background GC does not stop. This leads to excessive
redundant GC writes, as there are not enough dirty segments to release. I
suggest adding a has_enough_dirty_blocks() function to determine if there
are enough dirty segments that can be freed. If there aren't enough dirty
segments available, the background GC should be halted. After applying this
patch, the captured data is as follows:

Timestamp        Free_Sections        BG_GC_Calls        Dirty_Segment
2025/9/9 12:04   444                  0                  529  <-- begin
...
2025/9/9 16:54   227                  14339              29854  <-- stop
...
2025/9/9 20:31   242                  55842              1583
2025/9/9 20:32   242                  55842              1583
2025/9/9 20:32   242                  55842              1584
2025/9/9 20:33   242                  55842              1585
2025/9/9 20:34   242                  55843              1583
2025/9/9 20:34   242                  55843              1583
2025/9/9 20:35   242                  55843              1583
2025/9/9 20:35   242                  55843              1583
2025/9/9 20:36   242                  55843              1584

This patch currently only optimizes background GC. Similar issues seem to
be present for foreground GC, requiring further investigation.

Additionally, I implemented a modification to the valid_thresh_ratio to
prevent the execution of background GC when the proportion of dirty
segments in all sections within the range exceeds the valid_thresh_ratio.
This also helps to avoid unnecessary excessive write operations.

Liao Yuanhong (2):
  f2fs: Optimize excessive write operations caused by continuous
    background garbage collection in Zoned UFS
  f2fs: Enhance the subsequent logic of valid_thresh_ratio to prevent
    unnecessary background GC

 fs/f2fs/gc.c | 13 +++++++++++--
 fs/f2fs/gc.h |  9 ++++++++-
 2 files changed, 19 insertions(+), 3 deletions(-)

-- 
2.34.1



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

Reply via email to