Objavljen je set 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 Linux kernela niz zakrpa koje utiču na više od polovine svih datoteka u izvorima kernela i omogućavaju povećanje brzine kompletne rekonstrukcije kernela za 50-80% ovisno o postavkama. Implementirana optimizacija je vrijedna pažnje po tome što je povezana s dodavanjem najvećeg skupa izmjena u istoriji razvoja kernela - 2297 zakrpa je predloženo za uključivanje odjednom, mijenjajući više od 25 hiljada datoteka (10 hiljada datoteka zaglavlja u „uključi /” i “arch/*/include/” direktoriji “i 15 hiljada datoteka sa izvornim tekstovima).

Povećanje performansi se postiže promjenom metode obrade datoteka zaglavlja. Napominje se da je tokom trideset godina razvoja kernela, stanje datoteka zaglavlja poprimilo depresivan izgled zbog prisustva velikog broja unakrsnih ovisnosti između datoteka. Restrukturiranje fajla zaglavlja trajalo je više od godinu dana i zahtevalo je značajno preradu hijerarhije i zavisnosti. Tokom restrukturiranja, radilo se na razdvajanju definicija tipa i API-ja za različite podsisteme kernela.

Među napravljenim promjenama: razdvajanje datoteka zaglavlja na visokoj razini jedna od druge, eliminacija inline funkcija koje povezuju datoteke zaglavlja, odvajanje datoteka zaglavlja za tipove i API-je, osiguranje odvojenog sastavljanja datoteka zaglavlja (oko 80 datoteka imalo je indirektne ovisnosti koje ometaju sklapanje, izložene su kroz druge datoteke zaglavlja), automatsko dodavanje zavisnosti u “.h” i “.c” datoteke, korak-po-korak optimizacija datoteka zaglavlja, korištenje “CONFIG_KALLSYMS_FAST=y” moda, selektivna konsolidacija C datoteka u sklopove za smanjiti broj objektnih datoteka.

Kao rezultat toga, obavljeni posao omogućio je smanjenje veličine datoteka zaglavlja koje se obrađuju u fazi post-preprocesiranja za 1-2 reda veličine. Na primjer, prije optimizacije, korištenje datoteke zaglavlja “linux/gfp.h” rezultiralo je dodavanjem 13543 reda koda i uključivanjem 303 zavisna datoteka zaglavlja, a nakon optimizacije veličina je smanjena na 181 red i 26 zavisnih datoteka. Ili drugi primjer: prilikom preprocesiranja datoteke “kernel/pid.c” bez zakrpe, uključeno je 94 hiljade linija koda, od kojih se većina ne koristi u pid.c. Odvajanje datoteka zaglavlja omogućilo je smanjenje količine obrađenog koda za tri puta, smanjujući broj obrađenih linija na 36 hiljada.

Kada je kernel u potpunosti rekonstruisan komandom “make -j96 vmlinux” na test sistemu, primena zakrpa je pokazala smanjenje vremena izgradnje grane v5.16-rc7 sa 231.34 na 129.97 sekundi (sa 15.5 na 27.7 build-ova na sat), a takođe je povećala efikasnost korišćenja CPU jezgara tokom sklapanja. Sa inkrementalnom gradnjom, efekat optimizacije je još uočljiviji - vrijeme za ponovnu izgradnju kernela nakon unošenja izmjena u fajlove zaglavlja značajno se smanjilo (sa 112% na 173% u zavisnosti od datoteke 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