5 ms·
I have noticed that threads running at the Utility QoS level perform a lot more consistently on the M1 than they do on Intel. Utility being the lowest libdispat
by TheTon 5y ago
I have noticed that threads running at the Utility QoS level perform a lot more consistently on the M1 than they do on Intel. Utility being the lowest libdispatch QoS level that still gets scheduled on a P core.
For example, a piece of code I was optimizing recently ran with very little variation in time between runs on my M1 system, but had ~30% variation on a similarly loaded Intel Mac. Changing the QoS level to Default instead of Utility allowed the Intel Mac to perform much more consistently on the benchmark, but made no difference on the M1 (I have good reason to leave it at Utility in my actual application, but for benchmarking it made sense to try other levels).
I found it hard to tell from the article, but it sounds like on the M1 Pro maybe the two highest QoS levels (interactive and user initiated) now preferably map to p cores 0-3, and maybe now default and utility map to p cores 4-7, and then background gets the e cores?
- masklinn 5y agoHave you noticed whether `nice(1)` also triggers these QoS change, or is it limited to libdispatch? > it sounds like on the M1 Pro maybe the two highest QoS levels (interactive and user initiated) now preferably map to p cores 0-3, and maybe now default and utility map to p cores 4-7 That seems unlikely, though I don't have an M1* device what feels more likely is that the two clusters are independently powered (the turbo-ing works on a cluster basis so that's almost certain), therefore the machine favors fully loading the first one before it starts "spilling" to the second (and thus has to power it up).