Fast Kernel Headers, en uppsättning patchar som påskyndar kärnkompileringen med 50-80 %

Ingo Molnar, en välkänd Linux-kärnutvecklare och författare till CFS Task Scheduler föreslås för Linux-kärnautveckling e-postlistdiskussion en serie patchar, som påverkar mer än hälften av alla filer i kärnkällan och ger en ökning av den totala kärnans återuppbyggnadshastighet på 50 -80% beroende på konfigurationen.

Den genomförda optimeringen är anmärkningsvärt eftersom det är associerat med tillägget av den största ändringsuppsättningen i kärnutvecklingens historia - de föreslogs att inkludera 2297 patchar på en gång, vilket ändrade mer än 25 tusen filer.

prestationsvinst uppnås genom att ändra metoden för hantering av rubrikfiler. Det bör noteras att under trettio år av kärnutveckling har tillståndet för header-filerna fått en deprimerande form på grund av närvaron av ett stort antal korsberoende mellan filer.

Omstruktureringen av rubrikfilerna tog över ett år och krävde betydande omstrukturering av hierarki och beroenden. Under omstruktureringen arbetade man med att separera typdefinitionerna och API:erna för de olika kärndelsystemen.

Jag är glad att kunna tillkännage den första offentliga utgåvan av mitt nya "Fast Kernel Headers"-projekt som jag har arbetat med sedan slutet av 2020, vilket är en omfattande omarbetning av Linux-kärnans rubrikhierarki och rubrikberoenden, med dubbelt syfte:

– påskynda kärnbygget (både absoluta och inkrementella byggtider)

– typfrikoppling av delsystemets och API-definitionerna från varandra

Som de flesta kärnutvecklare vet finns det cirka ~10,000 30 huvud-.h-huvuden i Linux-kärnan, i hierarkierna include / och arch/*/include/. Under de senaste XNUMX+ åren har de blivit en komplicerad och smärtsam uppsättning korsberoenden som vi kärleksfullt kallar "beroendehelvetet".

Bland de ändringar som gjorts är: separation av högnivåhuvudfiler från varandra, uteslutning av inline-funktioner som länkar header-filer, mappning av header-filer för typer och API:er, tillhandahållande av separat uppsättning header-filer (ca 80 filer hade indirekta beroenden som stör assembleringen, exponerade via andra filfiler), automatiskt tillägg av beroenden till .h och . c-filer, stegvis optimering av header-filer, användning av ”CONFIG_KALLSYMS_FAST=y”-läge, selektiv konsolidering av C-filer till monteringsblock för att minska antalet objektfiler.

Som ett resultat arbetet gjorde det möjligt att minska storleken på de bearbetade huvudfilernai efterförbehandlingsstadiet med 1-2 storleksordningar.

  • Till exempel, före optimering, resulterade användningen av rubrikfilen "linux/gfp.h" i tillägg av 13543 rader kod och inkludering av 303 beroende rubrikfiler, och efter optimering reducerades storleken till 181 rader och 26 beroende filer.
  • Ett annat exempel: Förbearbetning av den opatchade filen "kernel/pid.c" pluggar in 94 tusen rader kod, varav de flesta inte används i pid.c. Genom att dela upp rubrikfilerna kunde vi minska mängden kod som bearbetades med tre gånger, vilket minskade antalet bearbetade rader till 36 tusen.

När kärnan byggdes om helt med kommandot "make -j96 vmlinux" på testsystemet, visade patchningen en minskning av byggtiden för v5.16-rc7-grenen från 231,34 till 129,97, 15,5 sekunder (från 27,7 till XNUMX builds per timme ) och ökade också effektiviteten av CPU-kärnanvändning under byggandet.

Med en inkrementell konstruktion är optimeringseffekten ännu mer märkbar: tiden för att bygga om kärnan efter att ha gjort ändringar i rubrikfiler har minskat avsevärt (från 112 % till 173 %, beroende på vilken rubrikfil som ändras).

För närvarande är optimeringar endast tillgängliga för ARM64, MIPS, Sparc och x86 (32 och 64-bitars) arkitekturer.

Fin om du är intresserad av att veta mer om detkan du kontrollera detaljerna i följande länk.


Lämna din kommentar

Din e-postadress kommer inte att publiceras. Obligatoriska fält är markerade med *

*

*

  1. Ansvarig för uppgifterna: Miguel Ángel Gatón
  2. Syftet med uppgifterna: Kontrollera skräppost, kommentarhantering.
  3. Legitimering: Ditt samtycke
  4. Kommunikation av uppgifterna: Uppgifterna kommer inte att kommuniceras till tredje part förutom enligt laglig skyldighet.
  5. Datalagring: databas värd för Occentus Networks (EU)
  6. Rättigheter: När som helst kan du begränsa, återställa och radera din information.