Para compilar un paquete de software en una estación de trabajo con muchos núcleos de CPU (digamos 12), la etapa de configuración a menudo toma mucho más tiempo que la etapa de compilación real porque ./configure
realiza las pruebas una por una, mientras se make -j
ejecuta gcc
y otros comandos en paralelo.
Siento que es una gran pérdida de recursos tener los 11 núcleos restantes inactivos la mayor parte del tiempo esperando ./configure
que se complete la lentitud . ¿Por qué necesita hacer las pruebas secuencialmente? ¿Cada prueba depende la una de la otra? Puedo estar equivocado, pero parece que la mayoría de ellos son independientes.
Más importante aún, ¿hay alguna forma de acelerar ./configure
?
Editar: para ilustrar la situación, aquí hay un ejemplo con 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
Con coreutils-8.9 , ./configure
tarda 6 veces más que make
. Aunque ./configure
usa menos tiempo de CPU (mira los tiempos de "usuario" y "sys"), lleva mucho más tiempo ("real") porque no está en paralelo. He repetido la prueba varias veces (con los archivos relevantes probablemente en la memoria caché) y los tiempos están dentro del 10%.