Fast Kernel Headers, sada patchů, které urychlují kompilaci jádra o 50–80 %

Ingo Molnár, známý vývojář linuxového jádra a autor CFS Task Scheduler navrhl do diskuze o vývoji linuxového jádra sérii záplat, které ovlivňují více než polovinu všech souborů ve zdrojovém kódu jádra a poskytují zvýšení celkové rychlosti přestavby jádra o 50 -80 % v závislosti na konfiguraci.

Implementovaná optimalizace je pozoruhodný, protože je spojen s přidáním největší sady změn v historii vývoje jádra: stanovili si zahrnout 2297 25 oprav najednou a změnit více než XNUMX tisíc souborů.

Zisk výkonu je dosaženo změnou způsobu zpracování souboru záhlaví. Je třeba poznamenat, že během třiceti let vývoje jádra nabral stav hlavičkových souborů neutěšený tvar kvůli přítomnosti velkého počtu vzájemných závislostí mezi soubory.

Restrukturalizace hlavičkových souborů trvala více než rok vyžadovalo značné přepracování hierarchie a závislostí. Během restrukturalizace se pracovalo na oddělení definic typů a rozhraní API pro různé subsystémy jádra.

S potěšením oznamuji první veřejné vydání mého nového projektu „Fast Kernel Headers“, na kterém pracuji od konce roku 2020, což je komplexní přepracování hierarchie hlaviček a závislostí hlaviček linuxového jádra s dvojnásobným cílem :

– urychlit sestavení jádra (absolutní i přírůstkové doby sestavení)

- typové oddělení subsystému a definic API od sebe

Jak většina vývojářů jádra ví, v jádře Linuxu je asi 10,000 30 hlavních hlaviček .h v hierarchiích include / a arch/*/include/. Za posledních více než XNUMX let se vyvinuli do komplikovaného a bolestivého souboru křížových závislostí, které láskyplně nazýváme „Peklo závislosti“.

Mezi provedené změny patří: oddělení hlavičkových souborů na vysoké úrovni od sebe navzájem, vyloučení inline funkcí, které propojují hlavičkové soubory, mapování hlavičkových souborů pro typy a API, poskytování samostatné sady hlavičkových souborů (asi 80 souborů mělo nepřímé závislosti, které narušují sestavení, odhalené prostřednictvím jiných souborů hlavičkových souborů), automatické přidávání závislostí na soubory ".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ů pro snížení počtu objektových souborů.

Jako výsledek, vykonaná práce umožnila zmenšit velikost zpracovávaných hlavičkových souborůve fázi následného předzpracování o 1-2 řády.

  • Například před optimalizací vedlo použití hlavičkového souboru "linux/gfp.h" k přidání 13543 řádků kódu a zahrnutí 303 závislých hlavičkových souborů a po optimalizaci byla velikost zmenšena na 181 řádků a 26 závislých souborů.
  • Další příklad: předzpracování souboru "kernel/pid.c" bez patche spojuje 94 tisíc řádků kódu, z nichž většina se v pid.c nepoužívá. Rozdělení hlavičkových souborů nám umožnilo třikrát 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, 15,5 sekund (z 27,7 na XNUMX sestavení za hodinu) a také zvýšila efektivitu využití jádra CPU během sestavení.

S inkrementálním sestavením je efekt optimalizace ještě znatelnější: doba potřebná k opětovnému sestavení jádra po provedení změn v hlavičkových souborech se výrazně zkrátila (ze 112 % na 173 %, v závislosti na změně hlavičkového souboru) .

Optimalizace jsou aktuálně dostupné pouze pro architektury ARM64, MIPS, Sparc a x86 (32bitové a 64bitové).

Jemně pokud máte zájem o tom vědět více, můžete zkontrolovat podrobnosti v následující odkaz.


Zanechte svůj komentář

Vaše e-mailová adresa nebude zveřejněna. Povinné položky jsou označeny *

*

*

  1. Odpovědný za údaje: Miguel Ángel Gatón
  2. Účel údajů: Ovládací SPAM, správa komentářů.
  3. Legitimace: Váš souhlas
  4. Sdělování údajů: Údaje nebudou sděleny třetím osobám, s výjimkou zákonných povinností.
  5. Úložiště dat: Databáze hostovaná společností Occentus Networks (EU)
  6. Práva: Vaše údaje můžete kdykoli omezit, obnovit a odstranit.