Fast Kernel Headers, un ensemble de correctifs qui accélèrent la compilation du noyau de 50 à 80 %

Ingo Molnar, un développeur de noyau Linux bien connu et auteur du planificateur de tâches CFS a proposé pour la discussion sur la liste de diffusion du développement du noyau Linux un certain nombre de correctifs, affectant plus de la moitié de tous les fichiers dans la source du noyau et fournissant une augmentation globale de la vitesse de reconstruction du noyau de 50 à 80 % selon la configuration.

L'optimisation mise en place est remarquable en ce qu'il est associé à l'ajout du plus grand ensemble de modifications dans l'histoire du développement du noyau : ils ont prévu d'inclure 2297 correctifs à la fois, modifiant plus de 25 XNUMX fichiers.

Gain de performances est obtenu en modifiant la méthode de gestion du fichier d'en-tête. Il est à noter qu'au cours des trente années de développement du noyau, l'état des fichiers d'en-tête a pris une forme lamentable en raison de la présence d'un grand nombre de dépendances croisées entre les fichiers.

La restructuration des fichiers d'en-tête a duré plus d'un an et a nécessité une refonte importante de la hiérarchie et des dépendances. Au cours de la restructuration, des travaux ont été effectués pour séparer les définitions de type et les API pour les différents sous-systèmes du noyau.

J'ai le plaisir d'annoncer la première version publique de mon nouveau projet "Fast Kernel Headers" sur lequel je travaille depuis fin 2020, qui est une refonte complète de la hiérarchie des en-têtes et des dépendances des en-têtes du noyau Linux, avec le double objectif de :

- accélérer la construction du noyau (temps de construction absolu et incrémentiel)

- type de découplage du sous-système et des définitions API les uns des autres

Comme la plupart des développeurs de noyau le savent, il y a environ environ 10,000 30 en-têtes .h principaux dans le noyau Linux, dans les hiérarchies include / et arch / * / include /. Au cours des XNUMX dernières années et plus, ils ont évolué en un ensemble compliqué et douloureux de dépendances croisées que nous appelons affectueusement « l'enfer des dépendances ».

Parmi les modifications apportées figurent : séparation des fichiers d'en-tête de haut niveau les uns des autres, exclusion des fonctions en ligne liant les fichiers d'en-tête, mappage des fichiers d'en-tête pour les types et les API, fourniture d'un ensemble séparé de fichiers d'en-tête (environ 80 fichiers avaient des dépendances indirectes qui interfèrent avec l'assemblage, exposées via d'autres fichiers d'en-tête de fichiers), ajout automatique de dépendances à Fichiers ".h" et ".c", optimisation pas à pas des fichiers d'en-tête, utilisation du mode "CONFIG_KALLSYMS_FAST = y", consolidation sélective des fichiers C en blocs d'assemblage pour réduire le nombre de fichiers objets.

En conséquence, le travail effectué a permis de réduire la taille des fichiers d'en-tête traitésdans l'étape de post-prétraitement de 1 à 2 ordres de grandeur.

  • Par exemple, avant l'optimisation, l'utilisation du fichier d'en-tête "linux / gfp.h" a entraîné l'ajout de 13543 303 lignes de code et l'inclusion de 181 fichiers d'en-tête dépendants, et après optimisation, la taille a été réduite à 26 lignes et XNUMX fichiers dépendants.
  • Autre exemple : le prétraitement du fichier "kernel / pid.c" non corrigé connecte 94 36 lignes de code, dont la plupart ne sont pas utilisées dans pid.c. Le fractionnement des fichiers d'en-tête nous a permis de réduire la quantité de code traité trois fois, réduisant le nombre de lignes traitées à XNUMX XNUMX.

Lorsque le noyau a été complètement reconstruit avec la commande "make -j96 vmlinux" sur le système de test, le correctif a montré une réduction du temps de compilation de la branche v5.16-rc7 de 231,34 à 129,97, 15,5 secondes (de 27,7 à XNUMX builds par heure) et a également augmenté l'efficacité de l'utilisation du cœur du processeur pendant la construction.

Avec une compilation incrémentale, l'effet d'optimisation est encore plus perceptible : le temps de reconstruction du noyau après avoir apporté des modifications aux fichiers d'en-tête a été considérablement réduit (de 112% à 173%, selon le fichier d'en-tête modifié).

Les optimisations ne sont actuellement disponibles que pour les architectures ARM64, MIPS, Sparc et x86 (32 bits et 64 bits).

Finement si vous souhaitez en savoir plus, vous pouvez vérifier les détails dans le lien suivant


Le contenu de l'article adhère à nos principes de éthique éditoriale. Pour signaler une erreur, cliquez sur c'est par ici !.

Soyez le premier à commenter

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.

*

*

  1. Responsable des données: Miguel Ángel Gatón
  2. Finalité des données: Contrôle du SPAM, gestion des commentaires.
  3. Légitimation: votre consentement
  4. Communication des données: Les données ne seront pas communiquées à des tiers sauf obligation légale.
  5. Stockage des données: base de données hébergée par Occentus Networks (EU)
  6. Droits: à tout moment, vous pouvez limiter, récupérer et supprimer vos informations.

bool (vrai)