Per compilare un pacchetto software su una workstation con molti core della CPU (diciamo 12), la fase di configurazione spesso richiede molto più tempo della fase di compilazione effettiva perché ./configure
esegue i test uno per uno, mentre make -j
esegue gcc
in parallelo altri comandi.
Sento che è un enorme spreco di risorse avere gli 11 core rimanenti inattivi la maggior parte del tempo in attesa del ./configure
completamento del rallentamento . Perché deve eseguire i test in sequenza? Ogni test dipende l'uno dall'altro? Posso sbagliarmi, ma sembra che la maggior parte di loro sia indipendente.
Ancora più importante, ci sono modi per accelerare ./configure
?
Modifica: per illustrare la situazione, ecco un esempio 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
risultati:
# 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 , ci ./configure
vuole 6 volte di più di make
. Sebbene ./configure
usi meno tempo della CPU (guarda i tempi "utente" e "sys"), ci vuole molto più tempo ("reale") perché non è parallelizzato. Ho ripetuto il test alcune volte (con i file pertinenti probabilmente presenti nella cache di memoria) e i tempi sono entro il 10%.