S'ha publicat un conjunt de pedaços que acceleren entre un 50 i un 80% la construcció del nucli Linux

Ingo Molnar, un conegut desenvolupador del nucli de Linux i autor del programador de tasques CFS (Completely Fair Scheduler), va proposar per a la discussió sobre la llista de correu del desenvolupador del nucli de Linux una sèrie de pedaços que afecten més de la meitat de tots els fitxers de les fonts del nucli i proporcionar un augment de la velocitat d'una reconstrucció completa del nucli en un 50-80% depenent de la configuració. L'optimització implementada és destacable, ja que s'associa amb l'addició del conjunt més gran de canvis en la història del desenvolupament del nucli: es van proposar 2297 pegats per incloure-los alhora, canviant més de 25 mil fitxers (10 mil fitxers de capçalera a la /" i "arch/*/include/" directoris "i 15 mil fitxers amb textos font).

El guany de rendiment s'aconsegueix canviant el mètode de processament dels fitxers de capçalera. Cal assenyalar que durant trenta anys de desenvolupament del nucli, l'estat dels fitxers de capçalera ha pres un aspecte depriment a causa de la presència d'un gran nombre de dependències creuades entre fitxers. La reestructuració del fitxer de capçalera va durar més d'un any i va requerir una reelaboració important de la jerarquia i les dependències. Durant la reestructuració, es va treballar per separar les definicions de tipus i les API per a diferents subsistemes del nucli.

Entre els canvis realitzats: separació dels fitxers de capçalera d'alt nivell entre si, eliminació de funcions en línia que enllacin fitxers de capçalera, separació de fitxers de capçalera per a tipus i API, garantint un muntatge separat dels fitxers de capçalera (uns 80 fitxers tenien dependències indirectes que interferien amb el muntatge, exposats a través de 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 dels fitxers C en blocs de muntatge per reduir el nombre de fitxers d'objectes.

Com a resultat, el treball realitzat va permetre reduir la mida dels fitxers de capçalera processats en l'etapa de postprocessament 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. O un altre exemple: en preprocessar el fitxer “kernel/pid.c” sense pedaç, s'inclouen 94 mil línies de codi, la majoria de les quals no s'utilitza a pid.c. La separació dels fitxers de capçalera va permetre reduir la quantitat de codi processat per tres vegades, reduint el nombre de línies processades a 36 mil.

Quan el nucli es va reconstruir completament amb l'ordre "make -j96 vmlinux" en un sistema de prova, l'aplicació de pedaços va mostrar una reducció del temps de construcció de la branca v5.16-rc7 de 231.34 a 129.97 segons (de 15.5 a 27.7 compilacions). per hora), i també va augmentar l'eficiència d'utilitzar nuclis de CPU durant els muntatges. Amb una construcció incremental, l'efecte de l'optimització és encara més notable: el temps per reconstruir el nucli després de fer canvis als fitxers de capçalera ha disminuït significativament (del 112% al 173% depenent del fitxer de capçalera que es canvia). Actualment, les optimitzacions només estan disponibles per a arquitectures ARM64, MIPS, Sparc i x86 (32 i 64 bits).

Font: opennet.ru

Afegeix comentari