Чтобы скомпилировать программный пакет на рабочей станции со многими ядрами ЦП (скажем, 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%.