Чтобы скомпилировать программный пакет на рабочей станции со многими ядрами ЦП (скажем, 12), этап конфигурации часто занимает намного больше времени, чем этап фактической компиляции, поскольку ./configure
выполняет тесты один за другим, в то же время make -j
выполняет gcc
параллельно с другими командами.
Я чувствую, что это огромная трата ресурсов, когда оставшиеся 11 ядер большую часть времени простаивают в ожидании завершения медленной работы ./configure
. Почему нужно проводить тесты последовательно? Каждый тест зависит друг от друга? Я могу ошибаться, но похоже, что большинство из них являются независимыми.
Что еще более важно, есть ли способы ускорить ./configure
?
Изменить: чтобы проиллюстрировать ситуацию, вот пример с GNU Coreutils
cd /dev/shm
rm -rf coreutils-8.9
tar -xzf coreutils-8.9.tar.gz
cd coreutils-8.9
time ./configure
time make -j24
Полученные результаты:
# For `time ./configure`
real 4m39.662s
user 0m26.670s
sys 4m30.495s
# For `time make -j24`
real 0m42.085s
user 2m35.113s
sys 6m15.050s
С coreutils-8.9 , ./configure
занимает в 6 раз больше, чем make
. Хотя ./configure
используется меньше процессорного времени (посмотрите на «user» и «sys» время), это займет намного больше времени («реальное»), потому что оно не распараллелено. Я повторил тест несколько раз (при этом соответствующие файлы, вероятно, остаются в кеше памяти), и время находится в пределах 10%.