]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
f2fs: export migration_granularity sysfs entry
authorChao Yu <yuchao0@huawei.com>
Thu, 25 Oct 2018 08:19:28 +0000 (16:19 +0800)
committerJaegeuk Kim <jaegeuk@kernel.org>
Mon, 26 Nov 2018 23:53:56 +0000 (15:53 -0800)
Add one sysfs entry to control migration granularity of GC in large
section f2fs, it can be tuned to mitigate heavy overhead of migrating
huge number of blocks in large section.

Signed-off-by: Chao Yu <yuchao0@huawei.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
Documentation/ABI/testing/sysfs-fs-f2fs
fs/f2fs/sysfs.c

index 3ac41774ad3cf5730e76d5c5c3595ef1efa8a267..a7ce331994578451759aebd8a080bc38085d1093 100644 (file)
@@ -92,6 +92,15 @@ Contact:     "Jaegeuk Kim" <jaegeuk.kim@samsung.com>
 Description:
                 Controls the number of trials to find a victim segment.
 
+What:          /sys/fs/f2fs/<disk>/migration_granularity
+Date:          October 2018
+Contact:       "Chao Yu" <yuchao0@huawei.com>
+Description:
+                Controls migration granularity of garbage collection on large
+                section, it can let GC move partial segment{s} of one section
+                in one GC cycle, so that dispersing heavy overhead GC to
+                multiple lightweight one.
+
 What:          /sys/fs/f2fs/<disk>/dir_level
 Date:          March 2014
 Contact:       "Jaegeuk Kim" <jaegeuk.kim@samsung.com>
index 240e4881279e4f5a0773391dbf53fd95bf109a8c..0575edbe3ed6d23de59ba916c0efd262014b1551 100644 (file)
@@ -246,6 +246,11 @@ static ssize_t __sbi_store(struct f2fs_attr *a,
                return count;
        }
 
+       if (!strcmp(a->attr.name, "migration_granularity")) {
+               if (t == 0 || t > sbi->segs_per_sec)
+                       return -EINVAL;
+       }
+
        if (!strcmp(a->attr.name, "trim_sections"))
                return -EINVAL;
 
@@ -406,6 +411,7 @@ F2FS_RW_ATTR(NM_INFO, f2fs_nm_info, ram_thresh, ram_thresh);
 F2FS_RW_ATTR(NM_INFO, f2fs_nm_info, ra_nid_pages, ra_nid_pages);
 F2FS_RW_ATTR(NM_INFO, f2fs_nm_info, dirty_nats_ratio, dirty_nats_ratio);
 F2FS_RW_ATTR(F2FS_SBI, f2fs_sb_info, max_victim_search, max_victim_search);
+F2FS_RW_ATTR(F2FS_SBI, f2fs_sb_info, migration_granularity, migration_granularity);
 F2FS_RW_ATTR(F2FS_SBI, f2fs_sb_info, dir_level, dir_level);
 F2FS_RW_ATTR(F2FS_SBI, f2fs_sb_info, cp_interval, interval_time[CP_TIME]);
 F2FS_RW_ATTR(F2FS_SBI, f2fs_sb_info, idle_interval, interval_time[REQ_TIME]);
@@ -460,6 +466,7 @@ static struct attribute *f2fs_attrs[] = {
        ATTR_LIST(min_hot_blocks),
        ATTR_LIST(min_ssr_sections),
        ATTR_LIST(max_victim_search),
+       ATTR_LIST(migration_granularity),
        ATTR_LIST(dir_level),
        ATTR_LIST(ram_thresh),
        ATTR_LIST(ra_nid_pages),