Оценка относительного использования процессора во время компиляции - PullRequest
0 голосов
/ 18 марта 2009

Во время компиляции этим утром у меня была мысль.

На выделенном Linux-компьютере (например, под управлением Fedora) пользователи могут удаленно войти и скомпилировать (используя gcc) свое программное обеспечение c ++, которое хранится на их собственных компьютерах (в небольшой локальной сети), связанных символическими ссылками, Коробка Linux.

Предположим, что каждый пользователь сейчас выполняет один и тот же код ... Один пользователь может скомпилировать и связать свой код за 10 минут.

Это займет 2 пользователя 20 минут в общей сложности, чтобы скомпилировать одновременно А как насчет 3 или 10 пользователей?

Есть ли издержки, которые дают убывающую отдачу по мере увеличения пользователей?

В качестве дополнительного вопроса - Какие у вас есть советы по повышению эффективности компиляции в этой настройке?

Ответы [ 4 ]

2 голосов
/ 18 марта 2009

Я предлагаю distcc.

0 голосов
/ 18 марта 2009

Компиляция в основном ограничена ЦП, поэтому при условии, что у вас достаточно ОЗУ, вы можете ожидать, что количество времени компиляции будет приблизительно (время на задачу) * (количество задач) / (количество процессоров / ядер в системе). (Любопытно, что я выполнил 'make -j' на 3-х ядерной системе в моем проекте, и его скорость была увеличена более чем в 3 раза, поэтому, возможно, возникли какие-то проблемы с блокировкой, препятствующие запуску последовательной сборки на полной скорости.)

Почему пользователи не компилируют свои программы на своих компьютерах?

0 голосов
/ 18 марта 2009

Всегда возникают накладные расходы из-за:

  • планирование потребностей
  • конфликтующие во времени операции ввода / вывода

Последний будет самым важным для вас, поскольку доступ к сети значительно медленнее, чем, например, доступ к диску. Здесь может помочь предварительное кэширование (сначала получить все файлы локально, а затем начать компиляцию). Новые параллельные пользователи не будут препятствовать уже начатым сборкам.

0 голосов
/ 18 марта 2009

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

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

...