Fast Kernel Headers, et sæt patches, der fremskynder kernekompileringen med 50-80 %

Ingo Molnar, en velkendt Linux-kerneudvikler og forfatter til CFS Task Scheduler foreslået til Linux-kerneudvikling mailinglistediskussion en række patches, som påvirker mere end halvdelen af ​​alle filer i kernekilden og giver en stigning i den samlede kernegenopbygningshastighed på 50 -80% afhængigt af konfigurationen.

Den gennemførte optimering er bemærkelsesværdig, fordi den er forbundet med tilføjelsen af ​​det største ændringssæt i kerneudviklingens historie - blev de foreslået at inkludere 2297 patches på én gang, hvilket ændrede mere end 25 tusinde filer.

præstationsgevinst opnås ved at ændre metoden til håndtering af header-filer. Det skal bemærkes, at over tredive års kerneudvikling har tilstanden af ​​header-filerne fået en deprimerende form på grund af tilstedeværelsen af ​​et stort antal krydsafhængigheder mellem filer.

Omstruktureringen af ​​header-filerne tog over et år og krævede betydelig redesign af hierarki og afhængigheder. Under omstruktureringen blev der arbejdet på at adskille typedefinitionerne og API'erne for de forskellige kerneundersystemer.

Jeg er glad for at kunne annoncere den første offentlige udgivelse af mit nye "Fast Kernel Headers"-projekt, som jeg har arbejdet på siden slutningen af ​​2020, som er en omfattende omarbejdning af Linux-kernens header-hierarki og header-afhængigheder, med det dobbelte formål:

– fremskynde kerneopbygning (både absolutte og trinvise byggetider)

– typeafkobling af delsystem- og API-definitioner fra hinanden

Som de fleste kerneudviklere ved, er der omkring ~10,000 hoved-.h-headere i Linux-kernen, i include / og arch/*/include/-hierarkiet. I løbet af de sidste 30+ år er de blevet til et kompliceret og smertefuldt sæt krydsafhængigheder, som vi kærligt kalder 'Afhængighedshelvede'.

Blandt ændringerne er: adskillelse af overskriftsfiler på højt niveau fra hinanden, udelukkelse af inline-funktioner, der forbinder header-filer, kortlægning af header-filer for typer og API'er, tilvejebringelse af separat sæt header-filer (ca. 80 filer havde indirekte afhængigheder, der interfererer med assemblering, eksponeret via andre filfiler), automatisk tilføjelse af afhængigheder til .h og .c-filer, trinvis optimering af header-filer, brug af ”CONFIG_KALLSYMS_FAST=y”-tilstand, selektiv konsolidering af C-filer til samlingsblokke for at reducere antallet af objektfiler.

Som et resultat det udførte arbejde gjorde det muligt at reducere størrelsen af ​​de behandlede header-fileri efterforbehandlingsstadiet med 1-2 størrelsesordener.

  • For eksempel før optimering resulterede brugen af ​​header-filen "linux/gfp.h" i tilføjelse af 13543 linjer kode og medtagelse af 303 afhængige header-filer, og efter optimering blev størrelsen reduceret. til 181 linjer og 26 afhængige filer.
  • Et andet eksempel: Forbehandling af den ikke-patchede "kernel/pid.c"-fil indsætter 94 tusind linjer kode, hvoraf de fleste ikke bruges i pid.c. Opdeling af header-filerne gjorde det muligt for os at reducere mængden af ​​behandlet kode med tre gange, hvilket reducerede antallet af behandlede linjer til 36 tusind.

Da kernen var fuldt genopbygget med kommandoen "make -j96 vmlinux" på testsystemet, viste patching en reduktion i byggetid for v5.16-rc7 grenen fra 231,34 til 129,97, 15,5 sekunder (fra 27,7 til XNUMX builds i timen ) og øgede også effektiviteten af ​​CPU-kernebrug under opbygning.

Med en trinvis build er optimeringseffekten endnu mere mærkbar: tiden til at genopbygge kernen efter at have foretaget ændringer i header-filer er blevet væsentligt reduceret (fra 112% til 173%, afhængigt af hvilken header-fil der ændres).

I øjeblikket er optimeringer kun tilgængelige for ARM64, MIPS, Sparc og x86 (32 og 64-bit) arkitekturer.

Fint hvis du er interesseret i at vide mere om det, kan du kontrollere detaljerne i følgende link.


Efterlad din kommentar

Din e-mailadresse vil ikke blive offentliggjort. Obligatoriske felter er markeret med *

*

*

  1. Ansvarlig for dataene: Miguel Ángel Gatón
  2. Formålet med dataene: Control SPAM, management af kommentarer.
  3. Legitimering: Dit samtykke
  4. Kommunikation af dataene: Dataene vil ikke blive kommunikeret til tredjemand, undtagen ved juridisk forpligtelse.
  5. Datalagring: Database hostet af Occentus Networks (EU)
  6. Rettigheder: Du kan til enhver tid begrænse, gendanne og slette dine oplysninger.