LINUX.ORG.RU

[gentoo]distcc не уменьшает время компиляции

 


0

0

Хочу ускорить установку ПО на ноутбуке, используя distcc.

Ноутбук: Core2Duo, x86_64, gentoo amd64.

make.conf: FEATURES=distcc, MAKEOPTS=-j3, DISTCC_DIR="/var/tmp/portage/.distcc"; cat /etc/distcc/hosts: localhost heli

Компьютер heli:

2 ксеона E5410, x86_64, gentoo amd64. CCFLAGS и CXXFLAGS такие же, как и на ноутбуке. Запущен distccd, и в make.conf так же прописан distcc.

Короче, хэндбук я читал и делал по нему, и всё работает. Но если на heli собирать систему для него самого, то работают все 8 ядер на полную. Если же с помощью distcc он помогает собирать систему ноутбуку, то, судя по htop, процессоры совсем не загружены, и компиляция происходит отнюдь не быстрее (если не медленнее, чем без distcc). Экспериментировал с X в MAKEOPTS=-jX. X менял от 3 до 22 -- никакого прироста (проверяемый пакет -- pidgin).

Внимание, вопрос: как правильно настроить distcc (или что надо настроить), чтобы максимально использовать потенциал 8-ядерного heli. Для справки: нахожусь в одной сети с ним, данные передаю не через ssh, использую wifi.


самое очевидное -- использовать сжатие

как-то типа DISTCC_HOSTS=localhost/10 heli/10,lzo

fizteh
()
Ответ на: комментарий от Sylvia

ps: через wifi не прогрузите на полную, сжатие lzo включать обязательно

Sylvia ★★★★★
()

Большое спасибо вам обоим за наводку. Решил перечитать man, в итоге добавил в make.conf переменную DISTCC_HOSTS="heli/10,lzo". В /etc/distcc/hosts закоментировал всё.

Остался вопрос: я реально не знаю, каким примерно должно быть X в MAKEOPTS="-jX". Проверять конкретно буду завтра, сейчас прошу подсказать, от какого числа танцевать? На ноуте 2 проца по 2Гц, на heli -- 8, по 2.33Гц каждый. man distcc подсказал в таком случае вообще выкинуть localhost из компилирующих машин.

И второе: в мане кроме опции lzo описывается опция cpp -- включает pump режим (до этого его не использовал). Насколько я понял, если эту опцию не указать, то pump режим запускается так: pump emerge pocket_name. А если указать, то emerge pocket_name уже будет компилировать в pump-mode? Между прочим, man предупреждает, что с pump режимом могут быть какие-то проблемы. Появлялись ли?

И третье: на ноутбуке некоторые пакеты компилируются icc. Для автоматизации изменён bashrc скрипт, и список таких пакетов задаётся в отдельном файле. Если distcc встречает такой пакет, то каким компилятором он будет собран?

Azef
() автор топика
Ответ на: комментарий от Azef

>каким примерно должно быть X в MAKEOPTS="-jX".

классическая рекомендация - число ядер + 1
реальная рекомендация - по наличию памяти, с учетом до 512 Мб физической памяти на один процесс сборки, в случае сборки C++

>man distcc подсказал в таком случае вообще выкинуть localhost из компилирующих машин.


весьма правильно, локальная машина итак будет заниматься препроцессингом, сжатием , отсылкой, приемом, распаковкой и компоновкой

насчет icc , так и используйте CC=icc CXX=icpc
без distcc , иначе наверное будет ошибка...


distcc требует pump , проблемы будут скорее без pump нежели с ним

Sylvia ★★★★★
()
Ответ на: комментарий от Sylvia

>классическая рекомендация - число ядер + 1

>реальная рекомендация - по наличию памяти, с учетом до 512 Мб физической памяти на один процесс сборки, в случае сборки C++

Под процессом сборки здесь понимать компиляцию или препроцессинг? На heli оперативы больше, чем нужно -- 24Гб, на ноуте всего 4. Т.е. начинать стоит с -j9.

Azef
() автор топика
Ответ на: комментарий от Sylvia

С установлением лимита и сжатием heli стал больше загружаться, но канал wifi всё равно не забивается полностью. По крайней мере всё работает. Если добавить к хосту опцию cpp (без неё pump не запускается), и запустить pump emerge, то распределённой компиляции не получается вообще. "failed to distribute, running locally instead".

На heli запущен distccd, на клиенте -- нет. Что надо изменить, чтобы заработал pump?

Azef
() автор топика
Ответ на: комментарий от fizteh

>ЕМНИП не совсем классическая -- обычно 2 * num_cores + 1

Смысла нет же. Половина процессов в среднем простаивать будет.

Я делал тайминги на Core2Quad. До 4-х процессов компиляции прирост линейный. Пять - немного (~10%) быстрее 4-х. Шесть уже с такой же скоростью, как пять работает, иногда даже медленнее.

Всё правильно - по потоку на каждое ядро и один поток запасной, пока IO выполняется :)

KRoN73 ★★★★★
()
Ответ на: комментарий от fizteh

А проблему с pump можете прокомментировать? Коротко: получается plain distcc, но не pump distcc. Чуть выше описал подробнее.

Azef
() автор топика
Ответ на: комментарий от fizteh

> обычно 2 \cdot num_cores + 1

для компиляции из множества мелких файлов , в основном на Си оправдано
например Linux kernel, для C++ с STL например не имеет никакого смысла, num_cores+1 тут работает гораздо лучше, а иногда даже и просто num_cores

Sylvia ★★★★★
()
Ответ на: комментарий от Azef

Не понял, откуда такая проблема была и куда ушла. Постепенно изменял опции в hosts и всё работает как надо. Всем спасибо в этом чате.

Azef
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.