En uppsättning patchar har publicerats som påskyndar uppbyggnaden av Linux-kärnan med 50-80 %

Ingo Molnar, en välkänd Linux-kärnutvecklare och författare till CFS (Completely Fair Scheduler) uppgiftsschemaläggare, föreslog för diskussion om Linux-kärnans e-postlista en serie patchar som påverkar mer än hälften av alla filer i kärnkällorna och ger en ökning av hastigheten för en komplett kärnombyggnad med 50-80% beroende på inställningar. Den implementerade optimeringen är anmärkningsvärd eftersom den är förknippad med tillägget av den största uppsättningen förändringar i kärnutvecklingens historia - 2297 patchar föreslogs för inkludering på en gång, vilket ändrade mer än 25 tusen filer (10 tusen rubrikfiler i "inkludera /” och “arch/*/include/” kataloger "och 15 tusen filer med källtexter).

Prestandavinsten uppnås genom att ändra metoden för bearbetning av rubrikfiler. Det noteras att under trettio år av kärnutveckling har tillståndet för headerfilerna fått ett deprimerande utseende på grund av närvaron av ett stort antal korsberoende mellan filer. Omstruktureringen av rubrikfilen tog över ett år och krävde betydande omarbetning av hierarkin och beroenden. Under omstruktureringen arbetade man med att separera typdefinitioner och API:er för olika kärndelsystem.

Bland de ändringar som gjorts: separering av header-filer på hög nivå från varandra, eliminering av inline-funktioner som länkar header-filer, separering av header-filer för typer och API:er, säkerställande av separat sammansättning av header-filer (ca 80 filer hade indirekta beroenden som stör assembleringen, exponerade genom andra header-filer), automatiskt tillägg av beroenden till ".h"- och ".c"-filer, steg-för-steg-optimering av header-filer, användning av "CONFIG_KALLSYMS_FAST=y"-läget, selektiv konsolidering av C-filer till monteringsblock för att minska antalet objektfiler.

Som ett resultat gjorde det utförda arbetet det möjligt att minska storleken på header-filer som bearbetades i efterförbehandlingsstadiet med 1-2 storleksordningar. Till exempel, före optimering, resulterade användning 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. Eller ett annat exempel: vid förbearbetning av filen "kernel/pid.c" utan en patch, ingår 94 tusen rader kod, varav de flesta inte används i pid.c. Att separera rubrikfilerna gjorde det möjligt att minska mängden bearbetad kod 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å ett testsystem, visade appliceringen av patchar en minskning av byggtiden för v5.16-rc7-grenen från 231.34 till 129.97 sekunder (från 15.5 till 27.7 builds) per timme), och ökade också effektiviteten av att använda CPU-kärnor under sammansättningar. Med en inkrementell konstruktion är effekten av optimering ännu mer märkbar - tiden för att bygga om kärnan efter att ha gjort ändringar i rubrikfilerna har minskat avsevärt (från 112 % till 173 % beroende på rubrikfilen som ändras). Optimering är för närvarande endast tillgängliga för ARM64, MIPS, Sparc och x86 (32- och 64-bitars) arkitekturer.

Källa: opennet.ru

Lägg en kommentar