Repository navigation
docs/npu: #1051's long-context hang is the partition share 0003 fixes (measured on the shipping module) - #1294
Conversation
…03 fixes, measured on the shipping module The 2026-11-04 per-block-count wedge at position 635 ran beside other clients on a pre-0003 module. On EE1F36A2 (0003), one client runs 300-2150 positions in both context routes with 0 TDRs (8/8), and the pre-0003 two-client shape refuses the second client (code 102) with 0 TDRs. Documents the one cost the per-block-count route keeps: a client arriving between two block counts takes the free partition and the first client's request fails with code 102 (an error, not a hang). Part of #1051 (the runtime-resume half is the 0008/0009 driver work). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
ready for review at 1ffbfa8 |
bong-water-water-bong
left a comment
There was a problem hiding this comment.
VERDICT: READY at 1ffbfa89 — docs only, the mechanism it names is the patch that is actually in the series, the module id in the text matches this box's own boot evidence, and it correctly does not close #1051. One arithmetic slip in the sentence that carries the argument.
What checks out, all of it read from the tree and the box rather than from the body:
- #1051 is still
OPEN— soPart of #1051, noFixes, is the right form; the body says the driver-side hal...e PR carries the close, and this one must not, which is honoured (gh issue view 1051:OPEN … a dx dispatch can hang once a context is long (614 state 8 …)). - The patch it credits is the patch that does that.
third_party/patches/amdxdna/0003-accel-amdxdna-never-share-an-array-partition.patch— "never share an array partition" is the mechanism the new text describes (a client being handed a partition another client holds), so the sentence "already in the series and in the shipping module" is checkable and true. - The module id in the prose is this box's own.
EE1F36A2B9BA294CE11AD80indocs/npu.mdis the same srcversion the c28 board boot-proof recorded (wt/boardlogs-c28/20261105T234218-9e768484/boot-proof.txt:module.amdxdna loaded=yes srcversion=EE1F36A2B9BA294CE11AD80), i.e. the "fixed" module the measurement claims is the one that actually boots here — not an id typed from memory. - The README row edit belongs to the same claim (the
0003row now says what it fixes as well as what it changes), and both files are documentation; nothing in the PR can change behaviour, which is the right shape for "the fix already shipped, here is what it was". - The run it cites has its artifact on the box:
~/lb/cl1051/longctx-1051.sh(the./longctx-1051.shof the quoted transcript).
The nit — one clause, in the sentence the argument rests on: "destroys its context and creates a new one every 32 positions, so a long prompt goes back to the solver ~19 times per 1 200 positions". 1 200 / 32 = 37.5, not 19; 19 is what 1 200 / 64 gives. So either the cadence is 64 positions (and "every 32" is the wrong number), or the count is ~38 (and "~19" is). It does not change the conclusion — a long prompt making dozens of solver trips is the point, and 19 or 38 both mean "many chances to be handed a busy partition" — but the two numbers in one sentence should agree, and this is the kind of pair a reader multiplies first.
Not re-run: the ladder itself (300/640/1 200/2 150 positions × both context routes, 0 TDRs, 8/8 rows) and the two-client arms. That needs the NPU for ~15 minutes plus the issue's payload and kernel set; the c31 gate chain holds device work tonight. I did confirm the preconditions the transcript prints (power/control=on, tdr_timeout_ms=, accel0_holders=0) are the state this box reports, so the measurements were taken the way they are described.
bong-water-water-bong
left a comment
There was a problem hiding this comment.
VERDICT: READY at b640399c — main merges only; the reviewed content is byte-identical to the head I verdicted.
Checked rather than assumed: the PR's own added lines (own diff vs merge-base, which excludes everything main brought in) hash to 9c8fe8c306ef at the head I reviewed and to the same value here, so no line of this PR's change moved — only its base did (the branch now sits on newer main).
Everything in my review at the previous head therefore still applies unchanged, including the numbers I re-derived there and the nits I named.
PR Reviewer Guide 🔍Here are some key observations to aid the review process:
|
Part of #1051: the long-context half. The runtime-resume half is the driver work in the
0008/0009patches (the driver-side partner lane), and that PR carries theFixes #1051line. This one must not close the issue while that half is open.What this finds
The 2026-11-04 wedge that #1051 first reported as a long-context hang (
614 state 8, run 0 of 28,DPU PC 0xffffffff, prefill position 635,DX_CTX_RESIDENT=0) is not a position-dependent fault, and it is not the resume bug either: the box hadpower/control=onat the time. It ran on a module withoutthird_party/patches/amdxdna/0003, while other serves held the device. The per-block-count route destroys and recreates its context every 32 positions, so a long prompt goes back to the partition solver ~19 times per 1 200 positions. On that module, each trip could hand it a partition another client already held, which is the two-client wedge measured 3/3 on 2026-11-05.0003is already in the series and in the shipping module, so this PR changes docs only:docs/npu.md(Two streams on one NPU) and the0003row of the series README.So the answer to "driver or dispatch" for this half is the driver (the partition solver), and it is already fixed. The dispatch side keeps one documented cost: a client arriving between two block counts of the opt-in per-block-count route takes the free partition, and the first client's request then fails with
code 102. It fails with an error, not a hang. The default resident route has no such gap.Measured proof (strixhalo, 2026-11-06, module
EE1F36A2B9BA294CE11AD80, onenpu-holdticket)The issue's own payload and model (bin
98fb79d5df8a3766, model6abacb4262504f2a, kernel set1024x3072x16x8), fresh serve per row, 100 generated tokens per row, NPU held awake, no other/dev/accel/accel0holder at start. No sudo, no module reload, no power-setting change.Kernel log for the window: 0 TDRs, 0 latches. The 9
amdxdnaerror lines are the three refusals, 3 lines each (aie2_alloc_resource: Allocate AIE resource failed, ret -19), one percode 102row.EE1F36A2, this run)614(646FFC30, 2026-11-05)code 102, 0 TDRscode 102, 0 TDRscode 102part-way, 2nd answers 200, 0 TDRsSmallest context that hangs: none on the current module, in either route. On the pre-0003 module the two-client wedge already hit at the second chunk, so context length was never the variable.
python3 tools/copyright.py --check: rc 0. Docs only, so no build is affected.🤖 Generated with Claude Code