Ingo Molnar, známý vývojář jádra Linux a autor plánovače úloh CFS (Completely Fair Scheduler), navrhl k diskusi na mailing listu vývojářů jádra Linux sérii patchů, které se dotýkají více než poloviny všech souborů ve zdrojových textech jádra a zajišťují zvýšení rychlosti kompletního překladu jádra o 50-80% v závislosti na nastavení. Realizovaná optimalizace je pozoruhodná tím, že je spojena s přidáním dosud největšího souboru změn v historii vývoje jádra – k zahrnutí je navrženo 2297 patchů, které mění více než 25 tisíc souborů (10 tisíc hlavičkových souborů v adresářích "include/" a "arch/*/include/" a 15 tisíc souborů se zdrojovými texty).
Zvýšení výkonu je dosaženo změnou metody zpracování hlavičkových souborů. Je poznamenáno, že za třicet let vývoje jádra se stav hlavičkových souborů stal alarmujícím kvůli velkému počtu křížových závislostí mezi soubory. Práce na restrukturalizaci hlavičkových souborů trvala více než rok a vyžadovala významné přepracování hierarchie a závislostí. V rámci restrukturalizace byla provedena práce na oddělení definic typů a API pro různé subsystémy jádra.
Mezi provedenými změnami patří: oddělení vysoceúrovňových hlavičkových souborů od sebe, vyloučení provazujících hlavičkových souborů pro inline funkce, vyčlenění hlavičkových souborů pro typy a API, zajištění oddělené kompilace hlavičkových souborů (přibližně 80 souborů mělo rušivé závislosti pro kompilaci vyznačované prostřednictvím jiných hlavičkových souborů), automatické přidávání závislostí k souborům ".h" a ".c", kroková optimalizace hlavičkových souborů a použití režimu "CONFIG_KALLSYMS_FAST=y", selektivní konsolidace C souborů do kompilovaných bloků za účelem snížení počtu objektových souborů.
Výsledkem provedené práce došlo k redukci velikosti hlavičkových souborů zpracovávaných ve fázi postpreprocessingu o 1-2 řády. Například, před optimalizací hlavičkový soubor „linux/gfp.h“ přidával 13543 řádek kódu a zapojoval 303 závislých hlavičkových souborů, zatímco po optimalizaci se velikost snížila na 181 řádků a 26 závislých souborů. Nebo jiný příklad: při preprocessingu souboru „kernel/pid.c“ bez patche se připojovalo 94 tisíc řádek kódu, přičemž většina z nich nebyla v pid.c použita. Rozdělení hlavičkových souborů umožnilo snížit objem zpracovávaného kódu na třetinu, čímž se počet zpracovávaných řádek snížil na 36 tisíc.
Při plném znovusestavení jádra příkazem „make -j96 vmlinux“ na testovacím systému prokázalo použití patchů zkrácení doby sestavení větve v5.16-rc7 z 231,34 na 129,97 sekund (z 15,5 na 27,7 sestavení za hodinu) a také zvýšilo efektivitu využití CPU během sestavení. Při inkrementálním sestavení je efekt optimalizace ještě výraznější — doba opětovného přeinstalování jádra po změnách v hlavičkových souborech se zkrátila o násobek (od 112 % do 173 % v závislosti na upraveném hlavičkovém souboru). Optimalizace jsou prozatím dostupné pouze pro architektury ARM64, MIPS, Sparc a x86 (32- a 64-bit).
Zdroj: opennet.ru
