web-dev-qa-db-fra.com

Comment accélérer la compilation du noyau Linux?

J'ai le noyau i5 avec 8 Go de RAM . J'ai installé VMware Workstation 10.0.1 sur ma machine . J'ai Fedora 20 Desktop Edition installé sur VMware en tant qu'OS invité.

Je travaille sur le code source du noyau Linux v 3.14.1. Je développe un planificateur d'E/S pour le noyau Linux. Après toute modification du code, il faut environ 1 heure et 30 minutes pour compiler et installer le code du noyau complet afin de visualiser les modifications.

Compilation et Installation: make menuconfig, make, make modules, make modules_install, make install

Donc, ma question est-il possible de réduire le temps de 1 heure et 30 minutes à seulement 10 à 15 minutes?

17
momersaleem

Ne faites pas make menuconfig pour chaque modification que vous apportez aux sources, car cela déclenchera une compilation complète de tout, peu importe la gravité de votre modification. Cela n’est nécessaire que lorsque l’option de configuration du noyau change, ce qui devrait se produire pendant votre développement.

Il suffit de faire:

make

ou si vous préférez la compilation parallèle:

make -j4

ou quel que soit le nombre de tâches simultanées que vous aimez.

Ensuite, le make install, etc. peut être nécessaire pour le déploiement des fichiers binaires récemment construits, bien sûr.

Une autre astuce consiste à configurer le noyau au minimum nécessaire pour vos tests. J'ai constaté que pour de nombreuses tâches, la compilation UML (User Mode Linux) est la plus rapide. Vous pouvez également trouver utile make localmodconfig au lieu de make menuconfig pour commencer.

22
rodrigo

Il n'est pas nécessaire de réexécuter make menuconfig chaque fois que vous apportez une modification. Cette opération n'est nécessaire qu'une fois pour créer le fichier .config du noyau. (Ou encore si vous éditez des fichiers Kconfig pour ajouter ou modifier des options de configuration, mais cela ne devrait certainement pas se produire souvent.)

Tant que votre .config est laissé seul, l'exécution de make devrait uniquement recompiler les fichiers que vous avez modifiés. Quelques fichiers doivent être compilés à chaque fois, mais la grande majorité ne le sont pas.

5
duskwuff
  1. Utiliser make construction parallèle avec l'option -j
  2. Compilez uniquement pour l’architecture cible, sinon make construira le noyau pour chaque architecture répertoriée.

c'est-à-dire par exemple au lieu de courir:

make

courir:

make Arch=<your architecture> -jN

N est le nombre de cœurs de votre machine (cat /proc/cpuinfo liste le nombre de cœurs). Par exemple, pour i386 cible et machine hôte avec 4 cores (sortie de cat /proc/cpuinfo): 

make Arch=i386 -j4

De même, vous pouvez exécuter les autres cibles (modules, modules_install, install) avec l'indicateur -jN

Remarque: make vérifie les fichiers modifiés et ne compile que les fichiers modifiés de sorte que seule la construction initiale prenne du temps, les générations suivantes étant plus rapides.

3
brokenfoot

make -j utilisera tous les processeurs disponibles.

2
Eric Wang

ccache devrait pouvoir accélérer considérablement vos temps de compilation. Il accélère la recompilation en mettant en cache les compilations précédentes et en détectant le moment où la même compilation est effectuée. Votre première compilation avec ccache sera plus lente car elle doit remplir le cache, mais les générations suivantes devraient être beaucoup plus rapides.

Si vous ne voulez pas vous mêler des configurations ccache, vous pouvez simplement le lancer comme ça pour compiler le noyau:

ccache make
1
Elias

Si vous avez suffisamment RAM et que vous n'utiliserez pas votre machine pendant la construction du noyau, vous pouvez générer un grand nombre de tâches simultanées. Mais assurez-vous que votre RAM est suffisante, sinon votre système se bloquera et se plantera.

0
sohom154

Peut-être qu’en plus des suggestions précédentes, lors de l’utilisation de ccache, vous voudrez peut-être désélectionner CONFIG_GCC_PLUGINS (s’il a été défini), sinon vous risquez d’obtenir de nombreuses erreurs de cache, comme indiqué dans this example.

0
Marcus Linsner

Peut-être qu'en plus des suggestions précédentes, l'utilisation du logiciel ccache ( https://ccache.samba.org/ ) et d'un répertoire de compilation sur le lecteur SSD devrait réduire considérablement le temps de compilation.

0
a.grochmal