2011-07-01

Распределённая сборка ядра (distcc + coLinux)

В крайнее время приходится часто пересобирать ядро..
Эксперименты, переезд с 2.6.36 на 3.0 через все промежуточные версии (с целью узнать где именно попортилась загрузка). Разные процессорные платы, разные надобности. Но пост не про это.
Машинка довольно древняя у меня - атлон одноядерный - да и остальные не очень свежие..
Разве что есть пара машинок под управлением хрюшки - четырёхядерных корей2..
При чём тут остальные? Захотелось использовать distcc.

Нормального кросскомпилятора под цыгвин как ни странно не нашлось (тот gcc что в цигвине даёт бинарники пригодные для работы лишь в цигвине - то есть не годятся linux).
А уж если ядро собирать под что-то нестандартное (типа arm) - жуть.

Благо все кошерные операционки 10.04 - то есть gcc там как минимум один и тот же.
А некошерные использовал с тем же 10.04 но только через coLinux.

1. Готовим образ системы ubuntu для coLinux. Штатная установка ubuntu.
2. Доставляем во все ubuntu (в том числе под coLinux) build-essential и distcc.
в /etc/default/distcc разрешаем автозапуск и доступ из моей подсети:
STARTDISTCC="true"
ALLOWEDNETS="192.168.0.0/16"

3. Размножаем образ coLinux на некошерных машинах. И стартуем.
start colinux-daemon.exe -t nt @distcc.conf

distcc.conf:

kernel=cl/vmlinux

hda=C:\Tools\coLinux\ubuntu-10_04.img
hdb=C:\Tools\coLinux\swap.img
root=/dev/ram load_ramdisk=1 prompt_ramdisk=0 ramdisk_size=10000
mem=640

root=/dev/hda
ro
cocon=140x60
eth0=tuntap,"TAP-coLinux"
eth1=ndis-bridge,"Ethernet"

4. Запускаем сборку ядра:
$ cat run.make
BPWD=$PWD
cd ../modules
MPWD=$PWD
cd ../build/source
export DISTCC_HOSTS='192.168.1.179 192.168.1.121 localhost ubi1 ubi2 ubit'
#DISTCC_VERBOSE=1 DISTCC_LOG=$BPWD/distcc.log screen -mS mk bash -c "time make -j9 CC='ccache distcc' O=$BPWD;read;make INSTALL_MOD_PATH=$MPWD INSTALL_PATH=$MPWD/boot O=$BPWD modules_install install"
DISTCC_VERBOSE=1 DISTCC_LOG=$BPWD/distcc.log screen -mS mk bash -c "time make -j9 CC='distcc --pipe' O=$BPWD;read;make INSTALL_MOD_PATH=$MPWD INSTALL_PATH=$MPWD/boot O=$BPWD modules_install install 2>&1"

Особой пользы от ccache кроме разрастающегося кеша не заметно.
И с ccache нельзя использовать distcc в режиме pipe.. Но может быть вы увидите какой-то профит..

И ещё один большой подводный камушек - coLinux не использует больше одного ядра.
То есть загрузка процессора некошерной машины выше 100% не будет.. (на четырёх ядрах можно было бы нагрузить до 400% - по некошерным оценкам 100% загрузки на четырёх ядрах это 25%)..

PROFIT: На 6 машинах ядро собирается "с нуля" за 5-6 минут.. Намного лучше чем на одном моём.

Ну и отсутствие трекера distcc серверов немного напрягает - чего бы машины было обаруживать сразу по их появлению в сети?

distcc сборку в нативном cygwin можно будет использовать при пересборке чего-то внутри cygwin - тогда все ядра будут задействованы..

Комментариев нет: