runtime: wake_slot default ON (RFC 005 accepted, finding 18); supervisor stops survivors sequentially so reverse-order teardown is guaranteed; deflake gen_server/channel tests; baseline.json regenerated slot-on; ROADMAP notes

This commit is contained in:
claude-asm-audit
2026-08-21 12:23:33 +00:00
parent 7001f04b65
commit ea2b222cff
6 changed files with 333 additions and 300 deletions
+14 -1
View File
@@ -28,6 +28,15 @@ and **excised** (not worth the code cost; preserved on branch
`rfc-004-spinning`). Also a false-sharing fix (`align(64)` on `SchedulerStats`)
and a termination wake for idle siblings.
Commits `2708042`, `37d9319`, `eddf3fe`.
**Default flipped ON 2026-08-18** (history.md findings 17/18): the slot had
shipped default-off "until the shootout accepts it" and the flip was never
made, so every general.rs number since was slot-off. Acceptance sweep
(rq_runtime, 1/2/4/8/20 schedulers, rq-mpmc, 7 runs): ping-pong-pairs
−7% at 1T, 3.6×/5.3×/15.6×/10× faster at 2/4/8/20T, 100% slot hits, 0
displaced; yield-storm and spawn-storm within ±10% noise both ways.
general.rs on the flip: ping_pong_steady 20T 18485→1549 µs, 1T −15%,
mpsc_contention 1T −51%, ping_pong_oneshot 20T −18%; no smarm regressions.
`benches/baseline.json` regenerated slot-on.
---
@@ -146,7 +155,11 @@ Needs an RFC.
#### Per-switch cost (context shims, epoch protocol)
The shootout's residual: per-wake latency is 0.16–0.18 µs at N=1 and
0.8–1.2 µs at N=8+, dominated by the context-switch shims and the epoch
protocol, not the queue. On current evidence this is the larger constant —
protocol, not the queue. **Premise corrected 2026-08-18 (finding 17): the
N=8+ figure was the slot-off futex path (one futex_wake per landed wake,
woken worker steals the pair); slot-on it is ~1.3× N=1. The shims are ~5
cycles (finding 3) and the epoch CASes ~117 cycles/roundtrip (finding 15).
Re-measure slot-on before spending anything here.** On current evidence this is the larger constant —
"the whole game" alongside the v0.9 work — but there is no spec yet. Needs a
profiling spike (where do the cycles actually go per park/unpark round-trip)
and then an RFC before it can be scheduled.