Un ensemble de correctifs a été publié qui accélère la construction du noyau Linux de 50 à 80 %

Ingo Molnar, développeur bien connu du noyau Linux et auteur du planificateur de tâches CFS (Completely Fair Scheduler), a proposé de discuter sur la liste de diffusion des développeurs du noyau Linux une série de correctifs qui affectent plus de la moitié de tous les fichiers des sources du noyau et fournir une augmentation de la vitesse de reconstruction complète du noyau de 50 à 80 % en fonction des paramètres. L'optimisation mise en œuvre est remarquable dans la mesure où elle est associée à l'ajout du plus grand ensemble de changements dans l'histoire du développement du noyau - 2297 25 correctifs ont été proposés pour inclusion à la fois, modifiant plus de 10 15 fichiers (XNUMX XNUMX fichiers d'en-tête dans le "include /" et "arch/*/include/" et XNUMX XNUMX fichiers avec les textes sources).

Le gain de performances est obtenu en modifiant la méthode de traitement des fichiers d'en-tête. Il est à noter qu'en trente ans de développement du noyau, l'état des fichiers d'en-tête a pris un aspect déprimant en raison de la présence d'un grand nombre de dépendances croisées entre les fichiers. La restructuration du fichier 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 types et les API pour les différents sous-systèmes du noyau.

Parmi les changements apportés : séparer les fichiers d'en-tête de haut niveau les uns des autres, éliminer les fonctions en ligne qui lient les fichiers d'en-tête, séparer les fichiers d'en-tête par types et API, garantir un assemblage séparé des fichiers d'en-tête (environ 80 fichiers avaient des dépendances indirectes interférant avec l'assemblage, exposées via autres fichiers d'en-tête), ajout automatique de dépendances aux 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 de 1 à 2 ordres de grandeur la taille des fichiers d'en-tête traités au stade du post-prétraitement. Par exemple, avant l'optimisation, l'utilisation du fichier d'en-tête « linux/gfp.h » entraînait 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 94 fichiers dépendants. Ou un autre exemple : lors du prétraitement du fichier « kernel/pid.c » sans patch, 36 XNUMX lignes de code sont incluses, dont la plupart ne sont pas utilisées dans pid.c. La séparation des fichiers d'en-tête a permis de réduire de trois fois la quantité de code traité, réduisant ainsi le nombre de lignes traitées à XNUMX XNUMX.

Lorsque le noyau a été complètement reconstruit avec la commande « make -j96 vmlinux » sur un système de test, l'application des correctifs a montré une réduction du temps de build de la branche v5.16-rc7 de 231.34 à 129.97 secondes (de 15.5 à 27.7 builds par heure), et a également augmenté l'efficacité de l'utilisation des cœurs de processeur lors des assemblages. Avec une construction incrémentielle, l'effet de l'optimisation est encore plus perceptible - le temps de reconstruction du noyau après avoir apporté des modifications aux fichiers d'en-tête a considérablement diminué (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 et 64 bits).

Source: opennet.ru

Ajouter un commentaire