[1.1.74] Factorio uses efficiency cores instead of performace cores

Bugs that are actually features.
Post Reply
User avatar
avakining
Manual Inserter
Manual Inserter
Posts: 3
Joined: Sat Dec 10, 2022 12:00 am
Contact:

[1.1.74] Factorio uses efficiency cores instead of performace cores

Post by avakining »

Factorio defaults to using the efficiency cores (e-cores) instead of the performance cores (p-cores), even when running at between 5 and 20 UPS and while macOS is not in Low Power Mode. This can result in artificially lowered performance in very large and demanding worlds, especially late-game modded worlds. As Apple Silicon and even modern Intel chips begin to incorporate asymmetrical e-and-p-cores, this issue will only become more prominent.

Apple Developer articles on how to optimize for asymmetrical cores: overview and more technical.
It looks to me (though I may be wrong) that, at least for macOS, it should require setting higher QoS settings for each non-background process


(note: while I noticed and recorded this problem in a modded game, it would also be an issue in a vanilla game with a large enough factory)

Log file: https://pastebin.com/fLEAYsuj
Attachments
Activity Monitor screenshot. Note that both e-cores are near-constantly at full use, while 4 p-cores are nearly idle
Activity Monitor screenshot. Note that both e-cores are near-constantly at full use, while 4 p-cores are nearly idle
Screenshot 2022-12-09 at 14.57.43.png (1.03 MiB) Viewed 1308 times
starting anew_.zip
World save
(54.46 MiB) Downloaded 63 times
Screenshot of debug menu
Screenshot of debug menu
Screenshot 2022-12-09 at 19.11.26.png (2.04 MiB) Viewed 1308 times

coppercoil
Filter Inserter
Filter Inserter
Posts: 408
Joined: Tue Jun 26, 2018 10:14 am
Contact:

Re: [1.1.74] Factorio uses Efficiency Cores instead of Performace Cores

Post by coppercoil »

AFAIK the bottleneck is RAM bandwidth, not a CPU power.


User avatar
jodokus31
Smart Inserter
Smart Inserter
Posts: 1497
Joined: Sun Feb 26, 2017 4:13 pm
Contact:

Re: [1.1.74] Factorio uses Efficiency Cores instead of Performace Cores

Post by jodokus31 »

coppercoil wrote: ↑
Sat Dec 10, 2022 12:46 pm
AFAIK the bottleneck is RAM bandwidth, not a CPU power.
Would factorio get assigned to performance cores, if memory bandwidth is not the bottleneck?

User avatar
avakining
Manual Inserter
Manual Inserter
Posts: 3
Joined: Sat Dec 10, 2022 12:00 am
Contact:

Re: [1.1.74] Factorio uses Efficiency Cores instead of Performace Cores

Post by avakining »

coppercoil wrote: ↑
Sat Dec 10, 2022 12:46 pm
AFAIK the bottleneck is RAM bandwidth, not a CPU power.
I should have more than enough RAM and bandwidth - I have 64GB of RAM (factorio seems to use 8 at most) and the M1 Max claims to have 400GB/S of memory bandwidth
FuryoftheStars wrote: ↑
Sat Dec 10, 2022 4:34 pm
Additionally, I'm not sure this constitutes a "bug", but rather a suggestion.
It was suggested to me on the subreddit to report it

Rseding91
Factorio Staff
Factorio Staff
Posts: 12510
Joined: Wed Jun 11, 2014 5:23 am
Contact:

Re: [1.1.74] Factorio uses Efficiency Cores instead of Performace Cores

Post by Rseding91 »

I had this same problem on windows 10 with visual studio compilation and the intel E-core vs P-core.. it feels far more like an operating system flaw than software flaw. The operating system should see that a process is using 100% of a given E-core and move it over to the P-core. Last I looked into it, windows 11 does this far better than windows 10. In the end I just disabled the E-cores in my BIOS and it gave a total system overall performance boost.

Requiring every piece of software tell the operating system (windows or mac) which cores it wants to use is a recipe for disaster... the E-core and P-core combo just seems flawed from the start. Software will never perfectly tell the OS what it should be doing since there are millions of programs out there that will never be updated to include these hints for the OS: it's always going to rely on the OS to do it smartly.

