4.2 KiB
4.2 KiB
name, description
| name | description |
|---|---|
| dankclaw-boot-line-window | Change a Dankclaw kernel command-line parameter safely: tracked grub + installer, measured before/after A/B on live LLM traffic, post-boot gates. |
Dank fleet kernel boot-line window (Dankclaw pattern)
Kernel command-line state is host state the deployer never owns. The repo law ("all edits through git") still applies: fetch the live file, commit it, edit the tracked copy, apply with a script.
Source of truth
dankclaw/host/grub— tracked copy of/etc/default/grub.scripts/set-dankclaw-bootline.sh— the only door: diff →sudo install -m 0644 -o root -g root→sudo update-grub→ print the defaultgrub.cfgentry → reboot only on--reboot. Refuses any host whosehostname -slacksdankclaw.- Decision record:
serverAppConfigs-docs/LLM/dankclaw-iommu-translation-off.md. deploy-plan.pymapsdankclaw/*subdirs explicitly; a newdankclaw/host/path plans nothing (verify with a--dry-run).
Procedure
- Capture the before-arm measurement first — you cannot get it back after the reboot.
- Fetch provenance byte-exact:
ssh dankclaw 'sudo cat /etc/default/grub' > dankclaw/host/grub(never retype; a transcription dropped a leading0). - Commit provenance, edit the tracked copy, commit the flip, push (Gitea lives on Dankclaw — pull on the host before rebooting), then
ssh dankclaw 'cd ~/serverAppConfigs && git pull --ff-only origin main'. - Install without
--rebootfirst: it prints thegrub.cfgdefault entry; confirm the token there before the irreversible step. ssh dankclaw 'sudo systemctl reboot --no-block'.- Poll on
/proc/uptime+ cmdline, never on ping — the NIC answers ICMP for a minute after shutdown and sshd reset looks like "reachable". Gate set:systemctl --failedcount 0 ·systemctl is-system-runningrunning ·/proc/cmdlinetoken ·ls /sys/kernel/iommu_groups | wc -l·cat /sys/kernel/iommu_groups/*/type | sort | uniq -c·systemctl is-active frank-dragoon frank-zealot·curl 127.0.0.1:7770/health(listener binds only after the full load — poll up to 10 min).
Measurement discipline (this is where windows get lied about)
- Both arms must be byte-identical traffic. Engine-reported token counts are the identity proof (e.g. 59,024 prefill / 21,568 needle both boots).
/tmpis tmpfs: the reboot deletes/tmp/halogen-eval. Rebuild withscripts/stage-frank-dragoon-eval.sh(corpus 2,891 lines / 1,287,656 B is the check) — and run it viabash -lc,uvis in~/.local/bin, absent from a non-login PATH.- The 51.2 GB halogen n-gram table is page cache (
Pin::None). A fresh boot has it cold and a cold table throttles prefill →catit once (~40 s) before measuring.WARM=1in the staging script does this. - Sampled decode on this engine is a useless single-sample instrument: three repeats of the same request gave 31.8 / 46.9 / 47.8 t/s. Only prefill (cold) and needle-hit carry signal; anything else needs ≥3 repeats.
- Bench law still bites: nothing else on the GPU; measuring through the live service is how dragoon/zealot are measured (a scratch server cannot share the card).
Traps
editPUT N.:can insert instead of replace — verify the range shrank, thenCUTthe leftover.- Body rows beginning with a markdown bullet (
-) get auto-prefixed and land as+-; rewrite the block withwritewhen that happens. - A long reboot fires
LlmEndpointDown→ Signal; Alertmanager has no persistence, so every active alert gets a freshstartsAtafter boot — checkquery_rangehistory before blaming the window for an alert. sudo podman psshows nothing for Dankclaw's rootless stack;systemctl is-active caddyis meaningless for quadlets. Use the public endpoints orsystemctl --userasdank.
Worked example (2026-10-18)
amd_iommu=off → iommu=pt to restore the XDNA2 NPU. Result: cold prefill 1,585.1 → 1,616.0 t/s (+2.0 %, i.e. no penalty), needle hit/hit, amdxdna bound 0000:c6:00.1 (group 26 identity, PASID width 10). The 13–16 % figure it replaced had never been measured locally. Deferred on purpose: pp_dpm_fclk pin (nothing co-runs yet) and PerfOpt (needs Linux 7.4; Ubuntu 26.04 caps at 7.0.0-38.38).