Found while checking on the #1947 phase-2 sweep. Two coupled problems, one live incident and one that affects how a benchmark gets published.
1. #2582 has recurred
hp-llm-worker is unhealthy with FailingStreak=3 and has been unable to get
qwen3:14b resident for about eleven hours:
69 x msg="Load failed" model=<qwen3:14b blob> error="timed out waiting for llama-server to start: context canceled"
first 2026-09-05T04:04:50Z last 2026-09-05T14:47:49Z
ghidra-ollama-1 runs OLLAMA_MAX_LOADED_MODELS=1, and the #1947 sweep has the
slot — currently GLM-4.6-REAP-218B-A32B:i1-IQ1_S at 57 GB served, 65%/35%
CPU/GPU. Every ~4 minutes the worker asks for a different model, cannot get it,
and gives up.
This is #2582 (llm-worker permanently unhealthy: shared ollama is saturated by the ghidra/revdeck eval zoo) reproducing exactly. It closed 2026-08-28.
Mitigated now by stopping hp-llm-worker for the duration of the sweep. It
was producing nothing — eleven hours of consecutive load failures — so stopping
it loses no capability and removes the contention. RestartPolicy=unless-stopped
respects the manual stop, and the autoheal: true label only acts on running
unhealthy containers, so it will stay down until deliberately restarted.
ghidra-revdeck-1 was checked and is idle (healthz only); it was left running.
2. The harder half: phase 2 is not running the cold-slot protocol
sweep_extra.sh does ollama stop "$TAG" before each run, and nothing else. The
cold protocol that #2641 established — and that the whole part-4 re-measurement
rests on — additionally requires hp-llm-worker and ghidra-revdeck-1 stopped
so nothing else touches the GPU. Phase 2 has been running without that.
The contention is not theoretical. From ghidra-ollama-1's own access log:
14:47:46 | 200 | 3m57s | 172.16.38.1 | POST /v1/chat/completions <- the benchmark
14:47:49 | 499 | 3m46s | 172.16.3.4 | POST /api/chat <- hp-llm-worker, cancelled
14:47:59 | 500 | 1m39s | 172.16.3.4 | POST /api/chat <- hp-llm-worker, failed
Benchmark requests and worker requests are interleaved on the same single slot.
Why this matters for the matrix
#2642/#2644/#2646 established that a warm or contended slot does not
reproduce while a cold one does: qwen3:14b measured 60/61 warm with 1 of 14
answers byte-identical, and 60/60 cold with 14 of 14. The #1805-c survey had to
be demoted to a survey for exactly this reason, and its uniform ±0 turned out
to be lane contention masquerading as determinism.
Phase 2 has 12 escalations (cells where run1 != run2 and the sweep went to
N=3), against phase 4's cold cells which were ±0 across three runs on four
architectures. That is consistent with contention — though for the
GLM-4.6-REAP-218B rows specifically, 65% CPU offload is an alternative
explanation (float reduction order across threads), so this should not be stated
as proven.
The decision this forces
36 of 52 phase-2 models are already measured under contention. Stopping the
worker now makes the remainder cold, which means phase 2 would span two
regimes. Options, none free:
Recommendation: decide before the sweep finishes, because C gets cheaper the
earlier it is chosen and the 12 escalations are the only direct evidence either
way. Whatever is chosen, sweep_extra.sh should gain the worker-stop step so
this cannot recur silently — it is the one part of the cold protocol the script
does not implement.
Scope
Refs #1947, #2582, #2641, #2642, #2646, #2644
Found while checking on the #1947 phase-2 sweep. Two coupled problems, one live incident and one that affects how a benchmark gets published.
1. #2582 has recurred
hp-llm-workeris unhealthy withFailingStreak=3and has been unable to getqwen3:14bresident for about eleven hours:ghidra-ollama-1runsOLLAMA_MAX_LOADED_MODELS=1, and the #1947 sweep has theslot — currently
GLM-4.6-REAP-218B-A32B:i1-IQ1_Sat 57 GB served, 65%/35%CPU/GPU. Every ~4 minutes the worker asks for a different model, cannot get it,
and gives up.
This is #2582 (
llm-worker permanently unhealthy: shared ollama is saturated by the ghidra/revdeck eval zoo) reproducing exactly. It closed 2026-08-28.Mitigated now by stopping
hp-llm-workerfor the duration of the sweep. Itwas producing nothing — eleven hours of consecutive load failures — so stopping
it loses no capability and removes the contention.
RestartPolicy=unless-stoppedrespects the manual stop, and the
autoheal: truelabel only acts on runningunhealthy containers, so it will stay down until deliberately restarted.
ghidra-revdeck-1was checked and is idle (healthz only); it was left running.2. The harder half: phase 2 is not running the cold-slot protocol
sweep_extra.shdoesollama stop "$TAG"before each run, and nothing else. Thecold protocol that #2641 established — and that the whole part-4 re-measurement
rests on — additionally requires
hp-llm-workerandghidra-revdeck-1stoppedso nothing else touches the GPU. Phase 2 has been running without that.
The contention is not theoretical. From
ghidra-ollama-1's own access log:Benchmark requests and worker requests are interleaved on the same single slot.
Why this matters for the matrix
#2642/#2644/#2646 established that a warm or contended slot does not
reproduce while a cold one does:
qwen3:14bmeasured 60/61 warm with 1 of 14answers byte-identical, and 60/60 cold with 14 of 14. The #1805-c survey had to
be demoted to a survey for exactly this reason, and its uniform
±0turned outto be lane contention masquerading as determinism.
Phase 2 has 12 escalations (cells where run1 != run2 and the sweep went to
N=3), against phase 4's cold cells which were
±0across three runs on fourarchitectures. That is consistent with contention — though for the
GLM-4.6-REAP-218Brows specifically, 65% CPU offload is an alternativeexplanation (float reduction order across threads), so this should not be stated
as proven.
The decision this forces
36 of 52 phase-2 models are already measured under contention. Stopping the
worker now makes the remainder cold, which means phase 2 would span two
regimes. Options, none free:
comparable to phase 4's cold cells. Cheapest, and honest, but it reproduces the
Benchmark fidelity: run real Ghidra over the #159 corpus so models are scored on production-shaped input #1805-c outcome the epic exists to avoid.
clearly separated blocks. Accurate but awkward to read and to compare.
Recommendation: decide before the sweep finishes, because C gets cheaper the
earlier it is chosen and the 12 escalations are the only direct evidence either
way. Whatever is chosen,
sweep_extra.shshould gain the worker-stop step sothis cannot recur silently — it is the one part of the cold protocol the script
does not implement.
Scope
sweep_extra.sh(committed copy atanalysis/ghidra/benchmarks/corpus/sweep_extra.sh), so the cold protocol isenforced by the driver rather than by an operator remembering.
hp-llm-workerwhen the sweep ends, and give llm-worker permanently unhealthy: shared ollama is saturated by the ghidra/revdeck eval zoo (qwen3:14b can't stay resident) #2582 a regressionguard so an eleven-hour unhealthy streak surfaces on its own rather than
being found by someone looking at something else.
OLLAMA_MAX_LOADED_MODELS=1plus a shared slot is theright shape at all while a multi-day benchmark is scheduled.
Refs #1947, #2582, #2641, #2642, #2646, #2644