If nothing else; I would report this to Apple as well.
If you want to get ahold of me I'm almost always on Discord.

coppercoil
Filter Inserter
Filter Inserter
Posts: 408
Joined: Tue Jun 26, 2018 10:14 am
Contact:

Re: [1.1.74] Factorio uses Efficiency Cores instead of Performace Cores

Post by coppercoil »

jodokus31 wrote: ↑
Sat Dec 10, 2022 5:03 pm
Would factorio get assigned to performance cores, if memory bandwidth is not the bottleneck?
I run small factory (assume no bandwidth issues) at x64 speed on Win10, and got two P-cores working. Not sure about macOS.

azesmbog
Fast Inserter
Fast Inserter
Posts: 226
Joined: Mon Jan 28, 2019 12:05 pm
Contact:

Re: [1.1.74] Factorio uses Efficiency Cores instead of Performace Cores

Post by azesmbog »

coppercoil wrote: ↑
Mon Dec 12, 2022 7:19 pm
I run small factory (assume no bandwidth issues) at x64 speed on Win10, and got two P-cores working. Not sure about macOS.
Does macOS officially support the new 12th-13th generation Intel processors? Apple switched to their own processors??
avakining wrote: ↑
Sat Dec 10, 2022 5:57 pm
I should have more than enough RAM and bandwidth - I have 64GB of RAM (factorio seems to use 8 at most) and the M1 Max claims to have 400GB/S of memory bandwidth
Would you be so kind as to check out a small map with a vanilla base, which is not enough for 8GB of memory? Actually, 64GB is also not enough, preferably 128, but I think it will start from 64, albeit with difficulty and with a huge swap file)
Interested in UPS.

To not quite unfounded and for non-believers:
Screen Shot 2022-12-13 at 01.41.18.jpg
Screen Shot 2022-12-13 at 01.41.18.jpg (126.49 KiB) Viewed 937 times

User avatar
avakining
Manual Inserter
Manual Inserter
Posts: 3
Joined: Sat Dec 10, 2022 12:00 am
Contact:

Re: [1.1.74] Factorio uses Efficiency Cores instead of Performace Cores

Post by avakining »

azesmbog wrote: ↑
Mon Dec 12, 2022 8:29 pm
Does macOS officially support the new 12th-13th generation Intel processors? Apple switched to their own processors??
There are unofficial hackintoshes running on 12th and 13th gen Intel chips, but all new Macs use Apple's own ARM-based processors.
azesmbog wrote: ↑
Mon Dec 12, 2022 8:29 pm
Would you be so kind as to check out a small map with a vanilla base, which is not enough for 8GB of memory? Actually, 64GB is also not enough, preferably 128, but I think it will start from 64, albeit with difficulty and with a huge swap file)
Interested in UPS.
I don't know what's wrong with your Factorio, but here's the memory info for my highly-modded late-game base (compared to Firefox with 8 tabs)
Screenshot 2022-12-14 at 11.21.31.png
Screenshot 2022-12-14 at 11.21.31.png (6.31 MiB) Viewed 833 times
Firefox has *more* virtual memory used, and Factorio is only using 7.15 GB of "real" memory.

Memory is clearly not the bottleneck here, either Factorio is incorrectly not calling for a high QoS (probably 33, as it should request highest priority for p-cores), or macOS is incorrectly not allocating p-core usage for Factorio. Without looking the process calls, it's hard to tell where the fault lies.

SoShootMe
Filter Inserter
Filter Inserter
Posts: 367
Joined: Mon Aug 03, 2020 4:16 pm
Contact:

Re: [1.1.74] Factorio uses Efficiency Cores instead of Performace Cores

Post by SoShootMe »

avakining wrote: ↑
Wed Dec 14, 2022 5:00 pm
Memory is clearly not the bottleneck here,
The suggested bottleneck is memory bandwidth, ie the rate at which data is transferred between memory and the processor. This is likely to be the case for code that repeatedly reads and writes data greatly exceeding processor cache size, when most accesses are sequential and/or only a small fraction of data transferred is being processed/changed. A related bottleneck is memory latency, which is likely in a similar case but when most accesses are non-sequential.

