Имя:    Пароль:      Помнить меня       
Unsorted   ~  Software  ~  Linux and Unix  ~  Есть желание наладить распределенную компиляцию? Посредством distcc
На страницу 1, 2, 3  »
ZoRG
Сообщение  12 Окт 2008, 12:13  Ссылка : Ответить с цитатой
Возраст: 37 Пол: Мужской 
C нами с 14.10.2004
Репутация: 94.1

В свободное время, и когда есть желание, я дома пишу различные программки на C/C++ и, думаю, я такой не один. Смайлик Так вот если C программы компилируются довольно быстро, то длительность процесса компиляции C++ программ просто раздражает.

Если кто не знает, существует программа distcc, позволяющая распределять нагрузку по компьютерам локальной сети, на которых она установлена. Получаемые объектники никак не зависят от установленных на удаленном компьютере библиотек, т. к. ему на компиляцию передается не сам код, а вывод препроцессора.

Собственно вопрос: кого-нибудь данная тема интересует?

P.S.: товарищей, желающих перекомпилировать весь свой дистр, просьба не беспокоиться. Весело Предполагается, что с помощью distcc вы будете компилировать собственные или довольно небольшие программы, а не грузить компьютеры круглыми сутками, перекомпилируя все без разбора.
В начало
Профиль : Блог : Личное Сообщение : E-mail
splav
Сообщение  12 Окт 2008, 12:27  Ссылка : Ответить с цитатой
Возраст: 36 Пол: Мужской  Доверенный пользователь
C нами с 22.01.2006
Репутация: 256.8

ZoRG, на unsorted поднимал раньше по ночам distcc - gentoo компилировалась на ура Улыбочка

Если gentoo не собирать - могу круглосуточно открыть для названных ip
Если не в час пик загрузка ~35% от 2*2*1.6GHz Ксеона - процентов 60 свободно, так что должно окупаться.

P.S. объектники зависят от libc, версии gcc и binutils + от платформы
В начало
Профиль : Фотоальбом : Блог : Личное Сообщение : JabberID : ICQ
DALDON
Сообщение  12 Окт 2008, 13:03  Ссылка : Ответить с цитатой
Пол: Мужской  Доверенный пользователь
C нами с 09.04.2005
Репутация: 0.1

Если конечно есть острая необходимость могу предоставить процессорное время своего круглосуточного севрера Intel Celleron 1.8 GGz. Правда не делал никогда подобных вещей так, что не знаю насколько долго придёться ковыряться с этим.
В начало
Профиль : Фотоальбом : Блог : Личное Сообщение
ZoRG
Сообщение  12 Окт 2008, 15:10  Ссылка : Ответить с цитатой
Возраст: 37 Пол: Мужской 
C нами с 14.10.2004
Репутация: 94.1

splav писал(а):
P.S. объектники зависят от libc, версии gcc и binutils + от платформы
Ммм... Я в этом, честно говоря, плохо разбираюсь, но просто интересно: Улыбочка
- от libc, как мне кажется, они вряд ли будут зависеть, ведь на этапе компиляции это, грубо говоря, просто заголовочные файлы, которые попадают в вывод препроцессора, а следовательно, генерируемые удаленной машиной объектники не должны иметь никакого отношения к libc, установленной на ней.
- платформа - ее distcc наверняка контролирует через флаги компиляции, ну или в крайнем случае самому можно задавать.
- gcc и binutils - я понимаю, что разные версии будут генерировать разный объектный код (совершенствуются алгоритмы оптимизации и т. п.), но разве это будет влиять на линковку? И в чем это может выражаться? В ошибке при линковке или в Segmentation fault'ах при работе программы?

splav писал(а):
Если gentoo не собирать - могу круглосуточно открыть для названных ip
Если не в час пик загрузка ~35% от 2*2*1.6GHz Ксеона - процентов 60 свободно, так что должно окупаться.
Буду благодарен, если откроешь для 10.100.43.13. Компилирую только свои программы.
У меня машина гораздо слабее - AMD Athlon 3200+, но работает круглосуточно. В принципе, если кто-нибудь иногда по ночам будет компилить gentoo, против не буду, но если только это не войдет в привычку. Улыбочка Пока что открыл доступ для всех, чтобы, кому интересно, могли попробовать. Если никто наглеть не будет, так и оставлю.

DALDON писал(а):
Если конечно есть острая необходимость могу предоставить процессорное время своего круглосуточного севрера Intel Celleron 1.8 GGz. Правда не делал никогда подобных вещей так, что не знаю насколько долго придёться ковыряться с этим.
Да не, острой необходимости, конечно, нет. Просто возникло желание слегка облегчить жизнь себе и другим. Улыбочка

Настроить его не сложно:
$ apt-get install distcc distccmon-gnome

