Проблема 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? в противном случае вы, скорее всего, не увидите ускорение только после разгрузки, если только вы не разгрузитесь на действительно быструю машину, поскольку она, вероятно, выполняет только разгрузку одной работы за раз