Factorio must read and update the state of many entities each step of the simulation, so the "active" data will greatly exceed processor cache size, but the updates for each entity are often relatively computationally simple. This combination tends to make memory bandwidth and/or latency a more significant performance factor.

The relevance of this is that if performance is dominated or limited by a system's memory performance rather than its computational performance, a P-core may provide less or no benefit over an E-core, because they share the same memory performance. There are lots of factors so I'm far from certain but I this is unlikely for Factorio on an M1/M1 Pro.
either Factorio is incorrectly not calling for a high QoS (probably 33, as it should request highest priority for p-cores), or macOS is incorrectly not allocating p-core usage for Factorio. Without looking the process calls, it's hard to tell where the fault lies.
The implication from Rseding is that Factorio does not set QoS. The OS decides when and on which core to schedule each thread in all cases, but in this case it does not have "high QoS" to influence its decisions. But QoS is only a factor, a hint; the OS will also use other factors including historic observation, such as feedback provided by the CPU (if any exists) or that a thread previously run on an E-core usually uses its entire time slice.

To call this non-trivial is unquestionably a massive understatement, and cases where the OS "gets it wrong" are unavoidable. For example, at some particular moment, if there are more threads that are ready to run than the number of available P-cores, will performance be better if some particular thread is scheduled on an E-core, or if the OS doesn't schedule the thread because a P-core may become available very soon? There is no way to know for sure, with or without QoS.

It could be that Factorio is architecturally predisposed to "problems" in a system with cores of unequal performance, and the specific scheduling heuristics implemented in macOS for such a system are highlighting this. Marking game update-related threads with high QoS may cause the OS to schedule them only on P-cores (at least if power saving is not a priority), and perhaps result in better performance (at least sometimes). Equally, doing so may mean everything that matters now has high QoS so the OS's scheduling decisions will be the same as without QoS set and there is essentially no performance difference at all. The result could change if the OS's implementation does.

Hopefully the above shows that it is not as simple as either Factorio or macOS being "incorrect" but a much more nuanced matter. Also, I agree with FuryoftheStars that this is more a suggestion than a bug, although I would add that it is probably worth investigating.

FuryoftheStars
Smart Inserter
Smart Inserter
Posts: 1657
Joined: Tue Apr 25, 2017 2:01 pm
Contact:

Re: [1.1.74] Factorio uses Efficiency Cores instead of Performace Cores

Post by FuryoftheStars »

avakining wrote: ↑
Sat Dec 10, 2022 5:57 pm
I should have more than enough RAM and bandwidth - I have 64GB of RAM (factorio seems to use 8 at most) and the M1 Max claims to have 400GB/S of memory bandwidth
I just happened to think to look this up, but this article says the memory is connected to a 200 GB/s controller: https://www.notebookcheck.net/Apple-M1- ... 971.0.html
The unified memory (32 or 64 GB LPDDR5-6400) next to the chip is connected by a 512 bit memory controller (200 GB/s bandwidth)
Still, either way, these are theoretical under ideal condition numbers. In practice, you'd probably rarely actually see that.

Panzerknacker
Burner Inserter
Burner Inserter
Posts: 9
Joined: Mon Aug 22, 2022 5:27 am
Contact:

Re: [1.1.74] Factorio uses Efficiency Cores instead of Performace Cores

Post by Panzerknacker »

One thing tho that makes me kinda wonder if the game is indeed only using the small cores, how come it loads so much slower on my M1 Macbook than on my Steam Deck or Linux laptop (with same ingame settings). Especially the 'Loading sprites' part, I would kinda expect the M1 to load faster because it simply is a much faster system.

Rseding91
Factorio Staff
Factorio Staff
Posts: 12510
Joined: Wed Jun 11, 2014 5:23 am
Contact:

Re: [1.1.74] Factorio uses efficiency cores instead of performace cores

Post by Rseding91 »

I'm going to make an executive decision and say the operating system(s) are responsible for scheduling things to run on cores and not software (us). You'll need to report the issue(s) to whoever makes your operating system if it schedules things incorrectly. Or disable e-cores.
If you want to get ahold of me I'm almost always on Discord.

Post Reply

Return to β€œNot a bug”