Fast Kernel Headers, set zakrpa koje ubrzavaju kompilaciju kernela za 50-80%

Ingo Molnar, dobro poznati programer Linux kernela i autor CFS Task Scheduler predložio je za diskusiju o mailing listi razvoja jezgra Linuxa brojne zakrpe, koje utječu na više od polovine svih datoteka u izvornom kodu kernela i osiguravaju ukupno povećanje brzine rekonstrukcije kernela od 50 -80% ovisno o konfiguraciji.

Optimizacija implementirana je značajan po tome što je povezan s dodatkom najvećeg skupa izmjena u istoriji razvoja kernela: planirali su da uključe 2297 zakrpa odjednom, menjajući više od 25 hiljada fajlova.

Dobitak performansi se postiže promjenom metode rukovanja zaglavljem. Treba napomenuti da je tokom trideset godina razvoja kernela, stanje datoteka zaglavlja poprimilo sumorni oblik zbog prisustva velikog broja unakrsnih zavisnosti između fajlova.

Restrukturiranje datoteka zaglavlja trajalo je više od godinu dana i zahtijevao značajan redizajn hijerarhije i zavisnosti. Tokom restrukturiranja, radilo se na razdvajanju definicija tipa i API-ja za različite podsisteme kernela.

Drago mi je što mogu najaviti prvu javnu verziju mog novog projekta "Fast Kernel Headers" na kojem radim od kraja 2020. godine, a koji predstavlja sveobuhvatnu preradu hijerarhije zaglavlja Linux kernela i ovisnosti zaglavlja, s dvostrukim ciljem:

- ubrzati izgradnju kernela (apsolutna i inkrementalna vremena izgradnje)

- razdvajanje tipa podsistema i definicija API-ja jedan od drugog

Kao što većina programera kernela zna, postoji oko 10,000 glavnih .h zaglavlja u Linux kernelu, u hijerarhijama include / i arch / * / include /. Tokom posljednjih 30+ godina, evoluirali su u komplikovan i bolan skup unakrsnih ovisnosti koje mi od milja zovemo 'pakao ovisnosti'.

Među napravljenim promjenama su: razdvajanje fajlova zaglavlja visokog nivoa jedan od drugog, isključenje inline funkcija koje povezuju datoteke zaglavlja, mapiranje datoteka zaglavlja za tipove i API-je, obezbjeđivanje zasebnog skupa datoteka zaglavlja (oko 80 fajlova je imalo indirektne zavisnosti koje ometaju sklapanje, izložene kroz druge fajlove zaglavlja), automatsko dodavanje zavisnosti u Datoteke ".h" i ".c", optimizacija zaglavlja korak po korak, korištenje "CONFIG_KALLSYMS_FAST = y" moda, selektivna konsolidacija C datoteka u sklopove za smanjenje broja objektnih datoteka.

Kao rezultat, obavljeni posao je omogućio smanjenje veličine obrađenih datoteka zaglavljau fazi naknadne obrade za 1-2 reda veličine.

  • Na primjer, prije optimizacije, korištenje datoteke zaglavlja "linux/gfp.h" rezultiralo je dodavanjem 13543 reda koda i uključivanjem 303 zavisna zaglavlja, a nakon optimizacije veličina je smanjena na 181 red i 26 zavisnih datoteka.
  • Drugi primjer: pretprocesiranje nezakrpljene datoteke "kernel / pid.c" povezuje 94 hiljade linija koda, od kojih se većina ne koristi u pid.c. Razdvajanje datoteka zaglavlja omogućilo nam je da tri puta smanjimo količinu obrađenog koda, smanjujući broj obrađenih linija na 36.

Kada je kernel u potpunosti obnovljen komandom "make -j96 vmlinux" na test sistemu, zakrpa je pokazala smanjenje vremena kompajliranja grane v5.16-rc7 sa 231,34 na 129,97, 15,5 sekundi (sa 27,7 na XNUMX build-ova po sat) i takođe je povećala efikasnost korišćenja CPU jezgra tokom izgradnje.

Uz inkrementalnu kompilaciju, efekat optimizacije je još uočljiviji: vrijeme za ponovnu izgradnju kernela nakon unošenja izmjena u fajlove zaglavlja je značajno smanjeno (sa 112% na 173%, u zavisnosti od datoteke zaglavlja koja se mijenja).

Optimizacije su trenutno dostupne samo za ARM64, MIPS, Sparc i x86 (32-bitne i 64-bitne) arhitekture.

Fino ako ste zainteresirani da saznate više o tome, detalje možete provjeriti u sljedeći link.


Ostavite komentar

Vaša e-mail adresa neće biti objavljena. Obavezna polja su označena sa *

*

*

  1. Za podatke odgovoran: Miguel Ángel Gatón
  2. Svrha podataka: Kontrola neželjene pošte, upravljanje komentarima.
  3. Legitimacija: Vaš pristanak
  4. Komunikacija podataka: Podaci se neće dostavljati trećim stranama, osim po zakonskoj obavezi.
  5. Pohrana podataka: Baza podataka koju hostuje Occentus Networks (EU)
  6. Prava: U bilo kojem trenutku možete ograničiti, oporaviti i izbrisati svoje podatke.