docs+tools: the call-rate probe's baseline already refutes the timeout reading
v2 counts every KeWaitForSingleObject call per thread per second, tracks how many distinct objects it saw, and logs the last result. Its HEALTHY baseline is a result on its own: over a full 22-minute run the main thread cleared 500 calls/s in 224 separate windows, peaking at 1235 calls/s over up to THIRTEEN distinct objects, and the last result was X_STATUS_SUCCESS in all 314 windows. Not one timeout. So the game normally does hundreds of successful waits a second across many objects - exactly the blind spot v1 could not see, and the reason a timeout-streak counter reported the same single poller whether the game was frozen or healthy. Stated as a consequence rather than a triumph: 500/s is NOT self-selecting, since the main thread clears it constantly, so the freeze signal has to be a different shape - a thread far above 1235/s, a new thread, or a window whose result is not SUCCESS. That still needs a frozen sample; run 5 ended in GAME OVER at ~22 min without freezing. freeze_watch.sh now summarises the rate probe per thread when it captures. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PMRJjbxLqZtsb5Vb7KunPE
This commit is contained in:
@@ -35,8 +35,17 @@ while [ $SECONDS -lt $DEADLINE ]; do
|
||||
grep -oE 'thread [0-9A-F]+ has timed out [0-9]+ times in a row on object [0-9A-F]+ \(type [0-9]+\)' "$LOG" \
|
||||
| sed -E 's/has timed out [0-9]+ times in a row //' | sort | uniq -c | sort -rn
|
||||
echo
|
||||
echo "=== last 12 probe lines ==="
|
||||
echo "=== last 12 stuck-wait lines ==="
|
||||
grep 'wait-probe' "$LOG" | tail -12
|
||||
echo
|
||||
echo "=== call-rate probe: per-thread rates in the last 20 windows ==="
|
||||
grep 'wait-rate' "$LOG" | tail -20 \
|
||||
| sed -E 's/.*thread ([0-9A-F]+) called KeWaitForSingleObject ([0-9]+) times in ([0-9]+) ms over ([0-9]+) distinct.*last result ([0-9A-F]+)/thread \1 \2 calls\/\3ms \4 objects result \5/'
|
||||
echo
|
||||
echo "=== call-rate: highest single window per thread, whole run ==="
|
||||
grep 'wait-rate' "$LOG" \
|
||||
| sed -E 's/.*thread ([0-9A-F]+) called KeWaitForSingleObject ([0-9]+) times.*/\1 \2/' \
|
||||
| sort -k1,1 -k2,2nr | awk '!seen[$1]++ {print " thread " $1 " peak " $2 " calls/window"}'
|
||||
} | tee -a "$OUT"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
Reference in New Issue
Block a user