Что именно означают фазы distcc?
Хорошо, это смущает, но я просто потратил четыре часа в Интернете, пытаясь ответить на этот вопрос.В следующий раз я просто вытащу источник и посмотрю на него.Но вы поднимаете хороший вопрос: это удивительно, что это не всегда доступная информация.
ЭТО МОИ УГАДЫ (потому что я не хочу признать, что я потратил впустую четыре часане отвечая на вопрос!) :
- Запуск - в противном случае его можно было бы назвать «инициализация / загрузка», но еще не готов к первому заданию
- Заблокирован - ожидает доступа к локальному файлу или локальному процессору, я наткнулся
на недавние исправления ошибок, которые устанавливают «тайм-аут» на одну секунду, пока он ждет, пока процессор станет доступным, и я знаю, чтодля блокировки время от времени используются файлы flock
нулевой длины - Подключено - процесс инициировал контакт с клиентом, теперь зарезервирован для задания (??) или компилируетсязадание (??)
- препроцесс - выполняет операцию препроцессора
- Conect - рукопожатие с клиентом для атомарной операции, возможно, длястать зарезервированным (??)
- Отправить - отправляет компфайл объекта led обратно клиенту
- Receive - получает исходный код для компиляции или получает сжатые заголовки (если используется режим насоса)
- Done - иначе можно было бы назвать «бездействующим / доступным»
ПРИМЕЧАНИЕ. Из-за алгоритма Google «режим насоса» на самом деле между клиентом происходит некоторое «рукопожатие» (работает distcc
) и волонтер (работает distccd
).Во-первых, в режиме с помпой все заголовки, которые, как ожидается, будут «необходимы», связываются, упаковываются в архив и передаются добровольцу (где он распаковывается в локальное зеркало, подобное тому, которое есть на клиентском компьютере).Тем не менее, представляется, что возможна дальнейшая связь между добровольцем и клиентом для постепенной передачи других заголовков по мере необходимости, что объясняет "более богатые" фазы / состояния связи, перечисленные выше.
Am I already using pump mode?
Я очень сильно сомневаюсь в этом, поскольку вы не настроили его, добавив параметр компиляции через make
или scons
(необходимо запустить алгоритм Google для прогнозирования использования заголовка для пакетирования и транспортировкидобровольцу), и вы не можете найти сценарий "насос".Но я не могу объяснить, что вы видели "Preprocess
" состояния у ваших добровольцев.(Вы не имеете в виду состояние «Preprocess» на ваших клиентах, верно? Это было бы вполне понятно, так как по умолчанию предварительная обработка выполняется на клиенте.)
Скорее, я думаю, что реализация делает это возможно , что аппарат с жестким состоянием будет перемещаться через ВСЕ состояния, ВКЛЮЧАЯ "предварительную обработку", даже если нет предварительной обработки, прежде чем он перейдет к следующему состоянию.Например, даже если он не выполнял предварительную обработку на стороне добровольца, distccd получит исходный файл, запишет его на диск и запустит компилятор.Если вы используете Cywin, это не происходит мгновенно, особенно если это большой исходный файл (особенно после всех включенных в него заголовков).Таким образом, вы можете видеть фазу «предварительной обработки», пока она вручную не начнет следующую фазу для самой операции компиляции.
ЭЙ ... Я не вижу очевидной фазы «компиляции», поэтому ВОЗМОЖНО, чтоФаза «preprocess» включает в себя «compile» или «preprocess-and-compile» (поскольку эти фазы часто объединяются во многих компиляторах).
Извините - я просто догадываюсь.
А как мне использовать режим накачки в Cygwin?
Я не пробовал,но это должно быть возможно.Очевидно, самая распространенная проблема с Cygwin
заключается в том, что некоторые компиляторы Windows не могут обрабатывать настройку по умолчанию TMPDIR
, когда distcc
запускается под Cygwin.Исправление состоит в том, чтобы поместить что-то вроде export TMPDIR=c:/temp
в /etc/profile
FAQ может помочь в большем: http://distcc.googlecode.com/svn/trunk/doc/web/faq.html