#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