Para compilar um pacote de software em uma estação de trabalho com muitos núcleos de CPU (por exemplo, 12), o estágio de configuração geralmente leva muito mais tempo que o estágio de compilação real, porque ./configure
faz os testes um por um, enquanto make -j
executa gcc
e outros comandos em paralelo.
Eu sinto que é um enorme desperdício de recursos manter os 11 núcleos restantes ociosos a maior parte do tempo, esperando ./configure
a conclusão lenta . Por que ele precisa fazer os testes sequencialmente? Cada teste depende um do outro? Eu posso estar enganado, mas parece que a maioria deles é independente.
Mais importante, existem maneiras de acelerar ./configure
?
Edit: Para ilustrar a situação, aqui está um exemplo com o 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
Resultados:
# 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
Com coreutils-8.9 , ./configure
leva 6 vezes mais que make
. Embora ./configure
use menos tempo de CPU (veja os tempos de "usuário" e "sys"), leva muito mais tempo ("real") porque não é paralelo. Repeti o teste algumas vezes (com os arquivos relevantes provavelmente ficando no cache da memória) e os tempos estão dentro de 10%.