summaryrefslogtreecommitdiffstats
path: root/tools/guest-diag/semfix_watch.py
Commit message (Collapse)AuthorAge
* sema-svc: apply releases before push memsets; poller: bypass read cacheArthur Hanson Rasmusson2026-09-29
|
* guest-diag: print tracking-sem state (index, queued, payload) on changeArthur Hanson Rasmusson2026-09-29
| | | | | | | The final cuCtxCreate stall is a UVM tracking semaphore whose completed value stays 0; the pool payload is the ground truth. semfix now prints idx/+0x10/+0x28/payload for every tracking sem it sees, whenever a field changes, so the last stall before a failure is visible in its log.
* guest-diag: cheaper trace read, optional push sampler, bigger pagemap batchesArthur Hanson Rasmusson2026-09-29
| | | | | | | | Under load the semfix poll grepped the whole (growing) trace file and the track_waits push block spawned three guest processes per sample, both of which slowed the pin path into the client's failure window. The trace read now tails 128 KB; track_waits.sh gates the push dump behind PUSH=0; the pagemap helper reads 32 KB chunks.
* kernel: batch the map-add channel rewind; trust injected streams for opsArthur Hanson Rasmusson2026-09-29
| | | | | | | | | | | | | | | | | Two fixes for the CE data path. (1) svc_handle_map_add rewound every channel by 8 ring entries on every injected mapping; a 16 MB push-buffer pin is thousands of page injections, so the pump's last_get was pinned in place and it re-read the same entries for the whole batch (3645 submissions, zero ops). The rewind now runs once per drained batch. (2) The push-start heuristic (op=INC_METHOD at address 0) rejects UVM's real CE memop pushes, which start with an IMM method at address 8 (observed 0x60020002, PTE data words) or a release method at 0x700 (0x200381c0); a buffer read through a host-injected (ipin) translation is now decoded fully trusted, ops included. Result on the next boot: memset=2718/0/0 ringops=1794 (first sustained CE work), false 12k->1.9k. semfix_watch: bulk-pin contiguous runs via sema_map_add len, read rm_mem size, 16 MB (4096 page) cap, non-blocking QMP read (the fixed 30 ms sleep made 4096 gva2gpa calls take two minutes), and KEEP_TRACE=1 to preserve the guest trace for post-mortems.
* guest-diag: deterministic channel->pool->manager->pushbuffer chain + ↵Arthur Hanson Rasmusson2026-09-29
| | | | | | | | | | | | | | | chunk-read diagnostics semfix_watch.py now resolves the CE pushbuffer from guest truth instead of scanning a wide raw window: it walks uvm_channel_t +0=pool, pool+0=manager, manager+8=pushbuffer, pushbuffer+8=rm_mem, rm_mem+0x10=vas[] and prefers the rm_mem whose GPU VA is in the 0x120000000 CE pushbuffer range. Three entry points: uvch probe on __uvm_push_begin_acquire_on_channel_with_info, uvbp probe on uvm_pushbuffer_begin_push, and the uvmt tracking-sem kptr (channel scan back from sem). Misses now print structured hop counters so a failed chunk read is distinguishable from a failed chain. guest_kprobes.sh (re)installs uvmt/uvch/uvbp/uvpbf after every guest boot (plain, module: and bare spellings).
* guest-diag: identify pushbuffer rm_mem by vmalloc CPU VA (any GPU VA)Arthur Hanson Rasmusson2026-09-29
|
* guest-diag: widen pushbuffer chain scan (256KB, slab-prefix filter)Arthur Hanson Rasmusson2026-09-29
|
* guest-diag: read trace before clearing (one-shot pushbuffer-create events)Arthur Hanson Rasmusson2026-09-29
|
* guest-diag: per-page pushbuffer translation, per-client re-pinArthur Hanson Rasmusson2026-09-29
|
* guest-diag: resolve pushbuffer from uvpbf kprobe pointer (deterministic)Arthur Hanson Rasmusson2026-09-29
|
* guest-diag: bound pushbuffer fallback scan (400 candidates / 30s)Arthur Hanson Rasmusson2026-09-29
|
* guest-diag: pushbuffer resolution fallback (direct pushbuffer pointer ↵Arthur Hanson Rasmusson2026-09-29
| | | | candidates)
* guest-diag: semfix also resolves+pins the CE pushbuffer range (descending ↵Arthur Hanson Rasmusson2026-09-29
| | | | GPA layout)
* guest-diag: semfix watcher (stale sem-pool VA->PA from guest truth); ↵Arthur Hanson Rasmusson2026-09-29
injector marker-based handle discovery