Status: Phase 2 baseline (Track 12) — method-aware
Re-run locally; quote median / min, not a single sample.
What we measure
Among N mounted Argus text nodes:
| Path | Work |
|---|---|
| Granular | Warmup ×5, then UPDATE one node ×100 → median / min ms. Assert region Δ == 100. |
| Full rebuild | CLEAR + recreate N + PAINT ×20 → median / min ms. |
Program: examples/build/reactive_benchmark.luke
Harness: RESET THE BENCH / RECORD BENCH SAMPLE / THE BENCH MEDIAN / THE BENCH MIN
Production fixes behind these numbers
- O(1) id lookup — Argus
id → nodeopen-addressed hash (mount was O(N²) via linearargus_find+strlen). - Stable arena growth — bump allocator chains blocks instead of
realloc(old pointers stay valid; default start remains 1 MiB). - Owned ids — node id/parent strings are malloc-backed and freed on
CLEAR(notchar id[64]in the node).
Baseline (native Build, this host)
| Nodes | build_ms | granular median (min) | full median (min) | region Δ |
|---|---|---|---|---|
| 1 000 | ~0.3 | ~0.001 (~0.001) | ~0.14 (~0.14) | 100 |
| 10 000 | ~2.7 | ~0.009 (~0.008) | ~1.6 (~1.6) | 100 |
Headline: one-cell updates stay ~µs; mount/rebuild is ~linear after the index fix (10K build ~3 ms, not ~370 ms).
Reference app
examples/build/dashboard_{server,client}.luke — live /reqs on Path A flex; each poll prints region=1.
Re-run
cd vm./build/luke BUILD ../examples/build/reactive_benchmark.luke -o build/reactive_benchmark./build/reactive_benchmark
Also covered by make test (benchmark_ok=1, region=100, sample counts).
Pressure suite (100K / concurrent)
Separate from the CI lap:
cd vm && make pressure
| Probe | Load | Result (this host) |
|---|---|---|
| Reactive granular | 100 000 nodes, 50 updates | median ~0.35 ms, region Δ == 50 |
| Reactive mount | 100 000 nodes | build ~38 ms; full rebuild median ~21 ms |
| Frontend mount | 2 500 boxes | ~0.7 ms |
| Concurrent HTTP | 32× /fast + 8× /slow overlapping |
all replies correct |
Programs: examples/build/reactive_pressure.luke, frontend_pressure.luke, concurrent_pressure.luke.