From bf00c4d427cf38247423cab6535dec5e619e9805 Mon Sep 17 00:00:00 2001 From: Christopher Haster Date: Thu, 15 May 2025 17:18:51 -0500 Subject: [PATCH] Limited FRAGMENT_SIZE to 512 bytes in the test/bench runners This prevents runaway O(n^2) behavior on devices with extremely large block sizes (NAND, bs=~128KiB - ~1MiB). The whole point of shrubs is to avoid this O(n^2) runaway when inline files become necessarily large. Setting FRAGMENT_SIZE to a factor of the BLOCK_SIZE humorously defeats this. The 512 byte cutoff is somewhat arbitrary, it's the natural BLOCK_SIZE/8 FRAGMENT_SIZE on most NOR flash (bs=4096), but it's probably worth tuning based on actual device performance. --- runners/bench_runner.h | 2 +- runners/test_runner.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/runners/bench_runner.h b/runners/bench_runner.h index de3af28d..37944c2b 100644 --- a/runners/bench_runner.h +++ b/runners/bench_runner.h @@ -118,7 +118,7 @@ void bench_permutation(size_t i, uint32_t *buffer, size_t size); BENCH_DEFINE(GC_STEPS, 0 ) \ BENCH_DEFINE(GC_COMPACT_THRESH, 0 ) \ BENCH_DEFINE(INLINE_SIZE, BLOCK_SIZE/4 ) \ - BENCH_DEFINE(FRAGMENT_SIZE, BLOCK_SIZE/8 ) \ + BENCH_DEFINE(FRAGMENT_SIZE, LFS_MIN(BLOCK_SIZE/8, 512) ) \ BENCH_DEFINE(CRYSTAL_THRESH, BLOCK_SIZE/8 ) \ BENCH_DEFINE(FRAGMENT_THRESH, -1 ) \ BENCH_DEFINE(ERASE_VALUE, 0xff ) \ diff --git a/runners/test_runner.h b/runners/test_runner.h index 2efeb6a8..4054043c 100644 --- a/runners/test_runner.h +++ b/runners/test_runner.h @@ -109,7 +109,7 @@ void test_permutation(size_t i, uint32_t *buffer, size_t size); TEST_DEFINE(GC_STEPS, 0 ) \ TEST_DEFINE(GC_COMPACT_THRESH, 0 ) \ TEST_DEFINE(INLINE_SIZE, BLOCK_SIZE/4 ) \ - TEST_DEFINE(FRAGMENT_SIZE, BLOCK_SIZE/8 ) \ + TEST_DEFINE(FRAGMENT_SIZE, LFS_MIN(BLOCK_SIZE/8, 512) ) \ TEST_DEFINE(CRYSTAL_THRESH, BLOCK_SIZE/8 ) \ TEST_DEFINE(FRAGMENT_THRESH, -1 ) \ TEST_DEFINE(ERASE_VALUE, 0xff ) \