Objavljen je skup zakrpa koje ubrzavaju izgradnju Linux kernela za 50-80%

Ingo Molnar, poznati programer Linux kernela i autor CFS (Completely Fair Scheduler) planera zadataka, predložio je za raspravu na mailing listi za programere Linux kernela niz zakrpa koje utječu na više od polovice svih datoteka u izvorima kernela i omogućuju povećanje brzine potpune obnove jezgre za 50-80%, ovisno o postavkama. Implementirana optimizacija je značajna po tome što je povezana s dodavanjem najvećeg skupa promjena u povijesti razvoja kernela - 2297 zakrpa predloženo je za uključivanje odjednom, mijenjajući više od 25 tisuća datoteka (10 tisuća datoteka zaglavlja u "uključi /” i “arch/*/include/” direktoriji "i 15 tisuća datoteka s izvornim tekstovima).

Poboljšanje performansi postiže se promjenom metode obrade datoteka zaglavlja. Primijećeno je da je tijekom trideset godina razvoja kernela stanje datoteka zaglavlja poprimilo depresivan izgled zbog prisutnosti velikog broja unakrsnih ovisnosti između datoteka. Restrukturiranje datoteke zaglavlja trajalo je više od godinu dana i zahtijevalo je značajnu preradu hijerarhije i ovisnosti. Tijekom restrukturiranja radilo se na odvajanju definicija tipa i API-ja za različite podsustave jezgre.

Među učinjenim promjenama: međusobno odvajanje datoteka zaglavlja visoke razine, eliminiranje ugrađenih funkcija koje povezuju datoteke zaglavlja, odvajanje datoteka zaglavlja za tipove i API-je, osiguravanje zasebnog sklapanja datoteka zaglavlja (oko 80 datoteka imalo je neizravne ovisnosti koje su ometale sklapanje, izložene kroz druge datoteke zaglavlja), automatsko dodavanje ovisnosti datotekama ".h" i ".c", optimizacija datoteka zaglavlja korak po korak, korištenje načina rada "CONFIG_KALLSYMS_FAST=y", selektivna konsolidacija C datoteka u blokove sklopa za smanjiti broj objektnih datoteka.

Kao rezultat toga, obavljeni rad omogućio je smanjenje veličine datoteka zaglavlja obrađenih u fazi naknadne predprocesiranja za 1-2 reda veličine. Na primjer, prije optimizacije korištenje datoteke zaglavlja "linux/gfp.h" rezultiralo je dodavanjem 13543 redaka koda i uključivanjem 303 zavisne datoteke zaglavlja, a nakon optimizacije veličina je smanjena na 181 redak i 26 zavisnih datoteka. Ili još jedan primjer: prilikom predprocesiranja datoteke “kernel/pid.c” bez zakrpe uključeno je 94 tisuće redaka koda, od kojih se većina ne koristi u pid.c. Razdvajanje datoteka zaglavlja omogućilo je smanjenje količine obrađenog koda za tri puta, smanjujući broj obrađenih linija na 36 tisuća.

Kada je kernel potpuno ponovno izgrađen naredbom “make -j96 vmlinux” na testnom sustavu, primjena zakrpa pokazala je smanjenje vremena izgradnje grane v5.16-rc7 s 231.34 na 129.97 sekundi (sa 15.5 na 27.7 verzija po satu), a također je povećao učinkovitost korištenja CPU jezgri tijekom sklapanja. Uz inkrementalnu izgradnju, učinak optimizacije je još uočljiviji - vrijeme za ponovnu izgradnju kernela nakon izmjena u datotekama zaglavlja značajno se smanjilo (sa 112% na 173% ovisno o datoteci zaglavlja koja se mijenja). Optimizacije su trenutno dostupne samo za ARM64, MIPS, Sparc i x86 (32- i 64-bitne) arhitekture.

Izvor: opennet.ru

Dodajte komentar