From 21316466d211e9aee7b8ff90e1f63466a4d00428 Mon Sep 17 00:00:00 2001 From: mi Date: Thu, 12 Aug 2021 15:17:01 +0800 Subject: [PATCH] fs/littlefs: improve littlefs flash block erase balance performance --- fs/littlefs/Kconfig | 16 +++++++++++++++- fs/littlefs/lfs_vfs.c | 8 +++++--- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/fs/littlefs/Kconfig b/fs/littlefs/Kconfig index c5817393e3..bfdd3a89c8 100644 --- a/fs/littlefs/Kconfig +++ b/fs/littlefs/Kconfig @@ -3,4 +3,18 @@ config FS_LITTLEFS default n depends on !DISABLE_MOUNTPOINT ---help--- - Build the LITTLEFS file system. https://github.com/ARMmbed/littlefs. + Build the LITTLEFS file system. https://github.com/littlefs-project/littlefs. + +if FS_LITTLEFS +config FS_LITTLEFS_BLOCK_FACTOR + int "LITTLEFS Block size multiple factor" + default 4 + ---help--- + Configure the cache size of the LITTLEFS file system with a multiple factor of the block size. + +config FS_LITTLEFS_BLOCK_CYCLE + int "LITTLEFS Block Cycle" + default 200 + ---help--- + Configure the block cycle of the LITTLEFS file system. +endif diff --git a/fs/littlefs/lfs_vfs.c b/fs/littlefs/lfs_vfs.c index abc61297b4..66b666c969 100644 --- a/fs/littlefs/lfs_vfs.c +++ b/fs/littlefs/lfs_vfs.c @@ -1019,12 +1019,14 @@ static int littlefs_bind(FAR struct inode *driver, FAR const void *data, fs->cfg.prog = littlefs_write_block; fs->cfg.erase = littlefs_erase_block; fs->cfg.sync = littlefs_sync_block; - fs->cfg.read_size = fs->geo.blocksize; + fs->cfg.read_size = fs->geo.blocksize * + CONFIG_FS_LITTLEFS_BLOCK_FACTOR; fs->cfg.prog_size = fs->geo.blocksize; fs->cfg.block_size = fs->geo.erasesize; fs->cfg.block_count = fs->geo.neraseblocks; - fs->cfg.block_cycles = 500; - fs->cfg.cache_size = fs->geo.blocksize; + fs->cfg.block_cycles = CONFIG_FS_LITTLEFS_BLOCK_CYCLE; + fs->cfg.cache_size = fs->geo.blocksize * + CONFIG_FS_LITTLEFS_BLOCK_FACTOR; fs->cfg.lookahead_size = lfs_min(lfs_alignup(fs->cfg.block_count, 64) / 8, fs->cfg.read_size);