Fast Kernel Headers, набор патчей, ускоряющих компиляцию ядра на 50-80%.

Инго Молнар, известный разработчик ядра Linux и автор планировщика задач CFS предложил для обсуждения в списке рассылки разработчиков ядра Linux ряд исправлений, затрагивающих более половины всех файлов в исходном коде ядра и обеспечивающих общее увеличение скорости сборки ядра на 50-80% в зависимости от конфигурации.

Реализована оптимизация примечателен тем, что связан с добавлением самого большого набора изменений в истории разработки ядра: задались целью включить сразу 2297 патчей, изменив более 25 тысяч файлов.

Прирост производительности достигается изменением метода обработки заголовочного файла. Следует отметить, что за тридцать лет разработки ядра состояние заголовочных файлов приняло плачевный вид из-за наличия большого количества перекрестных зависимостей между файлами.

Реструктуризация заголовочных файлов заняла более года и потребовал значительного перепроектирования иерархии и зависимостей. Во время реструктуризации была проделана работа по разделению определений типов и API для разных подсистем ядра.

Я рад объявить о первой общедоступной версии моего нового проекта «Fast Kernel Headers», над которым я работаю с конца 2020 года, который представляет собой всестороннюю переработку иерархии заголовков ядра Linux и зависимостей заголовков с двойной целью:

- ускорить сборку ядра (как абсолютное, так и инкрементальное время сборки)

- типовая развязка API подсистемы и определений друг от друга

Как известно большинству разработчиков ядра, в ядре Linux имеется около ~ 10,000 30 основных заголовков .h в иерархиях include/ и arch/*/include/. За последние XNUMX с лишним лет они превратились в сложный и болезненный набор перекрестных зависимостей, который мы ласково называем «ад зависимостей».

Среди внесенных изменений: отделение заголовочных файлов высокого уровня друг от друга, исключение встроенных функций, связывающих заголовочные файлы, сопоставление заголовочных файлов для типов и API, предоставление отдельного набора заголовочных файлов (около 80 файлов имели косвенные зависимости, мешающие сборке, выставленные через другие файлы заголовочных файлов), автоматическое добавление зависимостей в Файлы ".h" и ".c", пошаговая оптимизация заголовочных файлов, использование режима "CONFIG_KALLSYMS_FAST=y", выборочное объединение файлов C в блоки сборки для уменьшения количества объектных файлов.

В результате проделанная работа позволила уменьшить размер обрабатываемых заголовочных файловна этапе пост-препроцессинга на 1-2 порядка.

  • Например, до оптимизации использование заголовочного файла «linux/gfp.h» приводило к добавлению 13543 303 строк кода и включению 181 зависимых заголовочных файлов, а после оптимизации размер был уменьшен до 26 строки и XNUMX зависимых файлов.
  • Другой пример: препроцессинг непропатченного файла «kernel/pid.c» связывает 94 тысячи строк кода, большая часть которых не используется в pid.c. Разделение заголовочных файлов позволило сократить объем обрабатываемого кода в три раза, уменьшив количество обрабатываемых строк до 36 XNUMX.

При полной пересборке ядра с помощью команды make -j96 vmlinux на тестовой системе исправление показало сокращение времени компиляции ветки v5.16-rc7 с 231,34 до 129,97, 15,5 секунд (с 27,7 до XNUMX сборок в секунду). час), а также повысил эффективность использования ядра ЦП во время сборки.

При инкрементальной компиляции эффект оптимизации еще более заметен: значительно сократилось время пересборки ядра после внесения изменений в заголовочные файлы (со 112% до 173%, в зависимости от заголовочного файла, который был изменен).

В настоящее время оптимизации доступны только для архитектур ARM64, MIPS, Sparc и x86 (32-разрядная и 64-разрядная версии).

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


Оставьте свой комментарий

Ваш электронный адрес не будет опубликован. Обязательные для заполнения поля помечены *

*

*

  1. Ответственный за данные: Мигель Анхель Гатон
  2. Назначение данных: контроль спама, управление комментариями.
  3. Легитимация: ваше согласие
  4. Передача данных: данные не будут переданы третьим лицам, кроме как по закону.
  5. Хранение данных: база данных, размещенная в Occentus Networks (ЕС)
  6. Права: в любое время вы можете ограничить, восстановить и удалить свою информацию.