Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
subsys/fs/littlefs: allow customization of file system configuration
There's desire to be able to customize parameters on a per-filesystem basis, which means we need a way to override the Kconfig defaults which are global. This also means the littlefs data structure cannot own the cache and lookahead buffers. Switch to using a macro to define the littlefs data structure. The default version uses the Kconfig constants. A custom one takes arguments providing the most likely partition-specific parameters. Finally the user is free to bypass the helper macros and set any parameters desired, though validation is limited and only present when CONFIG_DEBUG is enabled. Extend the test suite with a performance module, which confirms that these settings have an impact proportional to the log of changes to the cache or IO sizes. Signed-off-by: Peter A. Bigot <pab@pabigot.com>
- Loading branch information
1 parent
a8b7a21
commit 167eb53
Showing
13 changed files
with
648 additions
and
122 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,95 @@ | ||
# | ||
# Copyright (c) 2019 Bolt Innovation Management, LLC | ||
# Copyright (c) 2019 Peter Bigot Consulting, LLC | ||
# | ||
# SPDX-License-Identifier: Apache-2.0 | ||
# | ||
|
||
menu "LittleFS Settings" | ||
visible if FILE_SYSTEM_LITTLEFS | ||
|
||
config FS_LITTLEFS_NUM_FILES | ||
int "Maximum number of opened files" | ||
default 4 | ||
help | ||
This is a global maximum across all mounted littlefs filesystems. | ||
|
||
config FS_LITTLEFS_NUM_DIRS | ||
int "Maximum number of opened directories" | ||
default 4 | ||
help | ||
This is a global maximum across all mounted littlefs filesystems. | ||
|
||
config FS_LITTLEFS_READ_SIZE | ||
int "Minimum size of a block read" | ||
default 16 | ||
help | ||
All read operations will be a multiple of this value. | ||
|
||
config FS_LITTLEFS_PROG_SIZE | ||
int "Minimum size of a block program" | ||
default 16 | ||
help | ||
All program operations will be a multiple of this value. | ||
|
||
config FS_LITTLEFS_CACHE_SIZE | ||
int "Size of block caches in bytes" | ||
default 64 | ||
help | ||
Each cache buffers a portion of a block in RAM. The littlefs | ||
needs a read cache, a program cache, and one additional cache | ||
per file. Larger caches can improve performance by storing | ||
more data and reducing the number of disk accesses. Must be a | ||
multiple of the read and program sizes of the underlying flash | ||
device, and a factor of the block size. | ||
|
||
config FS_LITTLEFS_LOOKAHEAD_SIZE | ||
int "Size of lookahead buffer in bytes" | ||
default 32 | ||
help | ||
A larger lookahead buffer increases the number of blocks found | ||
during an allocation pass. The lookahead buffer is stored as a | ||
compact bitmap, so each byte of RAM can track 8 blocks. Must | ||
be a multiple of 8. | ||
|
||
config FS_LITTLEFS_BLOCK_CYCLES | ||
int "Number of erase cycles before moving data to another block" | ||
default 512 | ||
help | ||
For dynamic wear leveling, the number of erase cycles before data | ||
is moved to another block. Set to a non-positive value to | ||
disable leveling. | ||
|
||
menuconfig FS_LITTLEFS_FC_MEM_POOL | ||
bool "Enable flexible file cache sizes for littlefs" | ||
help | ||
littlefs requires a per-file buffer to cache data. For | ||
applications that use the default configuration parameters a | ||
memory slab is reserved to support up to | ||
FS_LITTLE_FS_NUM_FILES blocks of FS_LITTLEFS_CACHE_SIZE bytes. | ||
|
||
When applications customize littlefs configurations and | ||
support different cache sizes for different partitions this | ||
preallocation is inadequate. | ||
|
||
Select this feature to enable a memory pool allocator for | ||
littlefs file caches. | ||
|
||
if FS_LITTLEFS_FC_MEM_POOL | ||
|
||
config FS_LITTLEFS_FC_MEM_POOL_MIN_SIZE | ||
int "Minimum block size for littlefs file cache memory pool" | ||
default 16 | ||
|
||
config FS_LITTLEFS_FC_MEM_POOL_MAX_SIZE | ||
int "Maximum block size for littlefs file cache memory pool" | ||
default 1024 | ||
|
||
config FS_LITTLEFS_FC_MEM_POOL_NUM_BLOCKS | ||
int "Number of maximum sized blocks in littlefs file cache memory pool" | ||
default 2 | ||
|
||
endif # FS_LITTLEFS_FC_MEM_POOL | ||
|
||
endmenu | ||
|
Oops, something went wrong.