LINUX.ORG.RU

Как ускорить компиляцию Ядра/пакетов в gentoo?

 , ,


1

3

При сборке ядра, либо пакетов установки новых\обновлении существующих, как задействовать все ресурсы системы и ускорить этот процесс?

например имеем сервер 2*e5-2680v4 (28 ядер в сумме) и 64гб озу.

конфиг

COMMON_FLAGS=«-march=native -O2 -pipe»

MAKEOPTS=«-j28 -l28»

При компиляции ядра LA 0.75, использование cpu 3-5%.

Можно как-то ускорить процесс задевствовавши все ресурсы cpu?



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

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

MAKEOPTS=«-j56 -l56»

LA 0.9, cpu 2-5%, озу ~6гб использует не зависимо от потоков.

по старой инструкции помню было -j устанавливалось по количеству ядер(потоков?). Сейчас еще добавилась настройка озу\2, но, даже с настройками х2 еле-еле нагрузка доползает до 1.

forella
() автор топика

Памяти у тебя мало и из кэша исходники вылетают? Чтобы с этим не возиться можешь попробовать собирать в tmpfs, но можешь напороться на сборку пары жручих пакетов одновременно, типа llvm. Для portage тоже укажи больше j.

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

памяти какой? если на счет RAM то на борту 64 гб, во время всей сборки(и после) total 64315, free 56120, used 460, buff/cache 7734

(Забыл уточнить, вопрос касается live cd (в chroot) (новая установка системы))

forella
() автор топика
Ответ на: комментарий от Werenter

Используй опцию portage --jobs X, где Х – число пакетов, которая позволяет собирать несколько пакетов одновременно.

Werenter ★★☆
()
Последнее исправление: Werenter (всего исправлений: 2)
Ответ на: комментарий от forella

установка одного пакета с 5-ю зависимостями ~2минуты, из них 10сек cpu 100%, остальное время 1-2%.

10 сек компиляция в кучу потоков. Остальное время всякие однопоточные штуки: линковка, configure, всякие разрешения зависимостей и т.п

Чтобы лучше утилизировать ресурсы процессора тебе надо собирать пакеты параллельно. У emerge есть опция про это.

AnDoR ★★★★★
()

Собираю ядро так:

eselect kernel list
eselect kernel set N - вместо N пишешь [...] нужного ядра из вывода команды выше
cd /usr/src/linux - здесь переходишь по ссылке к исходнику ядра (обычно делаю ещё копию, что бы после не понравившейся сборки не вычищать, просто удаляю)
make menuconfig - редактируешь config ядра
make -j8 && make modules_install - вместо -j8 ставь своё (у меня 4-е ядра с HT)
make install
genkernel --install --kernel-config=/path/to/used/kernel.config initramfs - это, если нужен ramfs
grub-mkconfig -o /boot/grub/grub.cfg - ну и генерация конфига bootloader-а если используешь grub
если память не изменяет, MAKEOPTS тот что в make.conf не для ядра, для portage, смотри вику для уточнения.

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

Да, похоже на то, что -j не берется с make.conf при сборке ядра и нужно его указывать явно перед коспиляцией, т.к. при сборке ядра один процесс всего был cc1, а при сборке пакетов какраз количество соответствующее в конфиге.

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

Да, похоже на то, что -j не берется с make.conf при сборке ядра…

В обычной ситуации при обновлении через emerge ... берется.

Если сборка не через portage, то настройки для portage не используются.

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

Очень странно. А если какой-нибудь qtwebengine собирать? У меня 12 ядер(3900х) и у меня при MAKEOPTS="-j10" довольно ощутимо начинает гудеть вентилятором(ставлю 10 потому что частенько 32Гб памяти не хватает на больше потоков сборки и приходит OOMKiller).

А может у тебя в IO упирается? Диск SSD? Ну и посмотри сколько cc1 процессов в топе, их довольно много должно мельтешить.

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

Просто один из вариантов, забыл спросить у тс как собирает он, конечно можно и genkernel, конфиг богатый у него, немного подправить и вперёд. Как раз и это есть:

# Genkernel uses an independent configuration for MAKEOPTS, and does not source
# /etc/portage/make.conf . You can override the default setting by uncommenting
# and tweaking the following line. Default setting is set up by
# ${GK_SHARE}/${ARCH_OVERRIDE}/config.sh . The recommended value for -j
# argument is: <number of processors>*<number of cores per processor>+1
#MAKEOPTS="$(portageq envvar MAKEOPTS)"

spawn_sp ★★★★
()

Да, просто в "-j" удваиваешь число потоков. Но. как правило, упрешься в компиляцию самого жирного класса, где естественно больше зарулит частота текущего ядра ЦП.

Отсюда - разгоняй все ядра. Ставь бинарники. Не юзай генту/тьфукальку. Береги природу!

hargard ★★
()