Проблема distcc: действительно ли это ускоряет компиляцию?

Я установил distcc и Cmake для небольшого C++ проекта. У меня есть две машины: так что есть один клиент, где компиляция выполняется локально, и один сервер, где компиляция выполняется "удаленно".

Я следовал инструкциям по установке и настройке distcc, но не вижу улучшения при компиляции своего проекта, используя следующие простые шаги:

CXX="distcc g++" cmake my_project && make -j4

Я проверил все, на клиентских и серверных машинах, и не видел конкретного поведения. Все коды возврата 0 (ОК) в журналах и нет сообщений об ошибках. Как будто все работает, но без выигрыша времени. Я также установил инструмент distccmon-gui и проверил, что обе машины используются во время компиляции.

Наконец, я попробовал с 4 машинами и получил те же результаты, то есть 0 улучшений.

Единственное, что выглядит действительно странно, это время общения:

COMPILE_OK exit:0 sig:0 core:0 ret:0 time:151ms 
COMPILE_OK exit:0 sig:0 core:0 ret:0 time:156ms 
COMPILE_OK exit:0 sig:0 core:0 ret:0 time:182ms 
COMPILE_OK exit:0 sig:0 core:0 ret:0 time:201ms 
COMPILE_OK exit:0 sig:0 core:0 ret:0 time:163ms 
COMPILE_OK exit:0 sig:0 core:0 ret:0 time:202ms 

Даже на локальном хосте задержка составляет около 200 мс для каждой выполненной работы.

В конце концов, когда я использую distcc, у меня есть немного времени, которое я приписываю связям между сервером и клиентом.

Кто-нибудь уже имел такую ​​проблему с distcc и знает, где я должен искать, или где я должен исследовать? Я действительно застрял в этом и считаю, что distcc должен принести мне дополнительную производительность!

Есть идеи? пожалуйста помогите:=)

Спасибо

3 ответа

Не забудьте указать, сколько заданий клиенту разрешено отправлять на любой сервер.

Server/x # where server is the ip and x is the # of jobs

Если вы этого не сделаете, по умолчанию используется значение 4.

Сколько ядер у вас всего?

Имейте в виду, что работает make -j4 будет использовать всего 4 ядра: если на вашем локальном компьютере 4 ядра и 4 на вашем сервере, вы должны использовать make -j8 или у вас не будет улучшений по сравнению с компиляцией локально.

Одна проблема с распространением сборок заключается в том, насколько хорошо сконструированы файлы make.

Если ваш make-файл не сконструирован таким образом, что на самом деле возможно работать параллельно, то использование distcc, вероятно, не будет иметь большого значения.

Не распространяя сборку на другую машину, вы получаете ускорение с опцией -j 4 по сравнению с -j? в противном случае вы, скорее всего, не увидите ускорение только после разгрузки, если только вы не разгрузитесь на действительно быструю машину, поскольку она, вероятно, выполняет только разгрузку одной работы за раз

Другие вопросы по тегам