Byla zveřejněna sada oprav, které urychlují sestavení linuxového jádra o 50–80 %

Ingo Molnar, známý vývojář linuxového jádra a autor plánovače úloh CFS (Completely Fair Scheduler), navrhl k diskusi na konferenci vývojářů linuxového jádra sérii záplat, které ovlivňují více než polovinu všech souborů ve zdrojích jádra a poskytují zvýšení rychlosti kompletní přestavby jádra o 50-80% v závislosti na nastavení. Implementovaná optimalizace je pozoruhodná tím, že je spojena s přidáním největší sady změn v historii vývoje jádra – bylo navrženo 2297 záplat k zařazení najednou, což změnilo více než 25 tisíc souborů (10 tisíc hlavičkových souborů v „zahrnout /“ a „arch/*/include/“ a 15 tisíc souborů se zdrojovými texty).

Zvýšení výkonu je dosaženo změnou způsobu zpracování hlavičkových souborů. Je třeba poznamenat, že během třiceti let vývoje jádra nabyl stav hlavičkových souborů depresivní podoby kvůli přítomnosti velkého počtu vzájemných závislostí mezi soubory. Restrukturalizace hlavičkového souboru trvala přes rok a vyžadovala značné přepracování hierarchie a závislostí. Během restrukturalizace se pracovalo na oddělení definic typů a API pro různé subsystémy jádra.

Mezi provedené změny: oddělení hlavičkových souborů na vysoké úrovni od sebe navzájem, eliminace inline funkcí, které propojují hlavičkové soubory, oddělení hlavičkových souborů pro typy a rozhraní API, zajištění samostatného sestavení hlavičkových souborů (asi 80 souborů mělo nepřímé závislosti narušující sestavení, vystavené prostřednictvím jiné hlavičkové soubory), automatické přidávání závislostí do souborů „.h“ a „.c“, postupná optimalizace hlavičkových souborů, použití režimu „CONFIG_KALLSYMS_FAST=y“, selektivní konsolidace souborů C do montážních bloků do snížit počet souborů objektů.

Výsledkem bylo, že provedená práce umožnila snížit velikost hlavičkových souborů zpracovávaných ve fázi postpreprocessingu o 1-2 řády. Například před optimalizací použití hlavičkového souboru „linux/gfp.h“ vedlo k přidání 13543 řádků kódu a zahrnutí 303 závislých hlavičkových souborů a po optimalizaci byla velikost snížena na 181 řádků a 26 závislých souborů. Nebo jiný příklad: při předzpracování souboru „kernel/pid.c“ bez opravy je zahrnuto 94 tisíc řádků kódu, z nichž většina není v pid.c použita. Oddělení hlavičkových souborů umožnilo trojnásobně snížit množství zpracovávaného kódu a snížit počet zpracovaných řádků na 36 tisíc.

Když bylo jádro kompletně přestavěno pomocí příkazu „make -j96 vmlinux“ na testovacím systému, aplikace oprav ukázala 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ýšila efektivitu využití jader CPU během sestav. S inkrementálním sestavením je efekt optimalizace ještě znatelnější – čas na opětovné sestavení jádra po provedení změn v hlavičkových souborech se výrazně zkrátil (ze 112 % na 173 % v závislosti na změně hlavičkového souboru). Optimalizace jsou v současnosti dostupné pouze pro architektury ARM64, MIPS, Sparc a x86 (32- a 64bitové).

Zdroj: opennet.ru

Přidat komentář