Как ускорить Emerge в Gentoo Linux

Как ускорить Emerge в Gentoo Linux

В новом Portage (>=2.2\rc2) появилось больше опций параллельного выполнения компиляции. А именно - параллельная сборка с управлением от sysload.

Немного о плюсах и минусах Gentoo

Gentoo Linux - самый легко конфигурируемый, самый надёжный и удобный дистрибутив системы Linux. Но достигается это тем, что все пакеты и зависимости собираются из исходников. Самый большой плюс системы становиться её самым большим минусом. Ждать часами пока установиться несколько пакетов, которые ставяться за минуты  на других системах - явное расточительство своего времени, и делают это только те люди которым или нужны какие то особенные установки (software developers) или люди которым нужна особая надёжность и контроль (system administrators), и никак уж не простые пользователи..

Gentoo имеет шанс стать супер популярной только тогда когда установка системы не будет занимать пару дней. Это скорее всего произойдёт по мере постепенного ускорения компьютеров. Пока же..

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

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

PARALLEL FETCH

Если добавить такую строку в /etc/make.conf, файлы начинают вытягиваться в background:

FEATURES="${FEATURES} parallel-fetch"

Это очень полезно так как если это не вкочено - доставка файлов идёт последовательно и соответственно идут циклы компиляция-получение файлов-компиляция-… - в то время как эти процессы по сути разные и  могут выполняться в параллель.

-jN

-jN это стандартная опция утилиты компилляции - пргораммы make. она инструктирует make запускать процессы компилляции параллельно - N процессов одновременно. Хотя это и позволяет использовать ресурсы системы с большей эффективностью во время emerge, но emerge это многошаговая операция, make это только часть всего процесса, потому примерно половину времени даже с включенным jN система простаивает. Для использования -jN дописываем следующее в /etc/make.conf (пример дан для 2х ядерной системы):

MAKEOPTS="-j2"

*PARALLER EMERGE*

А вот это уже что то новенькое, о чём я и рассказываю сегодня. Для начала компиляем последний portage. Для этого добавляем следующие строки в следующие файлы:

В /etc/portage/package.keywords:

>=sys-apps/portage-2.2_rc2 ~x86
>=app-admin/eselect-news-20080320 ~x86
>=app-admin/eselect-1.0.11-r1xen

В /etc/portage/package.unmask:

>=sys-apps/portage-2.2_rc2
>=app-admin/eselect-news-20080320
>=app-admin/eselect-1.0.11-r1xen

Пересобираем emerge  (emerge -u portage), а далле запускаем любую компиляцию с такими вот опциями:

xen ~ # emerge --load-average 4 --jobs 3 -e world
Calculating dependencies... done!
>>> Verifying ebuild manifests
>>> Starting parallel fetch
>>> Emerging (1 of 135) sys-apps/portage-2.2_rc15
>>> Emerging (2 of 135) virtual/libintl-0
>>> Emerging (3 of 135) sys-libs/zlib-1.2.3-r1
>>> Installing virtual/libintl-0
>>> Emerging (4 of 135) sys-devel/gnuconfig-20080123
>>> Installing sys-apps/portage-2.2_rc15
>>> Jobs: 1 of 135 complete, 1 running              Load avg: 3.10, 2.68, 3.18

Параметр –jobs включает параллельную сборку (emerge), а –load-average контроллирует тот sysload за границами которого новые компиляции не будут стартовать. Параметр –load-average особенно порадовал :-)

Ссылки: