Планета Calculate

Облако тэгов

world wi-fi udev мышка news Midnight Commander kde calculate-sources полезное templates pitivi calculate 2.2 portage CMC mail xchat swap ПДУ theme звук xsel серые листы meta djvu winbind tracker ДНК cld cp1251 X linuxdcpp 1C postgresql apache live-flash syslog cairo-dock автологин atheros9285 настройка цветов принтера mpg123 профиль пользователя sony bonding smplayer flags optimization fonts book bluetooth dwm NetworkManager apvlv VirtualBox nm-applet weechat 11.6 CLDG backdor rtorrent uptime rutorrent ati autologin ccze alsa asus n10j torrent press tail радио mailman интервью Audio BINHOST builder bash donation CSS сеты клавиатура Office cldg security strategy загрузчик dhcp binhost Скоростной алгоритм сжатия LZ4 TV GSC canto screenshot пресса xxkb участие feh USE samba tun slim maillist lighttpd шаблоны домашний сервер xbmc Gnome3 hdmi atom n270 stage UTF-8 оптимизация linux foto pam KDE textile bond install Calculate Utilities elogv многопоточная закачка gnome3 asus tint gentoo vlc ati-drivers p2p mp3 plugn ldap lirc screencast vaio mc games desktop ups lvm ускорение git Xorg team windows MultiTail BugTracker Atheros mplayer XFCE PowerTOP ПО package unmasking установка pulseaudio net vulnerability ppp0 blog tap tint2 mouse vim перемещаемые профили iptables mirror livecd Gnome установка linux calculate3 помощь update binary dns calculate-install рассылка man kde и многопоточный звук euse grub2 интернет db Calculate E17 hdd wiki most umd openrc release acoola новости mirrorselect bsa font aufs iphone btrfs pxe birthday obmenu E17 доступ nut настройка цветов монитора RSS безопасность emerge ncurses почта удаленная сеть qutim разработка udisks ntfs-3g Новости xorg grub openldap openbox udisks настройка цветов сканера keyboard Calculate template package sound calculate handbook postfix ffmpeg ubuntu grc kernel pwkl cds глобальное меню загрузка командная строка EAPI 2 CLS make.conf E17 Calculate win7 acl chromium jabber overlay recordmydesktop windows 7 autounmask bittorrent nouveau network двойная загрузка #calculatelinux developers ParaType linux tbn facebook locale Desktop DNA irc bug benchmarking оптимизация ядра CDS настройка linux raid atheros calculate linux obconf calculate2 маршрутизатор gnome vpn pptp MidnightCommander calculate-install-gui CLDX calculate utilities glx-dock internet history видео blueman profile Windows 7 layout Zen CLD CDS dns dhcp настройка цветов фотоаппарата Calculate Linux Enlightenment video сглаживание udisks-glue python debian reader цветовой профиль icc localepurge smart перенесено костыли bash-completion кеширование proxy распространение pdf cmc Calculate USB Creator dropbox kde xfce pastebin Calculate Linux Spamassassin twitter брелок ssh шрифт authentication cls канал wget LVM

Параллельная сборка пакетов

Добавил(а) Alexander Tratsevskiy около 2 лет назад

У вас новый современный многоядерный процессор? Много дешевой по нынешнем меркам оперативки? Тогда мы идем к вам! :)

Файл /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(tm) 9850 Quad-Core Processor, 4 Гб ОЗУ.

  1. Сборка без параметра --jobs:
    8 ч. 14 м.
  2. Сборка с --jobs=2:
    5 ч. 56 м. (на 28% быстрее)
  3. Сборка с --jobs=4:
    5 ч 31 м. (на 33% быстрее)
  4. Сборка с jobs>=8 привела к ошибкам, связанным с нарушенным порядком компиляции пакетов.

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


Комментарии

Comment

Добавил(а) Аноним около 2 лет назад

load-average - максимальная нагрузка?
А в каких попугаях эта нагрузка выражена?

"--load-average=4"

4 чего? Процесса, метра, литра, niceness :-)?

Comment

Добавил(а) Alexander Tratsevskiy около 2 лет назад

Наберите top и посмотрите справа "load average: 0.05, 0.03, 0.00". Это общая нагрузка на систему в целом.

Comment

Добавил(а) Dmitry Osintsev около 2 лет назад

:)

Comment

Добавил(а) Аноним около 2 лет назад

Получается что "load average" в простейшем случае можно прикинуть по 1 на процессор (ядро)?

Comment

Добавил(а) Alexander Tratsevskiy около 2 лет назад

На нашем сервере одно время load-average превышал сотню, в то время как процессор был загружен на 50%. Виной тому была нехватка оперативной памяти, повлекшая активное использование свопа.
Сейчас я ставил сборки дистрибутива без каких либо ограничений. Такое ощущение, что большие тормоза добавляются увеличением приоритета компилятора, нежели параллельной сборкой. Именно поэтому в оверлее мы меняем значение PORTAGE_NICENESS на 19. На время сборки сказывается незначительно (в пределах 5%), а вот на удобство работы при этом - очень заметно.

Сейчас я допишу в статью результаты тестов.

Comment

Добавил(а) Родион Дорошкевич около 2 лет назад

Думаю стоит еще привести для справки к результатам тестирования и значение параметра MAKEOPTS, с которым происходила сборка системы.

Comment

Добавил(а) Alexander Tratsevskiy около 2 лет назад

Во всех тестах MAKEOPTS="-j5". Собственно он по умолчанию устанавливается - кол-во ядер + 1.

Comment

Добавил(а) Родион Дорошкевич около 2 лет назад

Возможно стоит попробовать увеличить и кол-во потоков для сборки? Думаю тогда работать на компе во время сборки системы будет не очень комфортно, но скорость тоже увеличится. :)

Comment

Добавил(а) Аноним около 2 лет назад

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

Comment

Добавил(а) Аноним около 2 лет назад

думаю, что параллельная сборка мало связанных друг с другом пакетов вроде, к примеру, slim и firefox не будет производиться с ошибками. Кстати, не пробовал, но нельзя ли запускать сборку двух прог параллельно в двух вкладках терминала, не ковыряясь в make.conf? Emerge ругаться не будет?

Comment

Добавил(а) Alexander Tratsevskiy около 2 лет назад

думаю, что параллельная сборка мало связанных друг с другом пакетов вроде, к примеру, slim и firefox не будет производиться с ошибками.

Emerge сам отслеживает зависимости, отслеживая очередность сборки. Но по видимому не все ebuild-ы корректно указывают все зависимости. От этого иногда случаются ошибки. При сборке в 4 потока вероятность ошибки минимальна.

Кстати, не пробовал, но нельзя ли запускать сборку двух прог параллельно в двух вкладках терминала, не ковыряясь в make.conf? Emerge ругаться не будет?

Практически это одно и тоже.

Comment

Добавил(а) Yuriy Medvedev около 1 года назад

могу ошибаться но параметр должен быть число процессоров Х 2+1
то есть если два яра то получится
EMERGE_DEFAULT_OPTS="--jobs=5"

Спасибо!