LINUX.ORG.RU
решено ФорумTalks

Ядро Linux было случайно жестко запрограммировано максимум на 8 ядер за последние 15 лет, и никто этого не заметил.

 ,


0

4

В этом коммите добавлено автоматическое масштабирование настроек планировщика в зависимости от количества ядер в 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/

Ответ на: комментарий от Obezyan

Да, на 256 ядрах будет уже 9, но таких процов на x86-64 я не знаю. Может следующие AMD EPYC такие будут.

Да легко. Два EPYC по 128 ядер. Новые на Zen4 как раз такими будут.

hateyoufeel ★★★★★
()
Ответ на: комментарий от firkax

sysctl_sched_base_slice = normalized_sysctl_sched_base_slice * factor

Я понимаю о чем вы и звучит логично, но можете показать где это преобразование с умножением происходит в коде ? Я видимо уже старый и слепой.

Obezyan
()
Ответ на: комментарий от Obezyan

В том же файле рядом. По слову normalized все его упоминания находятся, а поскольку он static - в других файлах искать не надо.

Функция update_sysctl. Всего использования два второе - в sched_update_scaling.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 1)
Ответ на: комментарий от firkax

Спасибо, теперь увидел.

Получается, вот тут умножение на фактор, вот тут - деление.

Obezyan
()
Ответ на: комментарий от ripgrep

Затем же, зачем и все остальные – это абстракции, решающие одну конкретную небольшую задачу в рамках более крупной задачи.

buddhist ★★★★★
()

Ассемблер сейчас наверное в бесконечных микрооргазмах содрогается. Он когда то размазывал сопли без малейшего понимания сути вопроса (как всегда впрочем) что планировщик не планировщик и никто не пишет «правильный» планировщик потому что заговор мировой. И он знает как правильно должен работать планировщик (несмотря на собственное непроходимое невежество), но написать его не в состоянии. Там ЕМНИП «принцип Шарикова» предлагался (отнимать и делить), а то что сейчас сложно и неправильно. Думаю статью он тоже не поймёт, но она его приведёт в восторг и подтвердит что ядро пишут люди тупее него.

Даже немножечко грустно что он самоподрыв совершил. «Стена текста» от него меня бы развлекла.

Jameson ★★★★★
()
Последнее исправление: Jameson (всего исправлений: 1)

Это все так интересно, держи нас в курсе

neocrust ★★★★★
()
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)