Что именно означают фазы distcc?Я уже использую режим насоса?А как мне использовать режим накачки в Cygwin? - PullRequest
4 голосов
/ 27 мая 2011

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

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

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

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

1 Ответ

7 голосов
/ 15 июня 2011

Что именно означают фазы 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

...