summaryrefslogtreecommitdiffstats
path: root/tools/guest-diag/wall2
diff options
context:
space:
mode:
authorArthur Hanson Rasmusson <arthur@vgpu.io>2026-10-25 14:21:04 -0400
committerArthur Hanson Rasmusson <arthur@vgpu.io>2026-10-25 14:21:04 -0400
commit32a0a80e75389b3a9db44369d321e0dff35ee58b (patch)
tree6999d135537c5a63621b379b95c82f617062df5e /tools/guest-diag/wall2
parent673e114ca3ade72c7f50f0b0d4bdac6e3ae36c04 (diff)
downloadopen-iov-32a0a80e75389b3a9db44369d321e0dff35ee58b.tar.gz
open-iov-32a0a80e75389b3a9db44369d321e0dff35ee58b.zip
wall2 session 109: zero-ioctl window vs 24% kernel profile = BURSTY retry rounds between 200ms heartbeats; the 299-byte reader named as a health-poll candidate; next = name the node and capture the burst with host-RPC correlation
Diffstat (limited to 'tools/guest-diag/wall2')
-rw-r--r--tools/guest-diag/wall2/README-session77.md20
1 files changed, 20 insertions, 0 deletions
diff --git a/tools/guest-diag/wall2/README-session77.md b/tools/guest-diag/wall2/README-session77.md
index 58ca3a4..ac66197 100644
--- a/tools/guest-diag/wall2/README-session77.md
+++ b/tools/guest-diag/wall2/README-session77.md
@@ -988,3 +988,23 @@ that equals nextPut (small constant, e.g. 0) at the memdesc+off; sweep the
CONSTANT pages' zero u32s in a bounded ring around the twins/active set
with 1 (the sysmem write is free); (3) the durable service fold once
found.
+
+**36. Session 109: THE BURST vs HEARTBEAT DISCOVERY + THE 200ms READER.**
+perf trace of the whole process over 10 s with -e ioctl: ZERO ioctls from
+ANY thread; meanwhile the process shows a strict 200 ms pattern on thread
+1788: `openat(filename ptr 0x5eaec740) -> read(fd 28, count 299) -> close`
+(the transient fd the fd-sampler missed!) and thread 1793's 10 ms
+futex re-arms. The perf-reported 24% channelReadChannelMemdesc (a kernel
+function only reachable via RM calls) CONTRADICTS the zero-ioctl window:
+the hot kernel work is BURSTY (periodic rounds between the 200 ms
+heartbeats), not continuous. The 299-byte blob read every 200 ms = the
+client's health poll (unnamed path; candidate: /proc/driver/nvidia/...
+informational node - find it by reading /proc/PID/io or by narrowing the
+sampler to the 200 ms phase). THE MODEL NOW: the client idles (futex
+waits) + wakes every 200 ms to poll a node + periodically runs RM bursts
+(the burst = a full retry round hitting channelReadChannelMemdesc). NEXT:
+(1) name the 299-byte node (it may BE the wait's condition - a status the
+service must change); (2) capture the BURST with perf (a long record +
+per-thread breakdown) to see which thread runs the memdesc reads (the RM
+burst thread) and correlate with the host-side RPC traffic in the same
+window (the host dmesg RPC lines during a burst = the exact RM call!).