Я установил 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 должен принести мне дополнительную производительность!
Есть идеи ? пожалуйста помогите: =)
Спасибо
Сколько ядер у вас всего?
Имейте в виду, что работает make -j4
будет использовать 4 ядра в Всего: Если на вашем локальном компьютере 4 ядра и 4 на вашем сервере, вы должны использовать make -j8
или у вас не будет улучшений по сравнению с компиляцией локально.
Одной из проблем при распространении сборок является то, насколько хорошо построены файлы make.
Если ваш make-файл не сконструирован таким образом, что на самом деле возможно работать параллельно, то использование distcc, вероятно, не будет иметь большого значения.
Не распространяя сборку на другую машину, вы получаете ускорение с опцией -j 4 по сравнению с -j?
в противном случае вы, вероятно, не увидите ускорение только после разгрузки, если только вы не разгрузитесь на действительно быструю машину, поскольку она, вероятно, выполняет только разгрузку одной работы за раз
Не забудьте указать, сколько заданий клиенту разрешено отправлять на любой сервер.
Server/x # where server is the ip and x is the # of jobs
Если вы этого не сделаете, по умолчанию используется значение 4.