Knowledge base dedicated to Linux and applied mathematics.
Accueil > Linux > Commande du jour > Accélérer le processus de compilation et de build avec GNU make
Toutes les versions de cet article : <English> <français>
La construction/compilation fréquente de librairies ou de projets via GNU make peut prendre beaucoup de temps. Pour accélérer ces compilations, on peut utiliser make -jN o๠N est le nombre de build parallèles. Par exemple :
make -j4
fera 4 compilations en parallèle.
Evidemment, vous ne pouvez pas faire quelque chose comme :
make -j256
C’est la meilleure manière de voir votre ordinateur figé !!!
Vous devez donc vérifier les informations matérielles de votre CPU. Combien de coeurs possédez vous (incluant le multi threading) :
NB_CORES=$(grep -c '^processor' /proc/cpuinfo)
Vous pouvez également utiliser dmidecode :
dmidecode -t processor | grep "Core Count"
Core Count: 8
Core Count: 8
ici vous avez deux processeurs (2 fois Core Count) avec 8 coeurs. Vous pouvez également utiliser la commande lspcu :
lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 4
On-line CPU(s) list: 0-3
Thread(s) per core: 1
Core(s) per socket: 4
Socket(s): 1
NUMA node(s): 1
Vendor ID: GenuineIntel
CPU family: 6
Model: 23
Stepping: 7
CPU MHz: 1998.000
BogoMIPS: 4999.98
Virtualization: VT-x
L1d cache: 32K
L1i cache: 32K
L2 cache: 3072K
NUMA node0 CPU(s): 0-3
Une fois le nombre de coeurs déterminé, on doit avoir un système qui continue à répondre durant la compilation. On utilise l’option -l de make
-l [load], —load-average[=load]
Spécifie qu’aucun nouveau job (commande) doit àªtre lancé si d’autres jobs sont en cours d’exécution et que la chage moyenne est d’au moins le paramètre load
Pour bénéficier d’une exploitation maximale des processeurs sans figer votre système, exportez la variable d’environnement MAKEFLAGS :
NB_CORES=$(grep -c '^processor' /proc/cpuinfo)
export MAKEFLAGS="-j$((NB_CORES+1)) -l${NB_CORES}"
make
Ou :
NB_CORES=$(grep -c '^processor' /proc/cpuinfo)
make -j$((NB_CORES+1)) -l${NB_CORES}
cela signifie que la charge moyenne ne dépasse pas le nombre de coeurs.
Pour garder cette configuration de manière persistente, ajouter dans votre.bashrc ou .bash_profile :
NB_CORES=$(grep -c '^processor' /proc/cpuinfo)
export MAKEFLAGS="-j$((NB_CORES+1)) -l${NB_CORES}"
Si vous ne voulez pas opérer de configuration particulière :
make -j9 -l8
Vous pouvez si le montant de votre RAM le permet doubler le nombre de jobs par rapport au nombre de CPU, notamment si votre CPU supporte l’hyper-threading. Typiquement, si vous avez 32 dual cores, vous pouvez lancer 128 jobs (32x2-coeursx2-hyperthreading). Merci à Andrew Stormont pour sa contribution.