diff options
author | Jaegeuk Kim <jaegeuk@kernel.org> | 2015-09-25 09:31:04 -0700 |
---|---|---|
committer | Dan Pasanen <dan.pasanen@gmail.com> | 2015-11-12 09:37:26 -0600 |
commit | ee5c82f49d49308bb17423ab170792cd3c302c8e (patch) | |
tree | 9b23131a2c0b07e763a421e9df35749b2aabd151 | |
parent | 1818815c8f606dcd13c6f31a2f45c0e8bc2c807b (diff) | |
download | android_external_f2fs-tools-ee5c82f49d49308bb17423ab170792cd3c302c8e.tar.gz android_external_f2fs-tools-ee5c82f49d49308bb17423ab170792cd3c302c8e.tar.bz2 android_external_f2fs-tools-ee5c82f49d49308bb17423ab170792cd3c302c8e.zip |
mkfs.f2fs: support <1% overprovision ratio
Big partition size needs uner 1% overprovision space to acquire more space.
section ovp ratio ovp size
For 8TB,
-s1 : 0.07% -> 10GB
-s32 : 0.39% -> 65GB
-s64 : 0.55% -> 92GB
-s128 : 0.78% -> 132GB
For 128GB,
-s1 : 0.55% -> 1.4GB
-s32 : 3.14% -> 8GB
-s64 : 4.45% -> 12GB
-s128 : 6.32% -> 17GB
Change-Id: I9d160f92af23dd262b039feca7eb03c91a5ded91
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
-rw-r--r-- | include/f2fs_fs.h | 2 | ||||
-rw-r--r-- | mkfs/f2fs_format.c | 12 | ||||
-rw-r--r-- | mkfs/f2fs_format_main.c | 2 |
3 files changed, 8 insertions, 8 deletions
diff --git a/include/f2fs_fs.h b/include/f2fs_fs.h index 1502bf2..4164af3 100644 --- a/include/f2fs_fs.h +++ b/include/f2fs_fs.h @@ -249,7 +249,7 @@ enum f2fs_config_func { struct f2fs_configuration { u_int32_t sector_size; u_int32_t reserved_segments; - u_int32_t overprovision; + double overprovision; u_int32_t cur_seg[6]; u_int32_t segs_per_sec; u_int32_t secs_per_zone; diff --git a/mkfs/f2fs_format.c b/mkfs/f2fs_format.c index 2d4ab09..176bdea 100644 --- a/mkfs/f2fs_format.c +++ b/mkfs/f2fs_format.c @@ -155,19 +155,19 @@ static void configure_extension_list(void) free(config.extension_list); } -static u_int32_t get_best_overprovision(void) +static double get_best_overprovision(void) { - u_int32_t reserved, ovp, candidate, end, diff, space; - u_int32_t max_ovp = 0, max_space = 0; + double reserved, ovp, candidate, end, diff, space; + double max_ovp = 0, max_space = 0; if (get_sb(segment_count_main) < 256) { candidate = 10; end = 95; diff = 5; } else { - candidate = 1; + candidate = 0.01; end = 10; - diff = 1; + diff = 0.01; } for (; candidate <= end; candidate += diff) { @@ -533,7 +533,7 @@ static int f2fs_write_check_point_pack(void) set_cp(overprov_segment_count, get_cp(overprov_segment_count) + get_cp(rsvd_segment_count)); - MSG(0, "Info: Overprovision ratio = %u%%\n", config.overprovision); + MSG(0, "Info: Overprovision ratio = %.3lf%%\n", config.overprovision); MSG(0, "Info: Overprovision segments = %u (GC reserved = %u)\n", get_cp(overprov_segment_count), config.reserved_segments); diff --git a/mkfs/f2fs_format_main.c b/mkfs/f2fs_format_main.c index dbd83bd..5d10639 100644 --- a/mkfs/f2fs_format_main.c +++ b/mkfs/f2fs_format_main.c @@ -101,7 +101,7 @@ static void f2fs_parse_options(int argc, char *argv[]) config.vol_label = optarg; break; case 'o': - config.overprovision = atoi(optarg); + config.overprovision = atof(optarg); break; case 'O': parse_feature(strdup(optarg)); |