And macOS 11 shipped with a scheduler for M1's big.LITTLE design... what's the difference?
Not a huge one, but I think the key difference in my mind is that Apple’s scheduler for iOS/macOS is surprisingly braindead. Like classic CPU designs, tasks start with the “primary” core and work towards the bottom of the core list as more resources are needed. E cores for Apple are always at the bottom of the list, and tasks that are “background” priority (not necessarily an app in the background, the priority is different than active/inactive state) are limited to only run on these cores. That’s it. That’s the trick. Apple’s scheduler looks a
lot like CPU schedulers today.
SMT on Intel isn’t too bad either. The logical cores that represent the second thread on each core live at the bottom of the core list, so the cores are loaded first before the second thread of any core receives work. So the same sort of scheduler that works for SMT represents most of what Apple’s custom scheduler does.
However, with Alder Lake, you have Thread Director, and then logic in Windows which is looking at things like process being active/inactive, on top of the SMT logic, and having to know where the P/E cores start in the core list. All because Intel’s goal here is to move threads between the P and E cores, which Apple doesn’t really do.
Generally for something like a scheduler, the simpler the better as it keeps it reliable.