mirror of
https://github.com/MobileGL-Dev/MobileGL
synced 2026-11-07 10:03:23 +09:00
The second one-line experiment, and the one that decides whether the retention design is worth building. Ring 1024 plus the residency budget DISABLED (its constant raised out of reach), W=2 and W=4: arm waits rtt_mean by_op 2 wall W=1 (today's default) 4,543 5,672 us 4,536 28.66 s budget on + ring 8 9,078 2,598 us 9,071 27.04 s ring 1024 + budget 7 3,450 5,367 us 3,443 23.04 s ring 1024 + budget OFF W=2 2,560 4,916 us 2,553 16.80 s ring 1024 + budget OFF W=4 1,691 4,224 us 1,684 11.45 s rtt_mean does NOT grow (4,916 / 4,224 us, both BELOW the 5,672 us baseline) while the waits fall by 2x and 2.7x and the wall follows. So the ~5 ms is a WAKEUP round trip and the server drains a batch per wakeup - which is exactly what makes W pay, and it is the question the audit listed as undecidable from the repo and the watershed for whether this is worth doing at all. It is. AND IT BEATS THE HANDOFF'S OWN FLOOR: handoff-2 section 0.4 put the window's landing at 15-20 s, treating the client's ~13.4 s CPU as ADDITIVE with the waits. This frame turns out to be wait-dominated, so amortising four creates per wakeup lands at 11.45 s, 3.5 s below that estimate. 1024 IS A STAND-IN, NOT THE DESIGN: it works only because 1024 happens to be deep enough for this workload, and 1024 retained answers is ~2 GiB worst case (a ReadPixels answer can be 2 MiB). Retention gives the same property - the answer is still there - with a bound tied to the client's own deferral depth, which is why the implementation the audit specified is what gets built, not "make the ring 1024". Also corrects the note's section 7 path 1 (audit F15): on the stream arm SEG_REPLY and the Hello's ReplySlotCount have nothing to do with answers - they travel as Reply frames and StreamLink::ReadReply reads the client's own store - so "deepen the pool" does not address the arm that was measured, and should not be paid for. Reverted (ring 8, budget 7, probes deleted); 172 + 13 green.