Det er publisert et sett med patcher som øker byggingen av Linux-kjernen med 50-80 %

Ingo Molnar, en velkjent Linux-kjerneutvikler og forfatter av oppgaveplanleggeren CFS (Completely Fair Scheduler), foreslo for diskusjon på e-postlisten for Linux-kjerneutviklere en serie oppdateringer som påvirker mer enn halvparten av alle filene i kjernekildene og gi en økning i hastigheten på en fullstendig kjernerekonstruksjon med 50-80% avhengig av innstillinger. Den implementerte optimaliseringen er bemerkelsesverdig ved at den er assosiert med tillegget av det største settet med endringer i historien til kjerneutvikling - 2297 patcher ble foreslått for inkludering på en gang, og endret mer enn 25 tusen filer (10 tusen overskriftsfiler i "inkluderer /” og “arch/*/include/”-kataloger "og 15 tusen filer med kildetekster).

Ytelsesgevinsten oppnås ved å endre metoden for behandling av overskriftsfiler. Det bemerkes at over tretti år med kjerneutvikling har tilstanden til headerfilene fått et deprimerende utseende på grunn av tilstedeværelsen av et stort antall kryssavhengigheter mellom filer. Omstruktureringen av headerfilen tok over et år og krevde betydelig omarbeiding av hierarkiet og avhengighetene. Under restruktureringen ble det jobbet med å skille typedefinisjoner og APIer for ulike kjernedelsystemer.

Blant endringene som er gjort: separering av overskriftsfiler på høyt nivå fra hverandre, eliminering av innebygde funksjoner som kobler sammen hodefiler, separering av hodefiler for typer og APIer, sikring av separat sammenstilling av hodefiler (omtrent 80 filer hadde indirekte avhengigheter som forstyrret sammenstilling, eksponert gjennom andre header-filer), automatisk tillegg av avhengigheter til ".h"- og ".c"-filer, trinn-for-trinn-optimalisering av header-filer, bruk av "CONFIG_KALLSYMS_FAST=y"-modus, selektiv konsolidering av C-filer til monteringsblokker for å redusere antall objektfiler.

Som et resultat gjorde arbeidet som ble gjort det mulig å redusere størrelsen på overskriftsfiler som ble behandlet på etterforbehandlingsstadiet med 1-2 størrelsesordener. For eksempel før optimalisering resulterte bruk av overskriftsfilen "linux/gfp.h" i tillegg av 13543 linjer med kode og inkludering av 303 avhengige overskriftsfiler, og etter optimalisering ble størrelsen redusert til 181 linjer og 26 avhengige filer. Eller et annet eksempel: når du forhåndsbehandler filen "kernel/pid.c" uten en patch, er 94 tusen linjer med kode inkludert, hvorav de fleste ikke brukes i pid.c. Separering av overskriftsfilene gjorde det mulig å redusere mengden behandlet kode med tre ganger, og reduserte antallet behandlede linjer til 36 tusen.

Da kjernen ble fullstendig gjenoppbygd med kommandoen "make -j96 vmlinux" på et testsystem, viste applikasjonen av patcher en reduksjon i byggetiden for v5.16-rc7-grenen fra 231.34 til 129.97 sekunder (fra 15.5 til 27.7 bygg). per time), og økte også effektiviteten ved bruk av CPU-kjerner under monteringer. Med en inkrementell oppbygging er effekten av optimalisering enda mer merkbar - tiden for å gjenoppbygge kjernen etter å ha gjort endringer i overskriftsfilene har redusert betydelig (fra 112 % til 173 % avhengig av overskriftsfilen som endres). Optimaliseringer er foreløpig bare tilgjengelig for ARM64, MIPS, Sparc og x86 (32- og 64-bit) arkitekturer.

Kilde: opennet.ru

Legg til en kommentar