Лучшее аппаратное / программное решение для параллельных марок?

У нас есть система сборки на основе Linux, в которой сборка состоит из множества различных встроенных целей (с включенными соответственно различными драйверами и наборами функций), каждая из которых построена с помощью другого единого главного дерева исходного кода.

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

Я рассмотрел следующие возможные решения:

  • Много отдельных сборочных машин. Недостатки: множество копий общего кода или работа с (медленного) общего диска. Больше систем для обслуживания.
  • Меньшее количество многопроцессорных машин (возможно, двухъядерных) с быстрым чередованием локального хранилища RAID. Недостатки: я не уверен, как это будет масштабироваться. Кажется, что объем был бы узким местом, но я не знаю, насколько хорошо Linux обрабатывает SMP в наши дни.
  • Аналогичная машина SMP, но с гипервизором или Solaris 10 под управлением VMware. Это глупо, или это обеспечит некоторые преимущества планирования? Недостатки: не устраняет проблему узкого места в хранилище.

Я собираюсь просто сесть и поэкспериментировать с этими возможностями, но я хотел проверить, не пропустил ли я что-нибудь. Спасибо!

3 ответа

Что касается программных решений, я могу порекомендовать Icecream. Он поддерживается SUSE и основан на distcc.

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

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

Из вашего вопроса не ясно, подойдут ли ваши текущие make-файлы к этому или вы просто не хотите переходить к чему-то совершенно другому, чем make.

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

Однако, если вас больше всего интересуют быстрые полные перестройки (например, ночные сборки), то вам может быть лучше переписать исходное дерево для каждого подчиненного построения или даже заставить каждое подчиненное построение извлекать свою собственную копию из системы контроля версий., CI-система, такая как Hudson, поможет управлять каждым из подчиненных серверов сборки.

Другие вопросы по тегам