Форум проекта PuppyRus Linux

Разработки проекта PuppyRus => Программирование и компиляция => Компиляция ядра Linux => Тема начата: krasnyh от 29 Декабрь 2021, 16:28:19

Название: Ускорение процесса сборки ядра
Отправлено: krasnyh от 29 Декабрь 2021, 16:28:19
Итог (https://forum.puppyrus.org/index.php?topic=23699.msg181776#msg181776)

только добавил aufs. Т.е. остальное как у автора pf
Наверно уже больше 2 часов компилилось? Все же нормально, это когда 10-15 мин, :) но так долго... На лицо не целевое использование домашнего компа. )

Полезно будет доустановить пакет ccache (https://archlinux.org/packages/community/x86_64/ccache/) и включить (https://wiki.archlinux.org/title/Ccache#Enable_ccache_for_makepkg) его в makepkg.conf. Сократится время повторной сборки, например, когда сборка прерывается и правятся ошибки или, как в данном случае, компилится одно ядро, но с разным конфигом.
Название: Re: Re: Монолитное ядро. Скрипт преобразования любого конфига
Отправлено: krasnyh от 29 Декабрь 2021, 16:48:30
Еще очень сильно зависит от потоков -j. Часто считают достаточным выставлять make -j $(( $(nproc) + 1 )), но некоторые идут дальше.


Например, в этом (https://forum.puppyrus.org/index.php?topic=23160.msg178880#msg178880) тесте от hakavlad, -j 128. Понятно, что в первую очередь здесь тестирование отзывчивости памяти и, возможно, именно такие высокие значения он не ставит при компиляции, но кто знает...

Коммент под статьей "Сборка и компилирование ядра Linux" (https://www.opennet.ru/openforum/vsluhforumID3/6462.html#43)
Цитата
СОВЕЕЕЕТ!!!!
при компилировании я всегда использую следующий прием
вместо make "команда"
я использую
make -j"количество ядер помноженное на 2 и + 1" "команда"

Ускоряет компиляцию ядра linux В РАЗЫ,
Название: Re: Re: Монолитное ядро. Скрипт преобразования любого конфига
Отправлено: sfs от 29 Декабрь 2021, 16:58:17
$(nproc) + 1
В моем PKGBUILD так и сделано
Ускоряет компиляцию ядра linux В РАЗЫ
А куда торопиться-то. Если еще работаете на этом пк - наоборот лучше занизить к-во потоков
Название: Re: Re: Монолитное ядро. Скрипт преобразования любого конфига
Отправлено: krasnyh от 29 Декабрь 2021, 17:04:17
В моем PKGBUILD так и сделано
Код
% grep MAKEFLAGS /etc/makepkg.conf
MAKEFLAGS="-j5"
Название: Ускорение процесса сборки ядра
Отправлено: krasnyh от 03 Январь 2022, 16:29:08
 Опубликован набор патчей, ускоряющих сборку ядра Linux на 50-80% (https://www.opennet.ru/opennews/art.shtml?num=56449)
Цитата
При полной пересборке ядра командой "make -j96 vmlinux" на тестовой систем применение патчей показало сокращение времени сборки ветки v5.16-rc7 с 231.34 до 129.97 секунд (с 15.5 до 27.7 сборок в час), а также повысило эффективность использования ядер CPU во время сборки. При инкрементальной сборке эффект от оптимизации ещё более заметен - время повторной пересборки ядра после внесения изменений в заголовочные файлы сократилось в разы (от 112% до 173% в зависимости от изменяемого заголовочного файла). Оптимизации пока доступны только для архитектур ARM64, MIPS, Sparc и x86 (32- и 64-бит).


p.s.  Кстати, "make -j96 vmlinux" как отсылка к моему посту (https://forum.puppyrus.org/index.php?topic=23523.msg181691#msg181691).

Полезно будет доустановить пакет ccache (https://archlinux.org/packages/community/x86_64/ccache/) и включить (https://wiki.archlinux.org/title/Ccache#Enable_ccache_for_makepkg) его в makepkg.conf. Сократится время повторной сборки, например, когда сборка прерывается и правятся ошибки или, как в данном случае, компилится одно ядро, но с разным конфигом.
Название: Re: Ускорение процесса сборки ядра
Отправлено: sfs от 05 Январь 2022, 10:18:43
Часто считают достаточным выставлять make -j $(( $(nproc) + 1 )), но некоторые идут дальше.
Я ускорения не заметил.
ccache - тоже. Создает здоровый кэш в хомяке (который у меня в tmpfs). Как минимум неудобно
Заметно ускорение на ssd вместо hdd
И при повторной компиляции  с другим конфиком - не удаляйте src - меняйте /src/.config  и makepkg -e . Чем меньше разница между конфигами - тем быстрее скомпилится. Как я понял частично используются ранее скомпиленные *.o
Название: Re: Ускорение процесса сборки ядра
Отправлено: krasnyh от 05 Январь 2022, 11:25:21
ccache - тоже
Как я понял частично используются ранее скомпиленные *.o
Ну так, потому что включен ccache. Разве нет?
Название: Re: Ускорение процесса сборки ядра
Отправлено: sfs от 05 Январь 2022, 11:43:23
потому что включен ccache. Разве нет?
Без него
частично используются ранее скомпиленные *.o
Там где я его использовал дополнительно к этой методе - улучшения не заметил.
Название: Re: Ускорение процесса сборки ядра
Отправлено: krasnyh от 05 Январь 2022, 11:54:11
Без него
Без него, каждая повторная компиляция будет с нуля, не зависимо что там уже собрано. Или с каких-то пор теперь по-другому в линукс?
Название: Re: Ускорение процесса сборки ядра
Отправлено: sfs от 05 Январь 2022, 12:05:08
Компилил ядро без ccache не удаляя src несколько дней. Последний раз 4го. В src тем не менее .o от 2 и 3го числа
 Тут не уверен. Может при разных конфигах  некоторые  о  не использубтся

Но если удалить src  компилится в 2 раза дольше
Тут чисто мой опыт. Побочек пока не выявил
Название: Re: Ускорение процесса сборки ядра
Отправлено: krasnyh от 05 Январь 2022, 12:11:36
Цитата
Использование ссache может значительно ускорить сборку некоторых пакетов или проектов, которые компилируются несколько раз, так как заново компилироваться будут только файлы, которые изменились с последней компиляции.
Цитата
При компилировании какого-либо файла вычисляется его хеш и, если такой файл уже присутствует в реестре скомпилированных файлов, то он не будет компилироваться заново, а будет использоваться старый бинарный файл. Это может ускорить сборку некоторых пакетов в 5—10 раз.

При этом учитываются разные версии компилятора и опции сборки. Это означает, что, если вы однажды собрали проект с оптимизацией -О2, использовав при этом ссache, то при сборке с оптимизацией -О3 файл будет компилироваться заново, при этом в реестре ссache старый файл сохранится, но добавится и новый.
https://ru.wikipedia.org/wiki/Ccache
Название: Re: Ускорение процесса сборки ядра
Отправлено: krasnyh от 05 Январь 2022, 12:14:30
Создает здоровый кэш в хомяке (который у меня в tmpfs). Как минимум неудобно
Местоположение можно изменять, ссылка (https://wiki.archlinux.org/title/Ccache#Change_the_cache_directory). А так же, ограничить размер, ссылка (https://wiki.archlinux.org/title/Ccache#Set_maximum_cache_size).
Название: Re: Ускорение процесса сборки ядра
Отправлено: sfs от 05 Январь 2022, 12:21:27
https://ru.wikipedia.org/wiki/Ccache
По теории красиво. Как на практике - я написал. Перепроверьте - был сосредоточен не на Ccache. Мог что-то упустить
Ну и час - 2 . Надо не часто. На фоне можно работать. Надо ли усложнять...
Тем более при отлаженных конфигах несколько раз компилить не придется
Название: Re: Ускорение процесса сборки ядра
Отправлено: sfs от 05 Январь 2022, 12:28:54
Еще посмотрел - даже  некоторые .ko от 3го числа, но в итоговом пакете их нет
Получается
Может при разных конфигах  некоторые  о  не использубтся