Чтобы ускорить компиляцию, вы должны создавать объектные файлы в tmpfs, а не на ротационном жестком диске. Поскольку исходные файлы также кэшируются в памяти, можно с уверенностью предположить, что вы связаны с процессором (при условии, что у вас достаточно ОЗУ). Если у вас есть другие ноутбуки / рабочие столы, я рекомендую добавить их в кластер компилятора для сокращения времени сборки. Компиляция часто может быть распараллелена.
Что касается оборудования:
- Выберите SSD для хранения ОС и исходных файлов, это должно сократить время запуска (время, необходимое для чтения источников в кэш файловой системы).
- Выберите как минимум 8 ГБ ОЗУ, рекомендуется 16 ГБ или более. Мне удалось закончить сборку buildroot со всеми исходными и объектными файлами на 16 Гб tmpfs.
- Фокус на процессоре, чем больше ядер / потоков, тем лучше.
Контрольные показатели (время в секундах, три испытания без запуска других значимых процессов, стандартное отклонение в скобках, -jN
указывает количество параллельных единиц):
CPU C/T RAM -j4 -j8 -j12 -j16
i5-460M 2/4 8 GB 337 (1.28) 344 (1.04)
i5-2320 4/4 24 GB 163 (2.35) 158 (0.20) 159 (0.50) 159 (0.33)
i7-3770 4/8 24 GB 133 (0.31) 110 (0.15) 108 (0.06) 109 (0.26)
distcc (100 Mbit LAN, node -- router -- node)
-j20 (priority: remote i7-3770 16, local i5-460M 4): 186 (7.36)
-j20 (priority: local i5-460M 4, remote i7-3770 16): 184 (1.40)
-j20 (priority: local i7-3770 16, remote i5-460M 4): 104 (2.26)
-j24 (priority: local i7-3770 16, remote i5-460M 8): 101 (1.24)
C/T = Core /Threads, -j12, -j16 были пропущены для i5-460M, так как в любом случае это было бы очень медленно.
Время для копирования исходных файлов в tmpfs (из SSD) не было включено, цифры показывают сырую производительность для make bzImage modules
(ссылка на скрипт тестирования). Файл подкачки не использовался.
Процессы distcc, по-видимому, связаны с вводом / выводом при использовании моего ноутбука в качестве локального, во время просмотра vnstat я обнаружил, что TX+RX зависает со скоростью около 80 Мбит / с. Также важно установить для локального узла distcc значение localhost (а не адрес узла), так как в противном случае это приведет к снижению производительности (для локального i7-3770, удаленного i5-460M, -j20 привел к 144 (sdev 0.65) Это 40-секундный хит производительности!).