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?
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.
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.
make
construction parallèle avec l'option -j
c'est-à-dire par exemple au lieu de courir:
make
courir:
make Arch=<your architecture> -jN
où 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.
make -j
utilisera tous les processeurs disponibles.
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
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.
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.
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.