Решили линуксоиды локалки (нашей) состряпать кластер. Но не нашели нормального ПО под 2.6 ядра, на 2.4 переходить никто не хотел. И тогда решили попробовать distcc — ПО для распределенной компиляции. Короче ускорение около 80% при четырех (пока) серверах.
http://www.gentoo.org/doc/en/distcc.xml
Вот дока
Вот скриптик чтобы не скашит сетку как это штатная утила делает (за такое и фильтрануть могут), а смотрит только нужные сервера. Скрипт состряпан за полчасика %)
Он занимается тем, что зачитывает из файла /etc/distcc/allhosts список людей, содержащих distccd, проверяет у них наличие работающего 3632 порта и конфигурирует систему на работу с «живыми».
Файл allhosts содержит строку где-то такого вида:
localhost 10.1.1.67 10.1.1.76 …
себя (localhost) включать обязательно. Разделитель — 1 (один) пробел.
#!/bin/bash if [ ! -f /etc/distcc/allhosts ]; then echo "please create file /etc/distcc/allhosts with space-separated list of hosts" exit -1 fi hosts="" port=3632 n=0 for host in `cat /etc/distcc/allhosts | sed -e 's/ /\n/g'` do #ping it #ping -c 1 -q -W 1 $host 2>&1 > /dev/null #test if port is open perl -e "use IO::Socket; IO::Socket::INET->new(Proto=>\"tcp\", PeerAddr=>\"$host\", PeerPort=>\"$port\", Timeout=>\".10\") || exit -1" if [ $? -ne 0 ]; then echo "$host is down" else echo "$host is up" if [ -z "$hosts" ]; then hosts=$host else hosts="$hosts $host" fi n=$(( $n+1 )) fi done n=$(( $n*2+1 )) #configure distcc distcc-config --set-hosts "$hosts" #patch /etc/make.conf echo "setting -j to $n" sed -e "s/^MAKEOPTS\(.*\)-j\([0-9]\)\(.*\)$/MAKEOPTS=\"-j$n\3/g" /etc/make.conf > /tmp/make.conf mv /tmp/make.conf /etc/make.conf >/dev/null 2>&1
Вот такой вот скриптик. Чтобы сразу перед комиляцией он запускался — линк на emerge, сам emerge убираем куда-нить шоб в PATH его не было, в скриптике пишем:
#!/bin/bash distccscan.sh #это тот скриптик что выше выложен emerge "$@"
И усе :) И будет щастье гентушникам :)
Последние комментарии
- OlegL, 17 декабря в 15:00 → Перекличка 21
- REDkiy, 8 июня 2023 года в 9:09 → Как «замокать» файл для юниттеста в Python? 2
- fhunter, 29 ноября 2022 года в 2:09 → Проблема с NO_PUBKEY: как получить GPG-ключ и добавить его в базу apt? 6
- Иванн, 9 апреля 2022 года в 8:31 → Ассоциация РАСПО провела первое учредительное собрание 1
- Kiri11.ADV1, 7 марта 2021 года в 12:01 → Логи catalina.out в TomCat 9 в формате JSON 1
Вызов sed соверiенно лишний.
есть такая программка — nsmon…. :) делает именно это.
let n++
let n=n+1
let n=2*n+1
hosts="$hosts $host»
не только 1 пробел строго. можно много, можно табудяцию, можно по одному на строчку.
а localhost можно явно прописать тут
distcc-config --set-hosts «localhost $hosts»
Короче не суть, главное что все пашет на ура! Теперь закупили ящик пива и на выходных будем прикручивать ОпенМосикс к 2.6 :) Попробуем налабать патчик :)
Вот это — правильная идея! Результатом поделишься?
Good Luck,
UT
Если он будет — поделюсь :)
Разобрался как заставить любую софтину компиляцца через distcc. Все они компиляются через make. Вопщем делаю так:
пишу скриптик emerge:
И пихаю его в /bin
Пишу скриптик make и пихаю его в /bin:
В скрипте коса в конце вставил такую строчку:
Вопщем теперь при команду emerge все собирается через distcc, потом запускается make для компиляции проги — и make также через distcc! Проверено: многие проги (например mplayer) в ноомальном виде собираются на локалхосте, через distcc никак. А после всех этих телодвижений тот же самый mplayer собрался у меня через distcc! Ура! Самая главная проблема решена :)