Objavljen je nabor popravkov, ki pospešijo gradnjo jedra Linuxa za 50-80 %

Ingo Molnar, znani razvijalec jedra Linuxa in avtor razporejevalnika opravil CFS (Completely Fair Scheduler), je za razpravo na poštnem seznamu razvijalcev jedra Linux predlagal niz popravkov, ki vplivajo na več kot polovico vseh datotek v virih jedra in zagotavlja povečanje hitrosti popolne obnove jedra za 50-80 %, odvisno od nastavitev. Izvedena optimizacija je omembe vredna, saj vključuje dodajanje največjega nabora sprememb v zgodovini razvoja jedra - za vključitev je bilo predlaganih 2297 popravkov naenkrat, ki spreminjajo več kot 25 tisoč datotek (10 tisoč datotek glave v »include/« in imeniki "arch/*/include/" in 15 tisoč datotek z izvornimi besedili).

Povečanje zmogljivosti je doseženo s spremembo načina obdelave datotek glave. Ugotovljeno je, da je v tridesetih letih razvoja jedra stanje datotek glave postalo depresivno zaradi prisotnosti velikega števila navzkrižnih odvisnosti med datotekami. Prestrukturiranje datoteke glave je trajalo več kot eno leto in je zahtevalo precejšnjo predelavo hierarhije in odvisnosti. Med prestrukturiranjem je bilo opravljeno delo za ločevanje definicij tipov in API-jev za različne podsisteme jedra.

Med uvedenimi spremembami: ločevanje visokonivojskih datotek glave med seboj, odprava vgrajenih funkcij, ki povezujejo datoteke glave, ločevanje datotek glave za vrste in API-je, zagotavljanje ločenega sestavljanja datotek glave (približno 80 datotek je imelo posredne odvisnosti, ki motijo ​​sestavljanje, izpostavljene prek druge datoteke glave), samodejno dodajanje odvisnosti v datoteke ».h« ​​in ».c«, optimizacija datotek glave po korakih, uporaba načina »CONFIG_KALLSYMS_FAST=y«, selektivno združevanje datotek C v zbirne bloke za zmanjšajte število objektnih datotek.

Posledično je opravljeno delo omogočilo zmanjšanje velikosti datotek glave, obdelanih v fazi naknadne predhodne obdelave, za 1-2 reda velikosti. Na primer, pred optimizacijo je uporaba datoteke glave »linux/gfp.h« povzročila dodajanje 13543 vrstic kode in vključitev 303 odvisnih datotek glave, po optimizaciji pa je bila velikost zmanjšana na 181 vrstic in 26 odvisnih datotek. Ali drug primer: pri predprocesiranju datoteke »kernel/pid.c« brez popravka je vključenih 94 tisoč vrstic kode, od katerih večina ni uporabljena v pid.c. Ločevanje datotek glave je omogočilo zmanjšanje količine obdelane kode za trikrat, s čimer se je število obdelanih vrstic zmanjšalo na 36 tisoč.

Ko je bilo jedro popolnoma na novo zgrajeno z ukazom »make -j96 vmlinux« na testnem sistemu, je uporaba popravkov pokazala skrajšanje časa gradnje veje v5.16-rc7 z 231.34 na 129.97 sekunde (s 15.5 na 27.7 gradnje na uro), povečala pa je tudi učinkovitost uporabe jeder CPU med sestavljanjem. Pri postopni gradnji je učinek optimizacije še bolj opazen - čas za ponovno sestavo jedra po spremembah datotek glave se je znatno zmanjšal (s 112 % na 173 %, odvisno od datoteke glave, ki se spreminja). Optimizacije so trenutno na voljo samo za arhitekture ARM64, MIPS, Sparc in x86 (32- in 64-bitne).

Vir: opennet.ru

Dodaj komentar