You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Ledger (78): this node's intra-node MPI wait degraded 4.4x during the session -- it explains the drift, the unusable step column and probably the np16 hang, and the wait-free gather column was immune
Copy file name to clipboardExpand all lines: docs/documentation/amr_action_plan.md
+51Lines changed: 51 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -226,6 +226,57 @@ possible while AMR aborts on the target machine at 1 rank, and every increment b
226
226
on a compiler that does not reproduce it. It also means the ladder should add a CCE arm as soon as one
227
227
exists, or the same class of breakage will keep accumulating undetected.
228
228
229
+
## 2026-09-05 (78) — THE NODE'S INTRA-NODE MPI WAIT DEGRADED 4.4x DURING THE SESSION: it explains the "drift", the unusable step column, and probably the np=16 hang -- and the gather column was immune
230
+
231
+
Four things went wrong after the fused-pack merge, and they turn out to be one thing.
232
+
233
+
**The measurement.** Same pinned binary, same deck, same node (k004-002), same flag-OFF arm, differenced steady
234
+
window, with **identical call counts throughout** (`regrid` 0.05/step, `rb:gath` 11.55/step):
235
+
236
+
| flag-OFF arm, in time order |`w:regrid`|`regrid` phase |`w:TOTAL`|
`coarse`, `seam`, `swap` all flat. Same calls, same bytes, same answers -- the ranks simply wait 4.4x longer. At np=8
245
+
this is intra-node, so it is not the cross-node fabric that killed k004-004/005. No competing SLURM job ran on the
246
+
node at any point (checked live), and `GPU_LOCK` was held throughout.
247
+
248
+
**What it explains.** (i) Ledger 76's "this node drifts 9.6 percent" -- that was the early, mild phase of this.
249
+
(ii) Ledger 77's whole-step relative sd of 9.4-17.5 percent -- not random noise but a monotone slide.
250
+
(iii) The np=16 hang of job 405909, where ranks spun at 100 percent CPU in MPI progress with every GPU idle: the same
251
+
degradation an order worse and cross-node. It remains unproven, but "MPI on this machine got 4.4x slower over six
252
+
hours" is a much better-supported explanation than a latent deadlock in our AMR exchanges, and the earlier framing
253
+
overweighted the code.
254
+
255
+
**What it does NOT touch, and why that matters.**`gather` non-wait -- phase minus its two MPI-wait rows -- reads
256
+
0.2230 (A/B, 6 reps), 0.2253 (memmgr, 3 reps), 0.224 (ledger 74, a DIFFERENT binary) and 0.277-adjacent only where
257
+
wait is included. It is wait-free by construction, so it was immune to the whole slide. **This is the mechanism behind
258
+
ledger 77's rule**: on a degrading node, price an increment on a wait-free phase, because the step and every
259
+
wait-bearing row track the environment rather than the code. Ledger 75's -0.14 s/step whole-step figure was taken in
260
+
the healthy window (`w:regrid` 0.2135, matching the session's best) and stands, but the robust number for that
261
+
increment is and always was the -0.134 on gather non-wait.
262
+
263
+
**A confound in my own ledger-77 design, disclosed.** The 2x2 ran all manager-disabled cells before all
264
+
manager-default cells within each rep, so the default cells sat systematically later in a degrading node -- not
265
+
counterbalanced. Its conclusion (the allocator setting recovers 7 percent of what the flag recovers) rests on the
266
+
wait-free gather column and so survives; had it rested on the step column it would be void. Counterbalance arm order
267
+
in every future sweep.
268
+
269
+
**The filesystem event, and a near-miss worth recording.**`/work1` (WekaFS, not Lustre -- `lfs` does not exist here)
270
+
hit ENOSPC at 08:58 with `amr-bench` at 1.1 TB, of which 477 GB was regenerable `restart_data`. 200 GB was freed and
271
+
writes resumed. The near-miss: a Python `open(path, "w")` on the plan document truncated it to **0 bytes** before the
272
+
write failed, and only `git checkout` saved 5,166 lines of ledger. **Never truncate a file in place on a filesystem
273
+
that may be full -- write a temp file and rename.** Freeing the space did NOT restore performance, which is how the
274
+
disk-consumption hypothesis was falsified and the MPI-wait measurement above was found instead.
275
+
276
+
**Standing rule this earns: a canary before any timing sweep.** One short flag-OFF arm, read `w:regrid` against the
277
+
0.2135 baseline recorded here; if it is inflated, do not measure -- the step column will be environment, not code.
278
+
That check costs about a minute and would have saved most of the wasted node time in this session's second half.
279
+
229
280
## 2026-09-05 (77) — FALSIFIED, MY OWN HYPOTHESIS: the allocator setting recovers 7 percent of what the fused packs recover, so the per-map cost is the MAP, not the malloc
230
281
231
282
Ledger 75 hedged its ~151 us/dispatch constant on `LIBOMPTARGET_MEMORY_MANAGER_THRESHOLD=0`, this bench's standing
0 commit comments