1

Я работаю над проектом по разработке ядра Linux (в частности, OpenEmbedded/Yocto Project), в котором компиляция ядра и встроенного программного обеспечения является основной задачей, а мой ноутбук с двухъядерным процессором Core i7-2620M @ 2.70GHz просто не режет его.

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

1 ответ1

2

Чтобы ускорить компиляцию, вы должны создавать объектные файлы в 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-секундный хит производительности!).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .