Benchmark Results

Version: 4.0.1
Last updated: 2026-09-28 21:15 UTC
Averaged over: 5 CI run(s) per deadline
Server config: shard_count=4, batch_size=64

CI numbers, not a baseline. These come from a shared 2-vCPU runner. The same version's rows in history.md span ~1.45x on RPS and ~2x on p99 with no code change between them, so a ~10% move here is noise, not signal. Compare like-for-like on one machine before drawing a conclusion — see environments.md for which comparisons are valid.

Throughput — deadline comparison

ScenarioRPS (1ms)±σ (1ms)RPS (2ms)±σ (2ms)d1ms/d2ms
single_thread_buffered12,720±8412,210±1921.04×
single_thread_sync3,356±953,130±3831.07×
thundering_herd_8_threads12,159±25111,725±3201.04×
thundering_herd_32_threads37,009±97136,827±4851.00×
thundering_herd_64_threads51,334±94847,471±9,5431.08×
connection_churn7,000±1157,358±1900.95×
fire_and_forget_overload4,130±2104,044±2471.02×

Latency — single thread, batch_deadline_ms=1

MetricDurableDurable (batched)Buffered
Min225 µs224 µs50 µs
Mean300 µs292 µs77 µs
σ151 µs124 µs18 µs
p50279 µs279 µs76 µs
p75297 µs295 µs84 µs
p95373 µs345 µs96 µs
p99698 µs482 µs106 µs
p99.92.7 ms2.5 ms208 µs
Max3.6 ms3.1 ms669 µs

Latency — single thread, batch_deadline_ms=2

MetricDurableDurable (batched)Buffered
Min234 µs229 µs49 µs
Mean302 µs296 µs80 µs
σ151 µs127 µs15 µs
p50284 µs283 µs80 µs
p75302 µs297 µs87 µs
p95364 µs348 µs96 µs
p99566 µs493 µs108 µs
p99.93.0 ms2.7 ms211 µs
Max4.2 ms3.4 ms567 µs

Saturation Ramp — Buffered tier

Server started with max_connections = 48. Levels above 48 threads trigger connection-cap exhaustion; the server must survive every level.

ThreadsRPS (d1ms)RPS (d2ms)I/O dropsStatus
853,91454,0300ok
1671,32572,5410ok
3288,32088,7190ok
4895,20395,0650ok
6495,65893,15316SATURATED ←
9689,36095,85548SATURATED

Saturation Ramp — Sync tier

Server started with max_connections = 48. Uses Sync durability to stress the group-fsync path under escalating concurrency.

ThreadsRPS (d1ms)RPS (d2ms)I/O dropsStatus
813,43413,4460ok
1619,89521,9650ok
3236,73437,9620ok
4849,33149,4250ok
6449,25349,38716SATURATED ←
9648,76949,52848SATURATED

Generated by deploy/avg_benchmarks.py