Что именно означают фазы distcc? Я уже использую режим pump? И как мне использовать режим pump в Cygwin?

#cygwin #distcc

#cygwin #distcc

Вопрос:

Из того, что я прочитал, следует, что для использования режима pump с distcc требуется, чтобы вы инкапсулировали make в pump скрипт. Однако у меня его нет в моем path, и я не могу найти его в виде пакета или включенного в distcc package для Cygwin.

Однако, когда я компилирую с distcc и использую distccmon-text для отслеживания того, с какими хостами осуществляется контакт, и их фазы, я ясно вижу, что некоторые из них иногда находятся в фазе предварительной обработки. Я думал, что вся предварительная обработка была выполнена на клиенте, выполняющем make script, когда не использовался режим pump. И что вся идея режима pump заключалась в предварительной обработке на удаленных хостах (и, следовательно, требовала тех же файлов include).

Это привело меня в замешательство. Мой главный вопрос таков: что именно означают фазы: запуск, Заблокированный, подключенный, предварительная обработка, Подключение, отправка, получение и выполнение distcc?

И в качестве дополнительного вопроса: как я могу использовать режим pump с distcc в Cygwin?

Ответ №1:

Что именно означают фазы distcc?

Ок, это смущает, но я только что потратил четыре часа в Интернете, пытаясь ответить на этот вопрос. В следующий раз я просто достану исходный код и посмотрю на него. Но вы подняли хороший вопрос: удивительно, что это не легкодоступная информация.

(потому что я не хочу признавать, что потратил четыре часа, не отвечая на вопрос!) ЭТО МОИ ДОГАДКИ:

  • Запуск — иначе можно было бы назвать «инициализацией / загрузкой», еще не готов к первой задаче
  • Заблокирован — ожидает доступа к локальному файлу или локальному процессору, я наткнулся
    на недавние исправления ошибок, которые устанавливали «тайм-аут» на одну секунду, пока он ожидал, пока процессор станет доступен, и я знаю, что он использует « flock » файлы нулевой длины для временной блокировки
  • Подключенный процесс инициировал контакт с клиентом, теперь зарезервирован для задания (??) или компилирует задание (??)
  • Предварительная обработка — выполняет операцию предварительной обработки
  • Conect — обменивается рукопожатием с клиентом для атомарной операции, возможно, чтобы стать зарезервированным (??)
  • Отправить — отправляет скомпилированный объектный файл обратно клиенту
  • Receive — должен ли принимаемый исходный код быть скомпилирован или получать архивированные заголовки (если используется режим pump)
  • Готово — иначе можно было бы назвать «неработающий / доступный»

ПРИМЕЧАНИЕ: Из-за алгоритма Google «pump-mode» на самом деле происходит довольно сильное «рукопожатие» между клиентом (запущенным distcc ) и добровольцем (работающим distccd ). Во-первых, в режиме pump все заголовки, которые, как ожидается, будут «необходимы», объединяются, архивируются и передаются добровольцу (где они разархивируются в локальное зеркало, подобное тому, что на клиентском компьютере). Однако, похоже, что возможна некоторая дальнейшая связь между добровольцем и клиентом для постепенной передачи других заголовков по мере необходимости, так что это объяснило бы «более насыщенные» фазы / состояния связи, перечисленные выше.

 Am I already using pump mode?
  

Я очень сомневаюсь в этом, поскольку вы не настроили его, обернув опцию compile через make или scons (необходимо для запуска алгоритма Google для прогнозирования использования заголовка для объединения и транспортировки добровольцу), и вы не можете найти скрипт «pump». Но я не могу объяснить, почему вы видите состояния « Preprocess » у своих добровольцев. (Вы не имеете в виду состояние «Предварительной обработки» на ваших клиентах, верно? Это было бы вполне понятно, поскольку по умолчанию предварительная обработка выполняется на клиенте.)

Скорее, я полагаю, реализация делает возможным, что машина с жестким состоянием будет перемещаться по ВСЕМ состояниям, ВКЛЮЧАЯ «предварительную обработку», даже когда никакой предварительной обработки не требуется, прежде чем она перейдет в следующее состояние. Например, даже если он не выполнял предварительную обработку на стороне добровольца, distccd получит исходный файл, запишет его на диск, а затем запустит компилятор. Если вы используете Cywin, это происходит не мгновенно, особенно если это большой исходный файл (особенно после всех включенных в него заголовков). Итак, вы можете увидеть фазу «предварительной обработки», пока она вручную не инициирует следующую фазу для самой операции компиляции.

ПРИВЕТ … Я не вижу очевидной фазы «компиляции», поэтому возможно, что фаза «предварительной обработки» включает в себя «компиляцию» или «предварительную обработку и компиляцию» (поскольку эти фазы часто комбинируются во многих компиляторах в любом случае).

Извините — я просто предполагаю.

И как мне использовать режим pump в Cygwin?

Я не пробовал это, но предполагается, что это возможно. По-видимому, наиболее распространенная проблема с Cygwin заключается в том, что некоторые компиляторы Windows не могут обрабатывать TMPDIR настройки по умолчанию при distcc запуске под Cygwin. Исправление заключается в том, чтобы поместить что-то вроде export TMPDIR=c:/temp в /etc/profile

FAQ может помочь больше:http://distcc.googlecode.com/svn/trunk/doc/web/faq.html