Серверная часть:
В /etc/default/distcc пишешь что-нибудь вроде (пример моего конфига):
# Defaults for distcc initscript
# sourced by /etc/init.d/distcc

#
# should distcc be started on boot?
#
# STARTDISTCC="true"

STARTDISTCC="true"

#
# Which networks/hosts should be allowed to connect to the daemon?
# You can list multiple hosts/networks separated by spaces.
# Networks have to be in CIDR notation, f.e. 192.168.1.0/24
# Hosts are represented by a single IP Adress
#
# ALLOWEDNETS="127.0.0.1"

ALLOWEDNETS="10.100.0.0/16 10.110.0.0/16 192.168.0.100/32"

#
# Which interface should distccd listen on?
# You can specify a single interface, identified by it's IP address, here.
#
# LISTENER="127.0.0.1"

LISTENER="10.100.43.13"

Клиентская часть:
В /.distcc/hosts пишешь что-нибудь вроде:
localhost/1
10.100.43.13/2
т. е. на твоей машине будет одновременно компилироваться один файл, а на моей - 2 (чтобы снизить потери на ожидание ввода/вывода).

Теперь можешь добавить, например, в ~/.bashrc строки:
export CC="distcc gcc"
export CXX="distcc g++"
и когда будешь компилировать какую-нибудь программу, вместо ./configure && make && make install запускай ./configure && make -j 3 && make install, где -j 3 указывает количество одновременно компилируемых файлов (1 у тебя и 2 у меня).

Запустив make, можно запустить distccmon-gnome и полюбоваться, как чужие компьютеры делают за тебя работу. Улыбочка
В начало
Профиль : Блог : Личное Сообщение : E-mail
chaser
Сообщение  12 Окт 2008, 18:09  Ссылка : Ответить с цитатой
Возраст: 35 Пол: Мужской 
C нами с 04.02.2005
Репутация: 121.3

ZoRG писал(а):
В свободное время, и когда есть желание, я дома пишу различные программки на C/C++ и, думаю, я такой не один. Смайлик Так вот если C программы компилируются довольно быстро, то длительность процесса компиляции C++ программ просто раздражает.


Сколько же строк занимают твои программы, что тебя раздражает время их сборки? У меня проект в 5 тыс. строк полностью собирается за 6 секунд, на двух ядрах (make -j2) — за 3,5. Если включить оптимизацию -O3, то цифры возрастают до 11 и 6 секунд соответственно.
Но ведь никто не заставляет каждый раз пересобирать весь проект с нуля, правда?
В начало
Профиль : Фотоальбом : Блог : Личное Сообщение : JabberID
ZoRG
Сообщение  12 Окт 2008, 18:49  Ссылка : Ответить с цитатой
Возраст: 37 Пол: Мужской 
C нами с 14.10.2004
Репутация: 94.1

chaser писал(а):
Сколько же строк занимают твои программы, что тебя раздражает время их сборки? У меня проект в 5 тыс. строк полностью собирается за 6 секунд, на двух ядрах (make -j2) — за 3,5. Если включить оптимизацию -O3, то цифры возрастают до 11 и 6 секунд соответственно.
В данный момент программа весит всего чуть меньше 6 тыс. строк, но это не главное. Главное - это то, что она использует следующие библиотеки: libtorrent-rasterbar boost gtkmm dbus-c++ libconfig++. Самая тяжелая из них - gtkmm. Даже если в исходниках подключать не все дерево заголовочных файлов
#include <gtkmm.h>
а только те, которые нужны для компиляции *.cpp файла, например
#include <gtkmm/window.h>
#include <gtkmm/filechooserdialog.h>
то на моем AMD Athlon 64 3200+ полностью программа компилируется полторы минуты (с учетом времени на генерацию зависимостей). Меня такое время не устраивает, особенно когда экспериментируешь с графическим интерфейсом, пробуя разные настройки виджетов и часто перекомпилируясь.

chaser писал(а):
Но ведь никто не заставляет каждый раз пересобирать весь проект с нуля, правда?
Да, это я понимаю - генерирую зависимости в makefile'е и компилирую только те, которые действительно необходимо перекомпилировать. Но несмотря на это все равно получается довольно долго, когда, например, поправлю какой-нибудь заголовочный файл, от которого зависят много других *.cpp файлов. К тому же, в C++, если использовать шаблоны, то весь код, попадающий под шаблон, необходимо подключать как заголовочный файл, что в итоге опять же ведет к увеличению числа перекомпилируемых *.cpp файлов.
В начало
Профиль : Блог : Личное Сообщение : E-mail
chaser
Сообщение  12 Окт 2008, 20:34  Ссылка : Ответить с цитатой
Возраст: 35 Пол: Мужской 
C нами с 04.02.2005
Репутация: 121.3

