DoE: MU-WAIT-ALL waits with 100 WAIT instead of busy-spinning; stopped first relaunch kept

The first amd64 relaunch (stopped by Captain Bob after 1h41m) showed Hera's
busy wait taking an equal CPU share and writing 43% of all heartbeat rows.
100 WAIT charges her 100 beats of work heat per iteration while executing
almost nothing, so workers get the CPU. cfg-0 check: 115 s vs ~210 s,
fail=0, 2/2 dead.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Robert Allan James
2026-09-24 08:20:22 -04:00
co-authored by Claude Opus 5.5
parent dd23c3aa45
commit 00058e53a7
7 changed files with 394174 additions and 15 deletions
+18
View File
@@ -1371,3 +1371,21 @@ explicit instruction.
**FABRIC-3.8's staged plan (A–I) is complete.** What's next is the per-ISA DoE relaunch
(seed 12345, 3 reps) on the rebuilt driver, then the merge to master.
- [x] **DoE relaunch, first attempt, stopped (2026-09-24).** Launched `12345 3 S" amd64" DOE` at
06:31 (`logs/20260924-062703/amd64/`, kept). Captain Bob stopped it at 08:12 (*"STOP and
hold"*) after a progress check showed the busy-wait cost.
- 173k heartbeat rows at ~31 rows/s, ~100k switches, 0 faults. Trial 1 (cfg 3,
heterogeneous) was still running, so no trial had finished.
- **Hera had written 75,117 rows against its last worker `mu0`'s 75,114.** `MU-WAIT-ALL`'s
busy loop took an equal share of the CPU as workers finished, half of it when one was
left. That's 43% of all rows so far, measuring nothing, and it roughly doubles each
trial's tail.
- **Fix (Captain Bob: "apply the WAIT fix and relaunch amd64"):** `MU-WAIT-ALL`'s loop body
is now `100 WAIT`.
- `WAIT` is the existing ordinary word that counts n beats (`vm_tick()` n times), so each
iteration charges Hera 100 beats of work heat while executing almost nothing, and
writes no rows.
- The decision then favours the workers at her next checkpoint.
- No yield word; capsule-only change.
- **Check** (`logs/20260924-081340/amd64/`, own boot, images reset after): a cfg-0 trial ran
in **115 s against ~210 s before**, `fail=0`, 2/2 dead.