Fast Kernel Headers, un conjunt de pegats que acceleren la compilació del Kernel en un 50-80%

Ingo Molnar, un conegut desenvolupador del kernel de Linux i autor de CFS Task Scheduler va proposar per a la discussió de la llista de correu de desenvolupament del kernel de Linux una sèrie de pegats, que afecten més de la meitat de tots els arxius a la font del kernel i proporciona un augment en la velocitat total de reconstrucció del nucli de 50 -80% depenent de la configuració.

L'optimització implementada és notable perquè està associada amb l'addició del conjunt de canvis més gran en la història del desenvolupament del nucli: es van proposar incloure 2297 pegats alhora, canviant més de 25 mil arxius.

El guany de rendiment s'aconsegueix canviant el mètode de maneig de fitxers de capçalera. Cal assenyalar que durant trenta anys de desenvolupament del nucli, l'estat dels fitxers de capçalera ha adquirit una forma depriment a causa de la presència d'una gran quantitat de dependències creuades entre fitxers.

La reestructuració dels arxius de capçalera va prendre més d'un any i va requerir un redisseny significatiu de la jerarquia i les dependències. Durant la reestructuració, es va treballar per separar les definicions de tipus i les API per als diferents subsistemes del nucli.

Em plau anunciar la primera versió pública del meu nou projecte Fast Kernel Headers en què he estat treballant des de finals de 2020, que és una reelaboració integral de la jerarquia de capçaleres i les dependències de capçaleres del nucli de Linux , amb el doble objectiu de :

– accelerar la construcció del nucli (ambdós temps absoluts i incrementals de construcció)

– desacoblament de tipus del subsistema i l'API de definicions entre si

Com la majoria dels desenvolupadors del kernel saben, hi ha al voltant de ~10,000 encapçalaments .h principals al kernel de Linux, a les jerarquies include / i arch/*/include/. En els darrers més de 30 anys, s'han convertit en un conjunt complicat i dolorós de dependències creuades que anomenem afectuosament 'Infern de la dependència'.

Entre els canvis realitzats hi ha: separació de fitxers de capçalera d'alt nivell entre si, exclusió de funcions en línia que vinculen fitxers de capçalera, assignació de fitxers de capçalera per a tipus i API, provisió d'un conjunt separat de fitxers de capçalera (al voltant de 80 fitxers tenien dependències indirectes que interfereixen amb l'assemblatge, exposats a través d'altres fitxers de capçalera), addició automàtica de dependències als fitxers «.h» i «.c», optimització pas a pas dels fitxers de capçalera, ús del mode»CONFIG_KALLSYMS_FAST=y», consolidació selectiva de fitxers C en blocs d'assemblatge per reduir el nombre de fitxers dobjectes.

Com a resultat, el treball realitzat va permetre reduir la mida dels arxius de capçalera processatsa l'etapa posterior al preprocessament en 1-2 ordres de magnitud.

  • Per exemple, abans de l'optimització, l'ús del fitxer de capçalera «linux/gfp.h» va donar com a resultat l'addició de 13543 línies de codi i la inclusió de 303 fitxers de capçalera dependents i després de l'optimització, la mida es va reduir a 181 línies i 26 fitxers dependents.
  • Un altre exemple: en preprocessar el fitxer «kernel/pid.c» sense pegat, es connecten 94 mil línies de codi, la majoria de les quals no es fan servir a pid.c. Dividir els fitxers de capçalera ens va permetre reduir la quantitat de codi processat tres vegades, reduint el nombre de línies processades a 36 mil.

Quan el nucli es va reconstruir completament amb la comanda make -j96 vmlinux al sistema de prova, l'aplicació dels pegats va mostrar una reducció en el temps de compilació de la branca v5.16-rc7 de 231,34 a 129,97, 15,5 segons (de 27,7 a XNUMX compilacions per hora) i també va augmentar l'eficiència de l'ús de nuclis de CPU durant la compilació.

Amb una compilació incremental, l'efecte d'optimització encara és més notable: el temps per reconstruir el nucli després de fer canvis als fitxers de capçalera s'ha reduït significativament (del 112 % al 173 %, depenent de l'arxiu de capçalera que es canviï) .

Actualment, les optimitzacions només estan disponibles per a arquitectures ARM64, MIPS, Sparc i x86 (32 i 64 bits).

finament si estàs interessat en poder conèixer més a l'respecte, Pots consultar els detalls al següent enllaç.


Deixa el teu comentari

La seva adreça de correu electrònic no es publicarà. Els camps obligatoris estan marcats amb *

*

*

  1. Responsable de les dades: Miguel Ángel Gatón
  2. Finalitat de les dades: Controlar l'SPAM, gestió de comentaris.
  3. Legitimació: El teu consentiment
  4. Comunicació de les dades: No es comunicaran les dades a tercers excepte per obligació legal.
  5. Emmagatzematge de les dades: Base de dades allotjada en Occentus Networks (UE)
  6. Drets: En qualsevol moment pots limitar, recuperar i esborrar la teva informació.