re: the frozen wait-object capture, and screen_id was never a freeze test
Caught the freeze by waiting for the event (frozen.py + in_flight) instead of sleeping a guessed interval; freeze_waitobj.sh splits into boot/watch so the wait is not capped by one Bash call. Verified hard: a frame minutes later is byte-identical to the capture. Healthy vs frozen, same run: 20 -> 24 wait frames, XEvent 19 -> 23, XSemaphore 8 -> 7. The signature is per-thread -- 17 of 24 threads sit on the exact object they were on, four previously-running threads park, and T74/T75 move off a semaphore onto an event. So the freeze is not a whole-emulator stall. Also corrects the previous entry's test: screen_id reads 'flight' during a freeze by design, which is why frozen.py exists. Re-testing the saved frames says that run was genuinely healthy, but it was right by luck. heavy_read.py added to test whether the instrument provokes the freeze: I/O is free (371 MB in 0.1s, page cache), the cost is Python-level CPU. One data point -- 670s clean, then frozen 54s after the inducer started -- recorded as n=1, not as causation.
This commit is contained in:
@@ -1,4 +1,29 @@
|
||||
=== healthy: 23 wait frames ===
|
||||
=== healthy: 20 wait frames ===
|
||||
T106 Wait n=1 xe::kernel::XEvent
|
||||
T104 Wait n=1 xe::kernel::XEvent
|
||||
T97 Wait n=1 xe::kernel::XEvent
|
||||
T96 Wait n=1 xe::kernel::XEvent
|
||||
T80 WaitMultiple n=2 xe::kernel::XEvent, xe::kernel::XSemaphore
|
||||
T79 WaitMultiple n=2 xe::kernel::XEvent, xe::kernel::XSemaphore
|
||||
T78 WaitMultiple n=2 xe::kernel::XEvent, xe::kernel::XSemaphore
|
||||
T77 Wait n=1 xe::kernel::XEvent
|
||||
T76 WaitMultiple n=2 xe::kernel::XEvent, xe::kernel::XTimer
|
||||
T75 Wait n=1 xe::kernel::XSemaphore
|
||||
T74 Wait n=1 xe::kernel::XSemaphore
|
||||
T71 Wait n=1 xe::kernel::XEvent
|
||||
T66 Wait n=1 xe::kernel::XEvent
|
||||
T65 WaitMultiple n=2 xe::kernel::XEvent, xe::kernel::XSemaphore
|
||||
T64 WaitMultiple n=2 xe::kernel::XEvent, xe::kernel::XSemaphore
|
||||
T63 Wait n=1 xe::kernel::XSemaphore
|
||||
T62 Wait n=1 xe::kernel::XEvent
|
||||
T61 Wait n=1 xe::kernel::XEvent
|
||||
T50 WaitMultiple n=2 xe::kernel::XEvent, xe::kernel::XEvent
|
||||
T36 WaitMultiple n=2 xe::kernel::XEvent, xe::kernel::XEvent
|
||||
--- objects waited on:
|
||||
xe::kernel::XEvent 19
|
||||
xe::kernel::XSemaphore 8
|
||||
xe::kernel::XTimer 1
|
||||
=== frozen: 24 wait frames ===
|
||||
T106 Wait n=1 xe::kernel::XEvent
|
||||
T105 Wait n=1 xe::kernel::XEvent
|
||||
T104 Wait n=1 xe::kernel::XEvent
|
||||
@@ -9,11 +34,12 @@
|
||||
T78 WaitMultiple n=2 xe::kernel::XEvent, xe::kernel::XSemaphore
|
||||
T77 Wait n=1 xe::kernel::XEvent
|
||||
T76 WaitMultiple n=2 xe::kernel::XEvent, xe::kernel::XTimer
|
||||
T75 Wait n=1 xe::kernel::XSemaphore
|
||||
T74 Wait n=1 xe::kernel::XSemaphore
|
||||
T75 Wait n=1 xe::kernel::XEvent
|
||||
T74 Wait n=1 xe::kernel::XEvent
|
||||
T71 Wait n=1 xe::kernel::XEvent
|
||||
T69 Wait n=1 xe::kernel::XSemaphore
|
||||
T68 Wait n=1 xe::kernel::XEvent
|
||||
T67 Wait n=1 xe::kernel::XEvent
|
||||
T66 Wait n=1 xe::kernel::XEvent
|
||||
T65 WaitMultiple n=2 xe::kernel::XEvent, xe::kernel::XSemaphore
|
||||
T64 WaitMultiple n=2 xe::kernel::XEvent, xe::kernel::XSemaphore
|
||||
@@ -23,35 +49,36 @@
|
||||
T50 Wait n=1 xe::kernel::XEvent
|
||||
T36 WaitMultiple n=2 xe::kernel::XEvent, xe::kernel::XEvent
|
||||
--- objects waited on:
|
||||
xe::kernel::XEvent 20
|
||||
xe::kernel::XSemaphore 9
|
||||
xe::kernel::XTimer 1
|
||||
=== frozen: 20 wait frames ===
|
||||
T106 Wait n=1 xe::kernel::XEvent
|
||||
T104 Wait n=1 xe::kernel::XEvent
|
||||
T97 Wait n=1 xe::kernel::XEvent
|
||||
T96 Wait n=1 xe::kernel::XEvent
|
||||
T80 WaitMultiple n=2 xe::kernel::XEvent, xe::kernel::XSemaphore
|
||||
T79 WaitMultiple n=2 xe::kernel::XEvent, xe::kernel::XSemaphore
|
||||
T78 WaitMultiple n=2 xe::kernel::XEvent, xe::kernel::XSemaphore
|
||||
T77 Wait n=1 xe::kernel::XEvent
|
||||
T76 WaitMultiple n=2 xe::kernel::XEvent, xe::kernel::XTimer
|
||||
T75 Wait n=1 xe::kernel::XSemaphore
|
||||
T74 Wait n=1 xe::kernel::XSemaphore
|
||||
T71 Wait n=1 xe::kernel::XEvent
|
||||
T66 Wait n=1 xe::kernel::XEvent
|
||||
T65 WaitMultiple n=2 xe::kernel::XEvent, xe::kernel::XSemaphore
|
||||
T64 WaitMultiple n=2 xe::kernel::XEvent, xe::kernel::XSemaphore
|
||||
T63 Wait n=1 xe::kernel::XSemaphore
|
||||
T62 Wait n=1 xe::kernel::XEvent
|
||||
T61 Wait n=1 xe::kernel::XEvent
|
||||
T50 Wait n=1 xe::kernel::XEvent
|
||||
T36 WaitMultiple n=2 xe::kernel::XEvent, xe::kernel::XEvent
|
||||
--- objects waited on:
|
||||
xe::kernel::XEvent 18
|
||||
xe::kernel::XSemaphore 8
|
||||
xe::kernel::XEvent 23
|
||||
xe::kernel::XSemaphore 7
|
||||
xe::kernel::XTimer 1
|
||||
=== healthy -> frozen ===
|
||||
xe::kernel::XEvent 20 -> 18 CHANGED
|
||||
xe::kernel::XSemaphore 9 -> 8 CHANGED
|
||||
xe::kernel::XEvent 19 -> 23 CHANGED
|
||||
xe::kernel::XSemaphore 8 -> 7 CHANGED
|
||||
xe::kernel::XTimer 1 -> 1
|
||||
=== per-thread healthy -> frozen ===
|
||||
thread healthy frozen
|
||||
T106 Wait(XEvent) Wait(XEvent)
|
||||
T105 -- Wait(XEvent) <-- CHANGED
|
||||
T104 Wait(XEvent) Wait(XEvent)
|
||||
T97 Wait(XEvent) Wait(XEvent)
|
||||
T96 Wait(XEvent) Wait(XEvent)
|
||||
T80 WaitMultiple(XEvent,XSemaphore) WaitMultiple(XEvent,XSemaphore)
|
||||
T79 WaitMultiple(XEvent,XSemaphore) WaitMultiple(XEvent,XSemaphore)
|
||||
T78 WaitMultiple(XEvent,XSemaphore) WaitMultiple(XEvent,XSemaphore)
|
||||
T77 Wait(XEvent) Wait(XEvent)
|
||||
T76 WaitMultiple(XEvent,XTimer) WaitMultiple(XEvent,XTimer)
|
||||
T75 Wait(XSemaphore) Wait(XEvent) <-- CHANGED
|
||||
T74 Wait(XSemaphore) Wait(XEvent) <-- CHANGED
|
||||
T71 Wait(XEvent) Wait(XEvent)
|
||||
T69 -- Wait(XSemaphore) <-- CHANGED
|
||||
T68 -- Wait(XEvent) <-- CHANGED
|
||||
T67 -- Wait(XEvent) <-- CHANGED
|
||||
T66 Wait(XEvent) Wait(XEvent)
|
||||
T65 WaitMultiple(XEvent,XSemaphore) WaitMultiple(XEvent,XSemaphore)
|
||||
T64 WaitMultiple(XEvent,XSemaphore) WaitMultiple(XEvent,XSemaphore)
|
||||
T63 Wait(XSemaphore) Wait(XSemaphore)
|
||||
T62 Wait(XEvent) Wait(XEvent)
|
||||
T61 Wait(XEvent) Wait(XEvent)
|
||||
T50 WaitMultiple(XEvent,XEvent) Wait(XEvent) <-- CHANGED
|
||||
T36 WaitMultiple(XEvent,XEvent) WaitMultiple(XEvent,XEvent)
|
||||
|
||||
Reference in New Issue
Block a user