А можно как-нибудь заставить distcc генерировать 64-битный код на 32-битной машине?
В начало
Профиль : Фотоальбом : Блог : Личное Сообщение : JabberID
Рыся
Сообщение  12 Окт 2008, 20:51  Ссылка : Ответить с цитатой
Пол: Мужской  Доверенный пользователь
C нами с 15.04.2005
Репутация: 133.2

chaser, можно. В gentoo по-крайней мере это делается достаточно просто, можно установить distcc + gcc для генерации кода любой платформы (кросс-компиляция). Я так на 64-битном gentoo unsorted'a по ночам компилировал пакеты для 32-битного gentoo своей машины, если ничего не снесли — то должно работать Смайлик.

Если в C++ активно использовать шаблоны, то они каждый раз собираются с нуля и это, простите за мой французский, жопа по затратам, но шаблоны — сила, приходится терпеть Смайлик. Немного помогает ccache.

Добавлено спустя 3 минуты 59 секунд:

Могу дообавить в лист distcc (если надо) AthlonXP 1800+, круглосуточно, домашний сервер.

_____________________________
Время не существует, у него нет физического носителя в природе. Его выдумал человек, чтобы измерять скорость.
В начало
Профиль : Фотоальбом : Блог : Личное Сообщение : E-mail : JabberID
chaser
Сообщение  12 Окт 2008, 21:07  Ссылка : Ответить с цитатой
Возраст: 35 Пол: Мужской 
C нами с 04.02.2005
Репутация: 121.3

Рыся, уже разобрался Улыбочка Достаточно было поставить libc6-dev-amd64, а в CXXFLAGS добавить -m64.

Только вот не понял, в случае, если у меня нет каких-то заголовочных файлов, они будут мне переданы по сети? Или вообще все нужные заголовки передаются по сети?

В общем, разрешил общий доступ на chaser.progtech.ru (P-4 2000 MHz).
В начало
Профиль : Фотоальбом : Блог : Личное Сообщение : JabberID
ZoRG
Сообщение  12 Окт 2008, 21:16  Ссылка : Ответить с цитатой
Возраст: 37 Пол: Мужской 
C нами с 14.10.2004
Репутация: 94.1

Рыся писал(а):
Если в C++ активно использовать шаблоны, то они каждый раз собираются с нуля и это, простите за мой французский, жопа по затратам, но шаблоны — сила, приходится терпеть Смайлик. Немного помогает ccache.
Я правильно понимаю, что ccache не нужен, если перед компиляцией я получаю зависимости посредством gcc -M? Т. е. он нужен только тогда, когда лень писать нормальный makefile, генерирующий и обрабатывающий зависимости перед компиляцией, или если в коде присутствует очень много условной компиляции, и вносимые изменения зачастую отрезаются препроцессором?

Рыся писал(а):
Могу дообавить в лист distcc (если надо) AthlonXP 1800+, круглосуточно, домашний сервер.
Буду премного благодарен.

Добавлено спустя 3 минуты 52 секунды:

chaser писал(а):
Только вот не понял, в случае, если у меня нет каких-то заголовочных файлов, они будут мне переданы по сети? Или вообще все нужные заголовки передаются по сети?
Тебе передается весь вывод препроцессора, а, следовательно, все заголовочные файлы в него уже включены.

chaser писал(а):
В общем, разрешил общий доступ на chaser.progtech.ru (P-4 2000 MHz).
Благодарю.

Добавлено спустя 29 минут 17 секунд:

chaser, попробовал только что твой компьютер в действии. Улыбочка
Без использования distcc компиляция занимала 1 мин. 46 сек.

С конфигом
localhost/1
chaser.progtech.ru/2
и
make -j 3
время сократилось до 1 мин. 17 сек.

2 потока я выделил для тебя, т. к. думал, что этим компенсирую время передачи фалов по сети - пока один файл будет передаваться, другой будет компилироваться, и процессор простаивать не будет. Но все время получалось так, что два последних файла уходили тебе, и мой компьютер простаивал. Т. к. он у меня быстрее, а файлов в проекте пока что не очень много, то более выгодным оказался конфиг
localhost/1
chaser.progtech.ru/1
и
make -j 2
- время сократилось до 1 мин. 7 сек.

По моему, очень даже неплохо. Улыбочка
В начало
Профиль : Блог : Личное Сообщение : E-mail
Рыся
Сообщение  12 Окт 2008, 22:01  Ссылка : Ответить с цитатой
Пол: Мужской  Доверенный пользователь
C нами с 15.04.2005
Репутация: 133.2

ZoRG, zapas.progtech.ru:3632 (прям сейчас там конверится пара гигабайт в ogg, так что толку от него в ближайшее время мало Смайлик)

_____________________________
Время не существует, у него нет физического носителя в природе. Его выдумал человек, чтобы измерять скорость.
В начало
Профиль : Фотоальбом : Блог : Личное Сообщение : E-mail : JabberID
DALDON
Сообщение  12 Окт 2008, 22:09  Ссылка : Ответить с цитатой
Пол: Мужской  Доверенный пользователь
C нами с 09.04.2005
Репутация: 0.1

