|
|
Возраст: 37 C нами с 14.10.2004 Репутация: 94.1
|
|
В свободное время, и когда есть желание, я дома пишу различные программки на C/C++ и, думаю, я такой не один. Так вот если C программы компилируются довольно быстро, то длительность процесса компиляции C++ программ просто раздражает.
Если кто не знает, существует программа distcc, позволяющая распределять нагрузку по компьютерам локальной сети, на которых она установлена. Получаемые объектники никак не зависят от установленных на удаленном компьютере библиотек, т. к. ему на компиляцию передается не сам код, а вывод препроцессора.
Собственно вопрос: кого-нибудь данная тема интересует?
P.S.: товарищей, желающих перекомпилировать весь свой дистр, просьба не беспокоиться. Предполагается, что с помощью distcc вы будете компилировать собственные или довольно небольшие программы, а не грузить компьютеры круглыми сутками, перекомпилируя все без разбора.
|
|
|
|
|
|
|
|
Возраст: 36 C нами с 22.01.2006 Репутация: 256.8
|
|
ZoRG, на unsorted поднимал раньше по ночам distcc - gentoo компилировалась на ура
Если gentoo не собирать - могу круглосуточно открыть для названных ip
Если не в час пик загрузка ~35% от 2*2*1.6GHz Ксеона - процентов 60 свободно, так что должно окупаться.
P.S. объектники зависят от libc, версии gcc и binutils + от платформы
|
|
|
|
|
|
|
|
C нами с 09.04.2005 Репутация: 0.1
|
|
Если конечно есть острая необходимость могу предоставить процессорное время своего круглосуточного севрера Intel Celleron 1.8 GGz. Правда не делал никогда подобных вещей так, что не знаю насколько долго придёться ковыряться с этим.
|
|
|
|
|
|
|
|
Возраст: 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 и полюбоваться, как чужие компьютеры делают за тебя работу.
|
|
|
|
|
|
|
|
Возраст: 35 C нами с 04.02.2005 Репутация: 121.3
|
|
ZoRG писал(а): |
В свободное время, и когда есть желание, я дома пишу различные программки на C/C++ и, думаю, я такой не один. Так вот если C программы компилируются довольно быстро, то длительность процесса компиляции C++ программ просто раздражает.
|
Сколько же строк занимают твои программы, что тебя раздражает время их сборки? У меня проект в 5 тыс. строк полностью собирается за 6 секунд, на двух ядрах (make -j2) — за 3,5. Если включить оптимизацию -O3, то цифры возрастают до 11 и 6 секунд соответственно.
Но ведь никто не заставляет каждый раз пересобирать весь проект с нуля, правда?
|
|
|
|
|
|
|
|
Возраст: 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. Даже если в исходниках подключать не все дерево заголовочных файлова только те, которые нужны для компиляции *.cpp файла, например#include <gtkmm/window.h>
#include <gtkmm/filechooserdialog.h> | то на моем AMD Athlon 64 3200+ полностью программа компилируется полторы минуты (с учетом времени на генерацию зависимостей). Меня такое время не устраивает, особенно когда экспериментируешь с графическим интерфейсом, пробуя разные настройки виджетов и часто перекомпилируясь.
chaser писал(а): |
Но ведь никто не заставляет каждый раз пересобирать весь проект с нуля, правда?
|
Да, это я понимаю - генерирую зависимости в makefile'е и компилирую только те, которые действительно необходимо перекомпилировать. Но несмотря на это все равно получается довольно долго, когда, например, поправлю какой-нибудь заголовочный файл, от которого зависят много других *.cpp файлов. К тому же, в C++, если использовать шаблоны, то весь код, попадающий под шаблон, необходимо подключать как заголовочный файл, что в итоге опять же ведет к увеличению числа перекомпилируемых *.cpp файлов.
|
|
|
|
|
|
|
|
Возраст: 35 C нами с 04.02.2005 Репутация: 121.3
|
|
А можно как-нибудь заставить distcc генерировать 64-битный код на 32-битной машине?
|
|
|
|
|
|
|
|
C нами с 15.04.2005 Репутация: 133.2
|
|
chaser, можно. В gentoo по-крайней мере это делается достаточно просто, можно установить distcc + gcc для генерации кода любой платформы (кросс-компиляция). Я так на 64-битном gentoo unsorted'a по ночам компилировал пакеты для 32-битного gentoo своей машины, если ничего не снесли — то должно работать .
Если в C++ активно использовать шаблоны, то они каждый раз собираются с нуля и это, простите за мой французский, жопа по затратам, но шаблоны — сила, приходится терпеть . Немного помогает ccache.
Добавлено спустя 3 минуты 59 секунд:
Могу дообавить в лист distcc (если надо) AthlonXP 1800+, круглосуточно, домашний сервер.
|
_____________________________ Время не существует, у него нет физического носителя в природе. Его выдумал человек, чтобы измерять скорость.
|
|
|
|
|
|
|
Возраст: 35 C нами с 04.02.2005 Репутация: 121.3
|
|
Рыся, уже разобрался Достаточно было поставить libc6-dev-amd64, а в CXXFLAGS добавить -m64.
Только вот не понял, в случае, если у меня нет каких-то заголовочных файлов, они будут мне переданы по сети? Или вообще все нужные заголовки передаются по сети?
В общем, разрешил общий доступ на chaser.progtech.ru (P-4 2000 MHz).
|
|
|
|
|
|
|
|
Возраст: 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 | и время сократилось до 1 мин. 17 сек.
2 потока я выделил для тебя, т. к. думал, что этим компенсирую время передачи фалов по сети - пока один файл будет передаваться, другой будет компилироваться, и процессор простаивать не будет. Но все время получалось так, что два последних файла уходили тебе, и мой компьютер простаивал. Т. к. он у меня быстрее, а файлов в проекте пока что не очень много, то более выгодным оказался конфигlocalhost/1
chaser.progtech.ru/1 | и - время сократилось до 1 мин. 7 сек.
По моему, очень даже неплохо.
|
|
|
|
|
|
|
|
C нами с 15.04.2005 Репутация: 133.2
|
|
ZoRG, zapas.progtech.ru:3632 (прям сейчас там конверится пара гигабайт в ogg, так что толку от него в ближайшее время мало )
|
_____________________________ Время не существует, у него нет физического носителя в природе. Его выдумал человек, чтобы измерять скорость.
|
|
|
|
|
|
|
C нами с 09.04.2005 Репутация: 0.1
|
|
ZoRG, готово. Сделал за минутку по выше написанному How-to. Прошу опробывать daldon.progtech.ru:3632
Я думаю, что если весь остальной круглосуточный народ подтянеться то пользователи Gentoo будут рады.
У меня версия gcc 4.2.4
|
Последний раз редактировалось: DALDON (12 Окт 2008, 22:47), всего редактировалось 3 раз(а)
|
|
|
|
|
|
|
Возраст: 36 C нами с 22.01.2006 Репутация: 256.8
|
|
Версия gcc должна совпадать кроме последней цифры... На unsorted стоит 4.1.2
Вроде открыл...
|
|
|
|
|
|
|
|
Возраст: 35 C нами с 04.02.2005 Репутация: 121.3
|
|
ZoRG писал(а): |
chaser, попробовал только что твой компьютер в действии.
Без использования distcc компиляция занимала 1 мин. 46 сек.
С конфигомlocalhost/1
chaser.progtech.ru/2 | и время сократилось до 1 мин. 17 сек.
2 потока я выделил для тебя, т. к. думал, что этим компенсирую время передачи фалов по сети - пока один файл будет передаваться, другой будет компилироваться, и процессор простаивать не будет. Но все время получалось так, что два последних файла уходили тебе, и мой компьютер простаивал. Т. к. он у меня быстрее, а файлов в проекте пока что не очень много, то более выгодным оказался конфигlocalhost/1
chaser.progtech.ru/1 | и - время сократилось до 1 мин. 7 сек.
По моему, очень даже неплохо.
|
Компьютер одноядерный и вообще довольно старый. Судя по логам, твои файлы компилятся по 4-7 секунд каждый. Пересылка по сети занимает явно меньше (примерно полсекунды), так что посылать в два потока на мой компьютер явно невыгодно. Кстати, был удивлен объемом кода, получающегося после полного прогона через препроцессор Gtkmm и Boost дают о себе знать.
Да, компьютер используется как роутер/принт-сервер/муз. плеер и большую часть времени простаивает, так что не стесняйтесь его использовать. Правда работает не всегда.
|
|
|
|
|
|
|
|
Возраст: 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 так меняются, причем изменения носят такой характер, что даже более новые версии компилятора не переваривают старые исходники...
|
|
|
|
|
|
|
|
|