Rýchle hlavičky jadra, sada záplat, ktoré zrýchľujú kompiláciu jadra o 50 – 80 %

Ingo Molnár, známy vývojár jadra Linuxu a autor CFS Task Scheduler navrhol pre diskusiu v konferencii o vývoji jadra Linuxu množstvo záplat, ktoré ovplyvňujú viac ako polovicu všetkých súborov v zdrojovom kóde jadra a poskytujú celkové zvýšenie rýchlosti prestavby jadra o 50 - 80% v závislosti od konfigurácie.

Implementovaná optimalizácia je pozoruhodný tým, že je spojený s pridaním najväčšej sady zmien v histórii vývoja jadra: rozhodli sa zahrnúť 2297 záplat naraz, čím sa zmenilo viac ako 25 tisíc súborov.

Zvýšenie výkonu sa dosiahne zmenou spôsobu spracovania hlavičkového súboru. Treba poznamenať, že počas tridsiatich rokov vývoja jadra nadobudol stav hlavičkových súborov žalostný tvar v dôsledku prítomnosti veľkého počtu krížových závislostí medzi súbormi.

Reštrukturalizácia hlavičkových súborov trvala viac ako rok a vyžadovalo výrazné prepracovanie hierarchie a závislostí. Počas reštrukturalizácie sa pracovalo na oddelení definícií typov a rozhraní API pre rôzne subsystémy jadra.

S potešením oznamujem prvú verejnú verziu môjho nového projektu „Fast Kernel Headers“, na ktorom pracujem od konca roku 2020, čo je komplexné prepracovanie hierarchie hlavičiek jadra Linuxu a závislostí hlavičiek s dvojitým cieľom:

- zrýchlenie zostavovania jadra (absolútny aj prírastkový čas zostavovania)

- typové oddelenie subsystému a definícií API od seba

Ako väčšina vývojárov jadra vie, v jadre Linuxu je približne 10,000 30 hlavných hlavičiek .h v hierarchiách include / a arch / * / include /. Za posledných viac ako XNUMX rokov sa vyvinuli do komplikovaného a bolestivého súboru krížových závislostí, ktoré s láskou nazývame „Peklo závislosti“.

Medzi vykonanými zmenami sú: oddelenie hlavičkových súborov na vysokej úrovni od seba navzájom, vylúčenie inline funkcií, ktoré prepájajú hlavičkové súbory, mapovanie hlavičkových súborov pre typy a API, poskytovanie samostatnej sady hlavičkových súborov (približne 80 súborov malo nepriame závislosti, ktoré narúšajú zostavu, odhalené prostredníctvom iných súborov hlavičkových súborov), automatické pridávanie závislostí do súborov ".h" a ".c", postupná optimalizácia hlavičkových súborov, použitie režimu "CONFIG_KALLSYMS_FAST=y", selektívna konsolidácia súborov C do montážnych blokov na zníženie počtu súborov objektov.

Výsledkom je, vykonaná práca umožnila zmenšiť veľkosť spracovávaných hlavičkových súborovv štádiu post-predspracovania o 1-2 rády.

  • Napríklad pred optimalizáciou použitie hlavičkového súboru „linux/gfp.h“ viedlo k pridaniu 13543 303 riadkov kódu a zahrnutiu 181 závislých hlavičkových súborov a po optimalizácii sa veľkosť zmenšila na 26 riadkov a XNUMX závislých súborov.
  • Ďalší príklad: predspracovanie neopraveného súboru "kernel / pid.c" spája 94 tisíc riadkov kódu, z ktorých väčšina sa v pid.c nepoužíva. Rozdelenie hlavičkových súborov nám umožnilo trikrát znížiť množstvo spracovaného kódu, čím sa znížil počet spracovaných riadkov na 36 XNUMX.

Keď bolo jadro úplne prebudované pomocou príkazu "make -j96 vmlinux" na testovacom systéme, záplata ukázala skrátenie času kompilácie vetvy v5.16-rc7 z 231,34 na 129,97, 15,5 sekúnd (z 27,7 na XNUMX zostavení za hodina) a tiež zvýšila efektivitu využitia jadra CPU počas zostavovania.

Pri prírastkovej kompilácii je efekt optimalizácie ešte zreteľnejší: čas na prebudovanie jadra po vykonaní zmien v hlavičkových súboroch sa výrazne skrátil (zo 112 % na 173 %, v závislosti od zmeneného hlavičkového súboru).

Optimalizácie sú momentálne dostupné len pre architektúry ARM64, MIPS, Sparc a x86 (32-bitové a 64-bitové).

Dobre ak máte záujem dozvedieť sa o tom viac, môžete skontrolovať podrobnosti v nasledujúci odkaz.


Zanechajte svoj komentár

Vaša e-mailová adresa nebude zverejnená. Povinné položky sú označené *

*

*

  1. Zodpovedný za údaje: Miguel Ángel Gatón
  2. Účel údajov: Kontrolný SPAM, správa komentárov.
  3. Legitimácia: Váš súhlas
  4. Oznamovanie údajov: Údaje nebudú poskytnuté tretím stranám, iba ak to vyplýva zo zákona.
  5. Ukladanie dát: Databáza hostená spoločnosťou Occentus Networks (EU)
  6. Práva: Svoje údaje môžete kedykoľvek obmedziť, obnoviť a vymazať.