ZoRG, готово. Сделал за минутку по выше написанному How-to. Прошу опробывать daldon.progtech.ru:3632

Я думаю, что если весь остальной круглосуточный народ подтянеться то пользователи Gentoo будут рады.


У меня версия gcc 4.2.4


Последний раз редактировалось: DALDON (12 Окт 2008, 22:47), всего редактировалось 3 раз(а)
В начало
Профиль : Фотоальбом : Блог : Личное Сообщение
splav
Сообщение  12 Окт 2008, 22:23  Ссылка : Ответить с цитатой
Возраст: 36 Пол: Мужской  Доверенный пользователь
C нами с 22.01.2006
Репутация: 256.8

Версия gcc должна совпадать кроме последней цифры... На unsorted стоит 4.1.2
Вроде открыл...
В начало
Профиль : Фотоальбом : Блог : Личное Сообщение : JabberID : ICQ
chaser
Сообщение  12 Окт 2008, 22:50  Ссылка : Ответить с цитатой
Возраст: 35 Пол: Мужской 
C нами с 04.02.2005
Репутация: 121.3

ZoRG писал(а):

chaser, попробовал только что твой компьютер в действии. Улыбочка
Без использования distcc компиляция занимала 1 мин. 46 сек.

С конфигом
localhost/1
chaser.progtech.ru/2
и
make -j 3
время сократилось до 1 мин. 17 сек.

2 потока я выделил для тебя, т. к. думал, что этим компенсирую время передачи фалов по сети - пока один файл будет передаваться, другой будет компилироваться, и процессор простаивать не будет. Но все время получалось так, что два последних файла уходили тебе, и мой компьютер простаивал. Т. к. он у меня быстрее, а файлов в проекте пока что не очень много, то более выгодным оказался конфиг
localhost/1
chaser.progtech.ru/1
и
make -j 2
- время сократилось до 1 мин. 7 сек.

По моему, очень даже неплохо. Улыбочка


Компьютер одноядерный и вообще довольно старый. Судя по логам, твои файлы компилятся по 4-7 секунд каждый. Пересылка по сети занимает явно меньше (примерно полсекунды), так что посылать в два потока на мой компьютер явно невыгодно. Кстати, был удивлен объемом кода, получающегося после полного прогона через препроцессор Улыбочка Gtkmm и Boost дают о себе знать.

Да, компьютер используется как роутер/принт-сервер/муз. плеер и большую часть времени простаивает, так что не стесняйтесь его использовать. Правда работает не всегда.
В начало
Профиль : Фотоальбом : Блог : Личное Сообщение : JabberID
ZoRG
Сообщение  12 Окт 2008, 23:11  Ссылка : Ответить с цитатой
Возраст: 37 Пол: Мужской 
C нами с 14.10.2004
Репутация: 94.1

Рыся писал(а):
ZoRG, zapas.progtech.ru:3632 (прям сейчас там конверится пара гигабайт в ogg, так что толку от него в ближайшее время мало Смайлик)
Спасибо.

DALDON писал(а):
ZoRG, готово. Сделал за минутку по выше написанному How-to. Прошу опробывать daldon.progtech.ru
distccd[3806] (dcc_execvp) ERROR: failed to exec g++: No such file or directory
distcc[19766] ERROR: compile client_settings.cpp on daldon.progtech.ru/1 failed with exit code 110

distccd[3900] (dcc_execvp) ERROR: failed to exec gcc: No such file or directory
distcc[20959] ERROR: compile main.c on daldon.progtech.ru/1 failed with exit code 110
Похоже не установлены компиляторы.
apt-get install build-essential
должно вылечить.

splav писал(а):
Версия gcc должна совпадать кроме последней цифры... На unsorted стоит 4.1.2
Вроде открыл...
Нда.. А ты прав. Грустно unsorted.ru и zapas.progtech.ru выдают кучу ошибок. Поставил старую версию 4.1 (была 4.2) - начало компилироваться, правда с регулярной выдачей warning'ов, но теперь с этой версией не компилирует компьютер chaser'a. Улыбочка Даже удивительно, неужели от версии к версии заголовочные файлы libc так меняются, причем изменения носят такой характер, что даже более новые версии компилятора не переваривают старые исходники...
В начало
Профиль : Блог : Личное Сообщение : E-mail
Показать сообщения:   
На страницу 1, 2, 3  »

Unsorted   ~  Software  ~  Linux and Unix  ~  Есть желание наладить распределенную компиляцию?

Ответить на тему

Перейти:  





Powered by phpBB   © Unsorted Team  support@unsorted.me  promo@unsorted.me  Полезные скрипты