Storage engine: compaction, group commit
Six re-runs, same host and parameters: point reads to 412k/s, worst write latency 371 ms to 23 ms, memory at or below RocksDB's, group commit at 32 clients.
Run details
| Date | |
|---|---|
| Commit | 249f1ac (re-run), b00e98a (scan fix), de1c61b (CRC32C), 2f98517 (incremental compaction), b7ae8e7 (streamed output), 8260bf5 (group commit) |
| Host | sttiz, the same shared host and parameters as the 10 October run: 300k records, 4 MB memtable, 8 MB block cache, one client, fsync on every write, no compression. Dataset about 35 MB, which fits the OS page cache. |
| Tool | The key-value benchmark (crate uf-bench) with the RocksDB oracle run in the same process for each pair; ufd-load over the Unix socket for the group-commit run. |
| Raw results | docs/bench/results/2026-10-19-sttiz-indicative-table-bound.jsonldocs/bench/results/2026-10-19b-sttiz-indicative-scan-fix.jsonldocs/bench/results/2026-10-19c-sttiz-indicative-crc.jsonldocs/bench/results/2026-10-19d-sttiz-indicative-incremental-compaction.jsonldocs/bench/results/2026-10-19e-sttiz-indicative-streamed-output.jsonldocs/bench/results/2026-10-19f-sttiz-runtime-spike.jsonldocs/bench/results/2026-10-19g-sttiz-group-commit.jsonl |
| Report | docs/bench/2026-10-10-first-results.md (sections “Re-run 2026-10-19” onward) |
Indicative only. Measured on a shared development host with other services running, one node, data that fits in memory. These figures show direction, not performance to expect. The claims policy requires a dedicated host before any target is published.
The tables, as written
Transcribed from the report without rounding. Bracketed values are the previous measurement where the report gives one.
Re-run (commit 249f1ac), same host class and parameters; previous values in brackets
| YCSB | UltraFabric ops/s (was) | max latency (was) | RSS (was) | disk (was) | RocksDB ops/s |
|---|---|---|---|---|---|
| A | 2,543 (2,220) | 371 ms (532 ms) | 28 MB (72) | 34 MB (72) | 2,766 |
| B | 23,517 (19,274) | 1.8 ms | 24 MB (70) | 33 MB (68) | 26,276 |
| C | 169,197 (93,245) | 0.1 ms | 24 MB (70) | 33 MB (68) | 265,834 |
| E | 11,515 (17,937) regression | 1.6 ms | 24 MB | 33 MB | 22,378 |
| F | 2,607 (2,179) | 367 ms (493 ms) | 28 MB | 34 MB | 2,723 |
Scan fix (commit b00e98a), YCSB-E
| Engine | ops/s | p50 |
|---|---|---|
| UltraFabric | 18,854 (was 11,515) | 6.7 µs (was 48 µs) |
| RocksDB (same run) | 20,003 | 8.5 µs |
Slicing-by-8 CRC32C (commit de1c61b)
| YCSB | UltraFabric | RocksDB (same run) |
|---|---|---|
| C | 412,447 ops/s, p99 11.5 µs (was 167,377 / 38.7 µs) | 274,508 ops/s, p99 7.6 µs |
| E | 22,655 ops/s, p50 6.6 µs (was 18,854) | 21,927 ops/s |
Incremental compaction (commit 2f98517), all workloads
| YCSB | UltraFabric ops/s | p99 | max | RSS | disk | RocksDB ops/s | RocksDB max |
|---|---|---|---|---|---|---|---|
| A | 2,622 | 1.07 ms | 22.6 ms (was 371 ms) | 48 MB | 34 MB | 2,709 | 18.2 ms |
| B | 28,245 | 733 µs | 3.0 ms | 30 MB | 33 MB | 24,542 | 1.4 ms |
| C | 429,100 | 10.4 µs | 0.1 ms | 30 MB | 33 MB | 274,764 | 0.1 ms |
| E | 21,049 | 815 µs | 1.4 ms | 30 MB | 33 MB | 21,508 | 3.2 ms |
| F | 2,680 | 1.09 ms | 25.9 ms (was 367 ms) | 48 MB | 34 MB | 2,696 | 18.8 ms |
Streamed compaction output (commit b7ae8e7), write-heavy workloads
| Measure | UltraFabric | RocksDB (this run) |
|---|---|---|
| Write-heavy RSS | 32 MB (was 48 MB) | 26 MB |
| Worst-case write latency, A | 24.4 ms | 116.9 ms |
| Worst-case write latency, F | 20.6 ms | 9.2 ms |
Group commit through ufd (commit 8260bf5): durable single-key writes from N concurrent clients over the Unix socket
| Clients | Writes/s | p99 | Writes per fdatasync |
|---|---|---|---|
| 1 | 1,233 | 1.2 ms | 1.0 |
| 8 | 5,148 | 2.1 ms | 4.0 |
| 32 | 19,243 | 2.3 ms | 17.0 |
Operations per second after incremental compaction, log scale
Commit 2f98517, all five workloads, one client
Worst-case write latency, ms
Workloads A and F: before and after incremental compaction, and RocksDB in the same run
Group commit: durable writes per second by client count
ufd-load over the Unix socket, every write fsynced before acknowledgement
Before and during this run
- Re-run after the WAL rolls on flush, SST v2 with restart points and a raw-block cache, and streaming compaction.
- Scan fix (b00e98a): scans decode entry by entry from the cached raw block, seeking via restart points, after the raw-block cache caused a scan regression in the re-run.
- Slicing-by-8 CRC32C (de1c61b): every block read verifies a CRC-32C, and the byte-at-a-time implementation dominated cache-miss cost. The new one is safe code, tested against the bytewise reference.
- Incremental compaction (2f98517): compaction is a state machine (merge, chunked write, verify per output table) advanced by a bounded budget on each write, with backpressure at an L0 stop trigger.
- Streamed compaction output (b7ae8e7): finished blocks are written to the output file in 1 MiB chunks instead of buffering whole tables.
- Group commit through ufd (8260bf5): writes that queue up while one fdatasync is in flight go out together in the next one.
- A runtime I/O spike (pread vs io_uring, buffered vs direct) was also recorded that day in 2026-10-19f-sttiz-runtime-spike.jsonl; it has no report table and is listed only as a raw file.
What the numbers say
The report's own reading, including what went wrong and what is still open.
- After the re-run, memory and disk were at or below RocksDB's, point reads were up 81% (restart points) but still about 64% of RocksDB's, and the scan regression was traced to decoding each cached raw block in full.
- After the CRC change, point reads reached 412 447 ops/s, above RocksDB's 274 508 in the same run; p99 point-read latency stayed above RocksDB's.
- After incremental compaction the write stalls were gone: worst-case write latency came within about 25% of RocksDB's. RSS on write-heavy runs rose to 48 MB because a running job held one encoded output table in memory; streamed output brought it back to 32 MB (RocksDB 26 MB).
- Group commit: 15.6× the single-client rate at 32 clients, with every write still durable before it is acknowledged.
- Still a single client, a shared host and a small dataset: indicative only. Shared-host noise is large at the tail (RocksDB's own worst-case write varied from 9 ms to 117 ms between runs).
Files and tools
Report
docs/bench/2026-10-10-first-results.md (sections “Re-run 2026-10-19” onward) in the repository.
Raw results
docs/bench/results/2026-10-19-sttiz-indicative-table-bound.jsonldocs/bench/results/2026-10-19b-sttiz-indicative-scan-fix.jsonldocs/bench/results/2026-10-19c-sttiz-indicative-crc.jsonldocs/bench/results/2026-10-19d-sttiz-indicative-incremental-compaction.jsonldocs/bench/results/2026-10-19e-sttiz-indicative-streamed-output.jsonldocs/bench/results/2026-10-19f-sttiz-runtime-spike.jsonldocs/bench/results/2026-10-19g-sttiz-group-commit.jsonl
Access
The repository is private during development. Early-access teams receive the build, the benchmark scripts and the raw files.
See the measurements in context.
The performance page draws the latest figure from each area and states what is not measured yet.
