Fast Kernel Headers, nabor popravkov, ki pospešijo prevajanje jedra za 50-80 %

Ingo Molnar, znan razvijalec jedra Linuxa in avtor CFS Task Scheduler je razpravi o poštnem seznamu za razvoj jedra Linux predlagal vrsto popravkov, ki vplivajo na več kot polovico vseh datotek v izvornem jedru in zagotavljajo povečanje skupne hitrosti ponovne gradnje jedra za 50 -80 %, odvisno od konfiguracije.

Izvedena optimizacija je opazen, ker je povezan z dodatkom največjega nabora sprememb v zgodovini razvoja jedra - predlagali so vključitev 2297 popravkov naenkrat, pri čemer so spremenili več kot 25 tisoč datotek.

Pridobitev uspešnosti se doseže s spremembo metode ravnanja z naslovno datoteko. Treba je opozoriti, da je v tridesetih letih razvoja jedra stanje datotek z glavami dobilo depresivno obliko zaradi velikega števila navzkrižnih odvisnosti med datotekami.

Prestrukturiranje datotek z glavo je trajalo več kot eno leto in zahtevala znatno preoblikovanje hierarhije in odvisnosti. Med prestrukturiranjem je bilo opravljeno delo za ločevanje definicij tipov in API-jev za različne podsisteme jedra.

Z veseljem najavljam prvo javno izdajo svojega novega projekta "Hitri glave jedra", na katerem delam od konca leta 2020, ki je celovita predelava hierarhije glav jedra Linuxa in odvisnosti glave, z dvakrat večjim ciljem :

– pospeši gradnjo jedra (absolutni in inkrementalni čas gradnje)

– ločevanje definicij tipa podsistema in API med seboj

Kot ve večina razvijalcev jedra, je v jedru Linux približno 10,000 glavnih glav .h v hierarhijah include / in arch/*/include/. V zadnjih 30+ letih so se razvili v zapleten in boleč sklop navzkrižnih odvisnosti, ki ga ljubkovalno imenujemo "pekel odvisnosti".

Med izvedenimi spremembami so: ločevanje med seboj naslovnih datotek na visoki ravni, izključitev vgrajenih funkcij, ki povezujejo naslovne datoteke, preslikava datotek z glavami za vrste in API-je, zagotovitev ločenega nabora datotek z glavami (približno 80 datotek je imelo posredne odvisnosti, ki motijo ​​sestavljanje, izpostavljene prek drugih datotek z glavami), samodejno dodajanje odvisnosti za datoteke ".h" in ".c", optimizacija naslovnih datotek po korakih, uporaba načina "CONFIG_KALLSYMS_FAST=y", selektivna konsolidacija datotek C v montažne bloke za zmanjšanje števila objektnih datotek.

Kot rezultat, opravljeno delo je omogočilo zmanjšanje velikosti obdelanih datotek z glavov fazi naknadne obdelave za 1-2 reda velikosti.

  • Na primer, pred optimizacijo je uporaba naslovne datoteke "linux/gfp.h" povzročila dodajanje 13543 vrstic kode in vključitev 303 odvisnih naslovnih datotek, po optimizaciji pa se je velikost zmanjšala na 181 vrstic in 26 odvisnih datotek.
  • Še en primer: predprocesiranje datoteke "kernel/pid.c" brez popravka poveže 94 tisoč vrstic kode, od katerih večina ni uporabljenih v pid.c. Razdelitev naslovnih datotek nam je omogočila, da smo trikrat zmanjšali količino obdelane kode in zmanjšali število obdelanih vrstic na 36 tisoč.

Ko je bilo jedro popolnoma obnovljeno z ukazom "make -j96 vmlinux" na testnem sistemu, je uporaba popravkov pokazala zmanjšanje časa gradnje veje v5.16-rc7 z 231,34 na 129,97, 15,5 sekund (s 27,7 na XNUMX). gradenj na uro) in povečala tudi učinkovitost uporabe jedra CPU med gradnjo.

Pri inkrementalni gradnji je učinek optimizacije še bolj opazen: čas za obnovo jedra po spremembi naslovnih datotek se je znatno zmanjšal (s 112 % na 173 %, odvisno od tega, katera naslovna datoteka je spremenjena).

Optimizacije so trenutno na voljo samo za arhitekture ARM64, MIPS, Sparc in x86 (32-bitna in 64-bitna).

Fino če vas zanima več o tem, podrobnosti lahko preverite v naslednja povezava.


Pustite svoj komentar

Vaš e-naslov ne bo objavljen. Obvezna polja so označena z *

*

*

  1. Za podatke odgovoren: Miguel Ángel Gatón
  2. Namen podatkov: Nadzor neželene pošte, upravljanje komentarjev.
  3. Legitimacija: Vaše soglasje
  4. Sporočanje podatkov: Podatki se ne bodo posredovali tretjim osebam, razen po zakonski obveznosti.
  5. Shranjevanje podatkov: Zbirka podatkov, ki jo gosti Occentus Networks (EU)
  6. Pravice: Kadar koli lahko omejite, obnovite in izbrišete svoje podatke.