dist cc - в каких случаях требуется синхронная сетевая файловая система - PullRequest
4 голосов
/ 12 февраля 2020

Два упрощенных make-файла

makefile1

a.txt:
    echo “123144234” > a.txt

t2: a.txt
    cat a.txt > b.txt

makefile2

t1:
    echo “123144234” > a.txt

t2: t1
    cat a.txt > b.txt

Оба make-файла имеют одинаковую функциональность ,

Оба make-файла могут запускаться параллельно, поскольку зависимость от t2 от t1.

Однако существует критическая разница что может? / делает? имеет значение, когда дело доходит до распределенных сборок.

В makefile1 , t2 напрямую зависит от артефакта a.txt, который также совпадает с названием самой цели a.txt. Однако в makefile2 , хотя рецепт и артефакт t1 такие же, как для a.txt, имя цели не a.txt.

Это различие является ключевым, поскольку gnu make (и я предполагаю distcc) НЕ анализирует рецепт - и не анализирует файловую систему во время выполнения - чтобы определить все артефакты для данной цели. В makefile2 , gnu make НЕ создается НИКАКИХ отношений между a.txt и t1.

Когда сборка выполняется как make -j, то есть параллельно, но не распределено, эта разница не имеет значения, потому что все make цели выполняются на одной и той же машине , т.е. все экземпляры make обращаются к одной и той же файловой системе.

Но давайте рассмотрим, что мог ? / делает? происходит во время распределенной сборки, если две цели построены на двух отдельных машинах

В обоих make-файлах рецепт для t2 будет выполняться ПОСЛЕ рецепта для a.txt / t1.

Однако в makefile1 зависимость t2 от a.txt является явной, т. Е. distcc знает , что make t2 на отдельный компьютер, он должен отправить файл a.txt на этот отдельный компьютер.

ВОПРОС

  1. Если makefile2 запущен с использованием distcc, без синхронизированной распределенной файловой системы, а t2 - это make d на другом компьютере, там будет b Ошибка сборки, поскольку a.txt отсутствует на другом компьютере?
  2. Какие есть варианты для распределенной Linux файловой системы?

1 Ответ

3 голосов
/ 18 февраля 2020

distcc является просто заменой gcc. Он использует локальный gcc для предварительной обработки исходного файла, затем отправляет его для компиляции на другой компьютер, получает обратно объектный файл и сохраняет его в локальной файловой системе. distcc не требует общей сетевой файловой системы или синхронизации часов между участвующими хостами.

Есть также новая функция «насоса», которая предварительно обрабатывает на удаленных серверах, но она не требует общей сетевой файловой системы или синхронизации часов.

Ваш make всегда работает локально.

Отвечая на ваши вопросы:

  1. distcc не запускается make. make работает distc вместо gcc. make проверяет зависимости и их временные метки локально.
  2. make запускается локально, и не имеет значения, является ли используемая файловая система локальной или сетевой.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...