Der er udgivet et sæt patches, der fremskynder opbygningen af ​​Linux-kernen med 50-80 %

Ingo Molnar, en velkendt Linux-kerneudvikler og forfatter til CFS (Completely Fair Scheduler) opgaveplanlæggeren, foreslog til diskussion på Linux-kernens udviklermailingliste en række patches, der påvirker mere end halvdelen af ​​alle filer i kernekilderne og give en stigning i hastigheden på en komplet kernegenopbygning med 50-80% afhængigt af indstillinger. Den implementerede optimering er bemærkelsesværdig, fordi den er forbundet med tilføjelsen af ​​det største sæt ændringer i historien om kerneudvikling - 2297 patches blev foreslået til inklusion på én gang, hvilket ændrede mere end 25 tusinde filer (10 tusinde header-filer i "inkluderer /” og “arch/*/include/” mapper "og 15 tusind filer med kildetekster).

Ydeevnegevinsten opnås ved at ændre metoden til behandling af header-filer. Det bemærkes, at over tredive års kerneudvikling har tilstanden af ​​header-filerne fået et deprimerende udseende på grund af tilstedeværelsen af ​​et stort antal krydsafhængigheder mellem filer. Omstruktureringen af ​​headerfilen tog over et år og krævede betydelig omarbejdning af hierarkiet og afhængighederne. Under omstruktureringen blev der arbejdet på at adskille typedefinitioner og API'er for forskellige kerneundersystemer.

Blandt ændringerne, der er foretaget: adskille overskriftsfiler på højt niveau fra hinanden, eliminering af inline-funktioner, der forbinder headerfiler, adskille headerfiler for typer og API'er, sikring af separat samling af headerfiler (ca. andre header-filer), automatisk tilføjelse af afhængigheder til ".h"- og ".c"-filer, trin-for-trin optimering af header-filer, brug af "CONFIG_KALLSYMS_FAST=y"-tilstanden, selektiv konsolidering af C-filer til assembly-blokke for at reducere antallet af objektfiler.

Som et resultat gjorde det udførte arbejde det muligt at reducere størrelsen af ​​header-filer, der blev behandlet på efter-forbehandlingsstadiet med 1-2 størrelsesordener. For eksempel før optimering resulterede brug af header-filen "linux/gfp.h" i tilføjelse af 13543 linjer kode og inklusion af 303 afhængige header-filer, og efter optimering blev størrelsen reduceret til 181 linjer og 26 afhængige filer. Eller et andet eksempel: Når du forbehandler filen "kernel/pid.c" uden en patch, er 94 tusinde linjer kode inkluderet, hvoraf de fleste ikke bruges i pid.c. Adskillelse af header-filer gjorde det muligt at reducere mængden af ​​behandlet kode med tre gange, hvilket reducerede antallet af behandlede linjer til 36 tusind.

Da kernen blev fuldstændig genopbygget med kommandoen "make -j96 vmlinux" på et testsystem, viste anvendelsen af ​​patches en reduktion i byggetiden for v5.16-rc7-grenen fra 231.34 til 129.97 sekunder (fra 15.5 til 27.7 builds) time), og øgede også effektiviteten ved at bruge CPU-kerner under samlinger. Med en inkrementel build er effekten af ​​optimering endnu mere mærkbar - tiden til at genopbygge kernen efter at have foretaget ændringer i header-filerne er faldet betydeligt (fra 112% til 173% afhængigt af header-filen, der ændres). Optimeringer er i øjeblikket kun tilgængelige for ARM64, MIPS, Sparc og x86 (32- og 64-bit) arkitekturer.

Kilde: opennet.ru

Tilføj en kommentar