Как использовать distcc для предварительной обработки и компиляции всего только удаленно? - PullRequest
1 голос
/ 09 апреля 2019

Справочная информация:

  • У меня 128-ядерный сервер, который я хотел бы использовать в качестве сервера сборки.
  • У меня есть куча клиентских машин, которые работают с не очень новым и не таким мощным ПК. (Невозможно обновить! Не под моим контролем.)

Что я сделал:

  • Я следовал документации distcc .
  • И установил на сервере виртуальную машину с точно такой же версией компилятора, той же версией distcc - в основном тот же дистрибутив, что и на клиентских машинах.
  • После настройки клиентов и серверов я могу строить удаленно. Я могу проверить это с помощью инструмента distccmon-text. Я могу видеть на сервере, есть 8 потоков, запущенных демоном distcc, и которые ожидают будущих сборочных заданий. Это было хорошо в качестве первого шага. Вы можете увидеть вывод ниже, чтобы быть уверенным.

enter image description here

  • Второй шаг: так как клиентские машины являются двухъядерными, а сервер предлагает 128 ядер, и не все клиенты будут компилироваться одновременно, я хотел разгрузить как можно большую часть сборки в сборку. сервер.

Проблемы:

  1. Первая проблема: distcc, независимо от того, как я пытаюсь его настроить, всегда старается равномерно распределить задания сборки на клиенте и сервере. Хотя мой файл конфигурации выглядит так, как показано ниже:
# --- /etc/distcc/hosts -----------------------
# See the "Hosts Specification" section of
# "man distcc" for the format of this file.
#
# By default, just test that it works in loopback mode.
# 127.0.0.1
172.24.26.208/8,cpp,lzo
localhost/0

Что согласно документации distcc должно отдавать более высокий приоритет серверу сборки и более низкий приоритет локальному хосту, поскольку он появляется позже в списке. Кроме того, он должен дать 8 заданий серверу сборки и 0 заданий локальному хосту. Но нет, этого не происходит. После ввода make -j8 он пытается запустить 4 потока на локальном хосте и 4 на удаленном. Не хорошо . Это вы можете увидеть на изображении ниже.

enter image description here

  1. Вторая проблема: Что вы также заметите, так это то, что предварительная обработка выполняется на локальной машине. Для этого есть инструмент, который поставляется с distcc. Он называется "distcc-pump" или режимом насоса и может использоваться следующим образом.
time pump make CC="distcc gcc" CXX="distcc g++" -j8

К сожалению, в режиме насоса или нет, предварительная обработка происходит на localhost, как вы можете видеть на изображении выше. Sad.

Примечание: Программа distcc, с конфигурациями, перечисленными здесь , ни при каких условиях не выдает никаких ошибок и предупреждений ни на сервере, ни на клиентах.

Версии:

  • gcc 4.4.5
  • distcc 3.2rc1.2

(Прежде чем кто-то предложит - «обновить программное обеспечение!», Более новые версии, скорее всего, для меня невозможны. В любом случае, эта версия distcc предлагает необходимые мне функции. Также я могу обновить виртуальную машину сервера но тогда между клиентами и сервером возникнет несоответствие версий компилятора. Клиенты, которых я не могу обновить.)

Любые предложения, отзывы о том, как улучшить эту настройку / (исправить проблемы), приветствуются.

1 Ответ

0 голосов
/ 09 апреля 2019

РЕДАКТИРОВАТЬ: эти решения не работают, я позволю ответ, чтобы никто другой не предложил их снова


Попробуйте

...