OSDN Git Service

f2fs: add auto tuning for small devices
authorJaegeuk Kim <jaegeuk@kernel.org>
Thu, 22 Feb 2018 22:09:30 +0000 (14:09 -0800)
committerJaegeuk Kim <jaegeuk@kernel.org>
Mon, 12 Mar 2018 23:05:51 +0000 (08:05 +0900)
If f2fs is running on top of very small devices, it's worth to avoid abusing
free LBAs. In order to achieve that, this patch introduces some parameter
tuning.

Reviewed-by: Chao Yu <yuchao0@huawei.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
fs/f2fs/segment.h
fs/f2fs/super.c

index f11c4bc..dbb774a 100644 (file)
@@ -596,6 +596,8 @@ static inline int utilization(struct f2fs_sb_info *sbi)
 #define DEF_MIN_FSYNC_BLOCKS   8
 #define DEF_MIN_HOT_BLOCKS     16
 
+#define SMALL_VOLUME_SEGMENTS  (16 * 512)      /* 16GB */
+
 enum {
        F2FS_IPU_FORCE,
        F2FS_IPU_SSR,
index 16d157e..9b6c53b 100644 (file)
@@ -2515,6 +2515,18 @@ static int f2fs_scan_devices(struct f2fs_sb_info *sbi)
        return 0;
 }
 
+static void f2fs_tuning_parameters(struct f2fs_sb_info *sbi)
+{
+       struct f2fs_sm_info *sm_i = SM_I(sbi);
+
+       /* adjust parameters according to the volume size */
+       if (sm_i->main_segments <= SMALL_VOLUME_SEGMENTS) {
+               sbi->alloc_mode = ALLOC_MODE_REUSE;
+               sm_i->dcc_info->discard_granularity = 1;
+               sm_i->ipu_policy = 1 << F2FS_IPU_FORCE;
+       }
+}
+
 static int f2fs_fill_super(struct super_block *sb, void *data, int silent)
 {
        struct f2fs_sb_info *sbi;
@@ -2867,6 +2879,8 @@ skip_recovery:
 
        f2fs_join_shrinker(sbi);
 
+       f2fs_tuning_parameters(sbi);
+
        f2fs_msg(sbi->sb, KERN_NOTICE, "Mounted with checkpoint version = %llx",
                                cur_cp_version(F2FS_CKPT(sbi)));
        f2fs_update_time(sbi, CP_TIME);