Угу. Процитирую эту статью:> Windows considers a core as "busy" even if there is only a single thread using it and moves that same thread to an idle core if one is available!
Ну, во первых, термина "busy" в планировщике Windows вообще нет (есть только его противоположность, idle). Во вторых, смена процессора выполнения потока "просто потому что появилось idle ядро" никогда не происходит. Советую почитать Windows Internals, например 7-ое издание. Там и терминология соответствующая, и материал соответствующий Windows 10 района 2016 года (например, там всё ещё Stride, а не StrideMask в KPRCB, т.е. нововведения для поддержки новых Ryzen там не покрыты).
> Furthermore, the Windows process scheduler makes no distinction whatsoever between physical and virtual cores, nor between CCXes with their separate caches.
Как минимум Windows 8 и выше прекрасно в курсе HT/SMT и в самом планировщике. Даже Windows 7 старалась сдвигать работу на физические ядра. Про детали CCX ничего не знаю, поэтому утверждать не буду.
> Just to clarify: the Windows scheduler is not SMT aware—only the Windows core-parking algorithm is SMT aware.
Это неверно как следствие первых двух ошибок.
В этой же статье далее рассказывается про их power plan, который делает "всё правильно". Но ничего не упоминается даже про то, что Microsoft дропает поддержку кастомных планов, и что на достаточно современных планшетах и ноутбуках всего один, новый, динамический план питания. Что весьма странно и, в совокупности с фактическими ошибками, не вызывает доверия к их экспертному мнению.
Возможно (даже вероятно) планировщик в Linux сложнее, способен обрабатывать даже очень невероятные ситуации. Я лишь утверждаю, что планировщик в Windows тоже неплох, да ещё и развивается.