f198c855f6
These locally show the expected O(d(n)) growth of the block_size search when block_count is known. A rough estimate of runtime for a 1 GiB device with a 90 MiB/s read bandwidth (using the mt25q for rough numbers): known bs/bc => ~1.44 us known block_size => ~1.44 us known block_count => ~125 us unknown bs/bc => ~376 ms
85 lines
1.8 KiB
TOML
85 lines
1.8 KiB
TOML
[cases.bench_superblocks_format]
|
|
code = '''
|
|
lfs_t lfs;
|
|
|
|
BENCH_START();
|
|
lfs_format(&lfs, cfg) => 0;
|
|
BENCH_STOP();
|
|
'''
|
|
|
|
[cases.bench_superblocks_mount]
|
|
defines.KNOWN_BLOCK_SIZE = [true, false]
|
|
defines.KNOWN_BLOCK_COUNT = [true, false]
|
|
# support benchmarking with files
|
|
defines.N = [0, 1024]
|
|
defines.FILE_SIZE = 8
|
|
defines.CHUNK_SIZE = 8
|
|
code = '''
|
|
lfs_t lfs;
|
|
lfs_format(&lfs, cfg) => 0;
|
|
|
|
// create files?
|
|
lfs_mount(&lfs, cfg) => 0;
|
|
char name[256];
|
|
uint8_t buffer[CHUNK_SIZE];
|
|
for (lfs_size_t i = 0; i < N; i++) {
|
|
sprintf(name, "file%08x", i);
|
|
lfs_file_t file;
|
|
lfs_file_open(&lfs, &file, name,
|
|
LFS_O_WRONLY | LFS_O_CREAT | LFS_O_EXCL) => 0;
|
|
|
|
for (lfs_size_t j = 0; j < FILE_SIZE; j += CHUNK_SIZE) {
|
|
for (lfs_size_t k = 0; k < CHUNK_SIZE; k++) {
|
|
buffer[k] = i+j+k;
|
|
}
|
|
lfs_file_write(&lfs, &file, buffer, CHUNK_SIZE) => CHUNK_SIZE;
|
|
}
|
|
|
|
lfs_file_close(&lfs, &file) => 0;
|
|
}
|
|
lfs_unmount(&lfs) => 0;
|
|
|
|
if (KNOWN_BLOCK_SIZE) {
|
|
cfg->block_size = BLOCK_SIZE;
|
|
} else {
|
|
cfg->block_size = 0;
|
|
}
|
|
|
|
if (KNOWN_BLOCK_COUNT) {
|
|
cfg->block_count = BLOCK_COUNT;
|
|
} else {
|
|
cfg->block_count = 0;
|
|
}
|
|
|
|
BENCH_START();
|
|
lfs_mount(&lfs, cfg) => 0;
|
|
BENCH_STOP();
|
|
|
|
lfs_unmount(&lfs) => 0;
|
|
'''
|
|
|
|
[cases.bench_superblocks_mount_missing]
|
|
defines.KNOWN_BLOCK_SIZE = [true, false]
|
|
defines.KNOWN_BLOCK_COUNT = [true, false]
|
|
code = '''
|
|
lfs_t lfs;
|
|
|
|
if (KNOWN_BLOCK_SIZE) {
|
|
cfg->block_size = BLOCK_SIZE;
|
|
} else {
|
|
cfg->block_size = 0;
|
|
}
|
|
|
|
if (KNOWN_BLOCK_COUNT) {
|
|
cfg->block_count = BLOCK_COUNT;
|
|
} else {
|
|
cfg->block_count = 0;
|
|
}
|
|
|
|
BENCH_START();
|
|
int err = lfs_mount(&lfs, cfg);
|
|
assert(err != 0);
|
|
BENCH_STOP();
|
|
'''
|
|
|