Brza zaglavlja kernela, skup zakrpa koje ubrzavaju kompilaciju kernela za 50-80%

Ingo Molnar, poznati programer Linux kernela i autor CFS Task Scheduler predložio je raspravi o mailing listi za razvoj jezgre Linuxa niz zakrpa, koje utječu na više od polovice svih datoteka u izvornom kodu kernela i osiguravaju povećanje ukupne brzine obnavljanja kernela od 50 -80% ovisno o konfiguraciji.

Implementirana optimizacija je značajan po tome što je povezan s dodatkom najvećeg skupa izmjena u povijesti razvoja kernela - predložili su uključivanje 2297 zakrpa odjednom, mijenjajući više od 25 tisuća datoteka.

Dobitak performansi se postiže promjenom metode rukovanja datotekom zaglavlja. Treba napomenuti da je tijekom trideset godina razvoja kernela stanje datoteka zaglavlja poprimilo depresivan oblik zbog prisutnosti velikog broja unakrsnih ovisnosti između datoteka.

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

Zadovoljstvo mi je najaviti prvo javno izdanje svog novog projekta "Fast Kernel Headers" na kojem radim od kraja 2020., a koji je opsežna prerada hijerarhije zaglavlja i ovisnosti zaglavlja Linux kernela, s dvostruko većim ciljem :

- ubrzati izgradnju kernela (apsolutna i inkrementalna vremena izgradnje)

– međusobno razdvajanje definicija tipa podsustava i API-ja

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

Među napravljenim promjenama su: odvajanje datoteka zaglavlja visoke razine jedna od druge, isključenje inline funkcija koje povezuju datoteke zaglavlja, mapiranje datoteka zaglavlja za vrste i API-je, osiguravanje zasebnog skupa datoteka zaglavlja (oko 80 datoteka ima neizravne ovisnosti koje ometaju sastavljanje, izložene kroz druge datoteke zaglavlja), automatsko dodavanje ovisnosti na ".h" i ".c" datoteke, korak-po-korak optimizacija datoteka zaglavlja, korištenje "CONFIG_KALLSYMS_FAST=y" načina rada, selektivna konsolidacija C datoteka u sklopove za smanjenje broja objektnih datoteka.

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

  • Primjerice, prije optimizacije, korištenje zaglavlja datoteke "linux / gfp.h" rezultiralo je dodavanjem 13543 retka koda i uključivanjem 303 zavisne datoteke zaglavlja, a nakon optimizacije veličina je smanjena na 181 redak i 26 ovisnih datoteka.
  • Drugi primjer: predobrada datoteke "kernel/pid.c" bez zakrpe povezuje 94 tisuće redaka koda, od kojih se većina ne koristi u pid.c. Dijeljenje datoteka zaglavlja omogućilo nam je da tri puta smanjimo količinu obrađenog koda, smanjujući broj obrađenih redaka na 36 tisuća.

Kada je kernel u potpunosti obnovljen naredbom "make -j96 vmlinux" na testnom sustavu, primjena zakrpa pokazala je smanjenje vremena izgradnje grane v5.16-rc7 sa 231,34 na 129,97, 15,5 sekundi (sa 27,7 na XNUMX). gradnje po satu) i također povećala učinkovitost korištenja CPU jezgre tijekom gradnje.

Uz inkrementalnu kompilaciju, učinak optimizacije je još uočljiviji: vrijeme za ponovnu izgradnju kernela nakon izmjena datoteka zaglavlja značajno je smanjeno (sa 112% na 173%, ovisno o datoteci zaglavlja koja se mijenja).

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

Fino ako vas zanima više o tome, detalje možete provjeriti u sljedeći link.


Ostavite svoj komentar

Vaša email adresa neće biti objavljen. Obavezna polja su označena s *

*

*

  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 obvezi.
  5. Pohrana podataka: Baza podataka koju hostira Occentus Networks (EU)
  6. Prava: U bilo kojem trenutku možete ograničiti, oporaviti i izbrisati svoje podatke.