You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: README.md
+33Lines changed: 33 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -83,6 +83,15 @@ Use the `run-libs.sh` script to compare different key-value store libraries:
83
83
The benchmark auto-scales based on available RAM and caps at 1 million entries.
84
84
Results are written to `target/benchmark-libs/`.
85
85
86
+
**File handle limit:** Benchmark mode requires at least 1 million file handles for RocksDB and LevelDB LSM operations:
87
+
88
+
```bash
89
+
ulimit -n 1000000
90
+
./run-libs.sh benchmark
91
+
```
92
+
93
+
The script will check and abort if the limit is too low.
94
+
86
95
**Resumption:** The script skips completed runs by checking for existing result files. For a fresh run, remove the output directory:
87
96
88
97
```bash
@@ -184,6 +193,30 @@ Reports are published to:
184
193
3. Review and edit commentary in report scripts if needed, then re-run
185
194
4. Publish: `./publish-results.sh` (run twice, once after each report generation)
186
195
196
+
### Performance Bisection
197
+
198
+
The `run-bisect.sh` script uses bisection to find the commit that introduced a performance regression:
199
+
200
+
```bash
201
+
./run-bisect.sh
202
+
```
203
+
204
+
Configure the bisection by editing variables at the top of the script:
205
+
-`START_COMMIT`: Known good commit (full hash)
206
+
-`END_COMMIT`: Known bad commit (full hash)
207
+
-`BENCHMARK_NAME`: Full benchmark qualifier (eg `LmdbJavaAgrona.write`)
208
+
-`MAX_BISECTIONS`: Maximum bisection iterations (default 10)
209
+
210
+
The script:
211
+
- Tests endpoint commits to confirm regression
212
+
- Bisects the commit range at 50% intervals
213
+
- Uses distance-based decision making (closer to good or bad endpoint)
214
+
- Uses the system LMDB library (`/usr/lib/liblmdb.so`) for all tests
215
+
- Caches built JARs and benchmark results to avoid rebuilding
216
+
- Generates a summary report with an asterisk marking the regression commit
217
+
218
+
Results are saved in `bisect/results/` with a chronologically-sorted summary report showing scores and percentage changes. To re-run with fresh benchmarks, delete `bisect/results/*.json`.
0 commit comments