Можно ли увеличить -j distcc в 5 раз? - PullRequest
4 голосов
/ 05 января 2010

Поскольку distcc не может сохранять состояния и просто позволяет отправлять задания и заголовки и разрешать этим серверам использовать только отправленные данные, а также выполнять предварительную обработку и компиляцию, я думаю, что у самого последнего distcc есть проблема с масштабируемостью.
В моей локальной среде сборкикоторый имеет ок.10000 файлов c / c ++ для сборки, я мог сделать только в 2 раза быстрее, чем не использовать distcc (но используя make -j) при наличии 20 серверов сборки.
Как вы думаете, в чем проблема?

Если кто-то достиг масштабируемости более 10 - 20 раз, используя make -j и distcc, пожалуйста, дайте мне знать.

В следующем продукте утверждается, что невозможно масштабировать make -j и distccбыстрее, чем в 5 раз.http://www.electric -cloud.com / products / electricaccelerator.php

Я думаю, что это можно улучшить следующим образом:

  • Разрешение серверу distccd поддерживать сеансы
  • Привязанные к этим сеансам, они будут кешировать свои собственные каталоги заголовков
  • Предварительная обработка будет выполняться по требованию с сервера distccd
  • Это будет сделано через библиотеку LD_PRELOADed libdistcc.soкоторый заменит системные / открытые системные вызовы и извлекает заголовочные файлы по сети....

Кто-нибудь делал такие вещи?


Я думаю, что Electric Cloud делает подобные вещи, но я думаю, что у нас есть больше места для оптимизации:

  1. Серверы должны использовать один и тот же репозиторий исходного кода в очень быстрой сетевой файловой системе.
  2. Мы должны выполнить синтаксический анализ файла сборки и включить параллельный анализ заголовка.

  3. кажется довольно сложным без резкого изменения описаний сборки.
    Любые идеи, предшествующий уровень техники, обходной путь приветствуется.

1 Ответ

2 голосов
/ 07 июня 2010

Да, distcc может увеличиваться намного выше 5x.

Мы должны выяснить, что является ограничивающим фактором в вашей среде.

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

  2. Возможно, многие задания, которые выполняет клиент, по какой-то причине не могут быть распределены. Журнал клиента distcc скажет вам, если это так.

  3. Возможно, по какой-то причине клиент перегружен и не может выполнять задания достаточно быстро; тем не менее, очень вероятно, что вы получите более 2 рабочих мест, прежде чем ударить это.

  4. Возможно, серверы перегружены и больше не могут принимать задания. Но если у вас есть 20 серверов, они должны иметь хотя бы один сервер.

  5. Возможно, сеть насыщена, и клиент и сервер блокируют ее (маловероятно для GbE; возможно на 100 Мб.)

Думать о том, как держать сеансы открытыми, преждевременно, пока вы не узнаете, что ограничивающим фактором является начало сеансов.

Это, вероятно, # 1 или # 2. Разместите отрывок из вашего журнала.

...