At mega-graph speeds (329 sps), the diag sync_and_swap blocks for 100ms+ because the DtoD copies haven't finished in the 3ms step time. Gate sync+snapshot to every 10th step (or log/checkpoint boundaries). The DiagFrame still sends every step using stale staging data — the background writer drops most frames anyway via try_send(1). Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>