Fast Kernel Headers, et sett med patcher som øker kjernekompileringen med 50–80 %

Ingo Molnar, en kjent utvikler av Linux-kjernen og forfatter av CFS Task Scheduler foreslått til Linux-kjernens utviklingspostlistediskusjon en serie patcher, som påvirker mer enn halvparten av alle filene i kjernekilden og gir en økning i total kjernegjenoppbyggingshastighet på 50 -80 % avhengig av konfigurasjonen.

Den implementerte optimaliseringen er bemerkelsesverdig fordi det er assosiert med tillegg av det største settet med endringer i historien om kjerneutvikling - de foreslo å inkludere 2297 patcher på en gang, og endre mer enn 25 tusen filer.

Ytelsesgevinsten oppnås ved å endre overskriftsfilhåndteringsmetoden. Det bør bemerkes at over tretti år med kjerneutvikling har tilstanden til header-filer fått en deprimerende form på grunn av tilstedeværelsen av et stort antall kryssavhengigheter mellom filer.

Restruktureringen av headerfilene tok mer enn ett år og krevde betydelig redesign av hierarki og avhengigheter. Under restruktureringen ble det jobbet med å skille typedefinisjonene og APIene for de forskjellige kjerneundersystemene.

Jeg er glad for å kunngjøre den første offentlige utgivelsen av mitt nye "Fast Kernel Headers"-prosjekt som jeg har jobbet med siden slutten av 2020, som er en omfattende omarbeiding av Linux-kjernens overskriftshierarki og overskriftsavhengigheter, med dobbelt mål om :

– få fart på kjernebygging (både absolutte og inkrementelle byggetider)

– frakobling av delsystemtype og API-definisjoner fra hverandre

Som de fleste kjerneutviklere vet, er det ca. ~10,000 30 hoved-.h-overskrifter i Linux-kjernen, i include / og arch/*/include/-hierarkiene. I løpet av de siste XNUMX+ årene har de utviklet seg til et komplisert og smertefullt sett med kryssavhengigheter som vi kjærlig kaller "Dependency Hell".

Blant endringene som er gjort er: separasjon av overskriftsfiler på høyt nivå fra hverandre, ekskludering av innebygde funksjoner som kobler header-filer, kartlegging av header-filer for typer og APIer, tilveiebringelse av et eget sett med header-filer (ca. 80 filer hadde indirekte avhengigheter som forstyrrer montering, eksponert gjennom andre fil-header-filer), automatisk tillegg av avhengigheter til ".h"- og ".c"-filer, trinn-for-trinn-optimalisering av overskriftsfiler, bruk av "CONFIG_KALLSYMS_FAST=y"-modus, selektiv konsolidering av C-filer til monteringsblokker for å redusere antall objektfiler.

Som et resultat arbeidet som ble gjort tillot å redusere størrelsen på de behandlede overskriftsfilenepå etterforbehandlingsstadiet med 1-2 størrelsesordener.

  • For eksempel før optimalisering resulterte bruken av header-filen "linux/gfp.h" i tillegg av 13543 linjer med kode og inkludering av 303 avhengige header-filer, og etter optimalisering ble størrelsen redusert. til 181 linjer og 26 avhengige filer.
  • Et annet eksempel: forhåndsbehandling av filen "kernel/pid.c" uten en patch kobler sammen 94 tusen linjer med kode, hvorav de fleste ikke brukes i pid.c. Å dele opp overskriftsfilene tillot oss å redusere mengden kode som ble behandlet tre ganger, og reduserte antallet behandlede linjer til 36 tusen.

Da kjernen ble fullstendig gjenoppbygd med kommandoen "make -j96 vmlinux" på testsystemet, viste bruk av oppdateringene en reduksjon i byggetiden til v5.16-rc7-grenen fra 231,34 til 129,97, 15,5 sekunder (fra 27,7 til XNUMX) bygger per time) og økte også effektiviteten til CPU-kjernebruken under byggingen.

Med en inkrementell oppbygging er optimaliseringseffekten enda mer merkbar: tiden for å gjenoppbygge kjernen etter å ha gjort endringer i overskriftsfiler har blitt betydelig redusert (fra 112 % til 173 %, avhengig av overskriftsfilen som endres).

Optimaliseringer er foreløpig bare tilgjengelig for ARM64, MIPS, Sparc og x86 (32-bit og 64-bit) arkitekturer.

Fin hvis du er interessert i å vite mer om det, kan du sjekke detaljene i følgende lenke.


Legg igjen kommentaren

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *

*

*

  1. Ansvarlig for dataene: Miguel Ángel Gatón
  2. Formålet med dataene: Kontroller SPAM, kommentaradministrasjon.
  3. Legitimering: Ditt samtykke
  4. Kommunikasjon av dataene: Dataene vil ikke bli kommunisert til tredjeparter bortsett fra ved juridisk forpliktelse.
  5. Datalagring: Database vert for Occentus Networks (EU)
  6. Rettigheter: Når som helst kan du begrense, gjenopprette og slette informasjonen din.