У вас новый современный многоядерный процессор? Много дешевой по нынешнем меркам оперативки? Тогда мы идем к вам!
Файл /etc/make.conf следующих версий Calculate Linux пополнятся ещё одной интересной опцией параллельной сборки пакетов:
EMERGE_DEFAULT_OPTS="--jobs=4"
где:
- jobs - максимальное количество параллельно собираемых пакетов
Итак, что делает эта опция? Представьте себе процесс сборки пакета. Сперва идет загрузка файла, затем распаковка, после конфигурация и наконец компиляция. В этот момент идет максимальная нагрузка на процессор, которая может меняться в зависимости от языка и размера пакета. После компиляции пакет устанавливается, обновляются настройки портежей и удаляются распакованные исходники. Процесс установки пакетов в общих чертах можно представить синусоидой.
Кому как не гентушникам могла придти в голову мысль запустить параллельный процесс установки пакетов! Несложно представить что из этого получится. Примерно тот же эффект, что и при параллельной загрузке системы. Возможно как раз для этого был изменен подход в сборке пакетов, когда служебная информация в конце сборки пакетов выводилась на экран. Ведь во время параллельной сборки вы уже не увидите процесс компиляции (трехмерных терминалов еще не придумали :).
Выигрыш во времени зависит от количества одновременно собираемых пакетов. Мне удалось добиться уменьшения времени компиляции более чем в 2 раза. При этом я продолжал работать за компьютером, не чувствуя существенных замедлений (возможно из-за nice, который по умолчанию установлен в значение 20).
Безусловно выигрыш будет и на одноядерном процессоре.
К сожалению открыть второе дыхание distcc при помощи нескольких потоков нам не удалось. Прирост скорости не достаточно существенный, т.к. компьютеры не удаётся загрузить. Если кому-нибудь удалось добиться большего от distcc, поделитесь рецептом. Поддержку не сложно будет добавить в Calculate Linux 10.4.
Если выставить количество процессов более 4, emerge может сбить порядок сборки пакетов, из-за чего компиляция может прерваться ошибкой. Возможно в следующих версиях sys-apps/portage это поправят.
Результаты тестов
Для проведения теста было взято время компиляции CLD 10.4 i686 на основе CLS 10.4. Процессор AMD Phenom™ 9850 Quad-Core Processor, 4 Гб ОЗУ.
# Сборка без параметра --jobs:
8 ч. 14 м.
# Сборка с --jobs=2:
5 ч. 56 м. (на 28% быстрее)
# Сборка с --jobs=4:
5 ч 31 м. (на 33% быстрее)
# Сборка с jobs>=8 привела к ошибкам, связанным с нарушенным порядком компиляции пакетов.
В итоге параллельная сборка сократила время компиляции на треть. Параметр load-average, который часто указывают для ограничения загрузки системы можно не использовать, т.к. работать можно и при неограниченном количестве потоков (jobs).