mirror of
https://github.com/MobileGL-Dev/MobileGL
synced 2026-11-07 01:53:24 +09:00
- Three one-variable experiments on the same device, same workload (the 43k-record frame): a 40x larger client spin moves the per-wait mean by ~10% (so it is not the client park/wake); the same frames over adb forward - a link whose raw RTT is several times lower - by ~25-30% (so it is not the link, which is what the handoff saw in 3.6 and could not account for); and pinning the device (governor performance on all eight cores, cpuoff_l / clusteroff_l / mcusysoff / s2idle disabled) by 26% per wait and 25% of the whole frame: 221.5 s -> 166.5 s for 43,218 records and 100.5 MB staged, against 43,232 and 101.4 MB in the baseline. - The mechanism: the server's apply thread parks between records, the SoC drops into a deep idle state, and every record pays the exit latency - milliseconds, once per record, which is the entire shape of the frame. It also matches the server profile the handoff took (65% socket syscalls, ~15% doorbell spin: waiting and waking, not working). - Stated where it matters: the handoff's 249 s was taken on an UNPINNED device, so its absolute numbers carry this idle tax - the project has a pinning discipline for exactly this reason. - The lever list is now ordered: batch the waits (K <= 8 by the reply-slot pool, client-only), keep the server hot between records (its own spin budget, which the APK does not wire yet), and measure split numbers on a pinned device. The device was restored to stock afterwards.