В этом коммите добавлено автоматическое масштабирование настроек планировщика в зависимости от количества ядер в 2009 году.
Он был случайно жестко запрограммирован на максимальное количество ядер 8. Упс. Магическое значение взято из более старого коммита и осталось таким, каким оно было. Полный список различий можно найти на GitHub.
https://github.com/torvalds/linux/commit/acb4a848da821a095ae9e4d8b22ae2d9633ba5cd
Интересной настройкой является минимальная степень детализации. Предполагается, что это позволяет задачам выполняться в течение минимального времени 0,75 миллисекунды (или 3 мс в многоядерных системах), когда система перегружена (за период нужно выполнить больше задач, чем процессора). доступный).
В этом коммите в ядре v6 параметр min_granularity был переименован в base_slice.
В комментарии говорится, что он масштабируется в зависимости от количества процессоров, и комментарий неверен. Интересно, знают ли разработчики ядра об этой ошибке, когда переписывают планировщик!
- В официальных комментариях к коду говорится, что он масштабируется с помощью log2(1+ядер), но это не так.
- Все комментарии в коде некорректны.
- Официальная документация и справочные страницы неверны.
- Каждая статья в блоге, ответ на вопрос о переполнении стека и когда-либо опубликованное руководство по планировщику неверны.
Полная новость: https://thehftguy.com/2023/11/14/the-linux-kernel-has-been-accidentally-hardcoded-to-a-maximum-of-8-cores-for-nearly-20-years/