Objavljen je skup zakrpa za ubrzavanje kompajliranja kernela. Linux za 50-80%

Ingo Molnar, poznati programer Linux kernel i autor CFS (Completely Fair Scheduler) raspoređivača zadataka, predložio ga je za raspravu na mailing listi programera kernela Linux Niz zakrpa koje utječu na više od polovice svih datoteka u izvornom kodu kernela i omogućuju povećanje brzine potpune obnove kernela za 50-80%, ovisno o postavkama. Ova optimizacija je značajna jer uključuje najveći skup promjena u povijesti razvoja kernela - 2297 zakrpa predloženih za uključivanje odjednom, mijenjajući više od 25 000 datoteka (10 000 zaglavnih datoteka u direktorijima "include/" i "arch/*/include/" i 15 000 datoteka izvornog koda).

Povećanje performansi postiže se promjenom načina obrade zaglavnih datoteka. Primjećuje se da je tijekom trideset godina razvoja kernela stanje zaglavnih datoteka postalo loše zbog velikog broja međuovisnosti između datoteka. Restrukturiranje zaglavnih datoteka trajalo je više od godinu dana i zahtijevalo je značajno preoblikovanje hijerarhije i ovisnosti. Ovo restrukturiranje uključivalo je odvajanje definicija tipova i API-ja za različite podsustave kernela.

Među napravljenim promjenama: odvajanje visokorazinskih zaglavnih datoteka jedne od druge, isključivanje inline funkcija koje povezuju zaglavne datoteke, dodjeljivanje zaglavnih datoteka za tipove i API-je, osiguravanje odvojenog sastavljanja zaglavnih datoteka (oko 80 datoteka imalo je neizravne ovisnosti koje su ometale sastavljanje, izložene kroz druge zaglavne datoteke), automatsko dodavanje ovisnosti datotekama ".h" i ".c", postupna optimizacija zaglavnih datoteka, korištenje načina rada "CONFIG_KALLSYMS_FAST=y", selektivna konsolidacija C datoteka u asemblerske blokove kako bi se smanjio broj objektnih datoteka.

Konačno, obavljeni rad omogućio nam je smanjenje veličine zaglavnih datoteka obrađenih u fazi naknadne predobrade za 1-2 reda veličine. Na primjer, prije optimizacije, korištenje zaglavne datoteke "linux/gfp.h" rezultiralo je dodavanjem 13 543 retka koda i uključivanjem 303 zavisne zaglavne datoteke; nakon optimizacije, veličina je smanjena na 181 redak i 26 zavisnih datoteka. Drugi primjer: predobrada datoteke "kernel/pid.c" bez zakrpe uključuje 94 000 redaka koda, od kojih se većina ne koristi u pid.c. Razdvajanje zaglavnih datoteka omogućilo nam je smanjenje količine obrađenog koda za faktor tri, smanjujući broj obrađenih redaka na 36 000.

Prilikom pokretanja potpune obnove kernela pomoću naredbe "make -j96 vmlinux" na testnom sustavu, primjena zakrpa smanjila je vrijeme izgradnje za granu v5.16-rc7 s 231.34 na 129.97 sekundi (s 15.5 na 27.7 izgradnje na sat), a također je povećala učinkovitost korištenja jezgre CPU-a tijekom izgradnje. S inkrementalnim izgradnjama, učinak optimizacije je još uočljiviji: vrijeme potrebno za obnovu kernela nakon promjene zaglavnih datoteka značajno je smanjeno (sa 112% na 173%, ovisno o zaglavnoj datoteci koja se mijenja). Optimizacije su trenutno dostupne samo za arhitekture ARM64, MIPS, Sparc i x86 (32-bitne i 64-bitne).

Izvor: opennet.ru

Kupite pouzdan hosting za stranice s DDoS zaštitom, VPS VDS poslužiteljima 🔥 Kupite pouzdan web hosting sa DDoS zaštitom, VPS VDS servere | ProHoster