A fost publicat un set de patch-uri care accelerează construirea nucleului Linux cu 50-80%

Ingo Molnar, un cunoscut dezvoltator de kernel Linux și autor al programatorului de activități CFS (Completely Fair Scheduler), a propus spre discuție pe lista de corespondență a dezvoltatorilor de kernel Linux o serie de patch-uri care afectează mai mult de jumătate din toate fișierele din sursele kernelului și oferă o creștere a vitezei unei reconstruiri complete a nucleului cu 50-80%, în funcție de setări. Optimizarea implementată este demnă de remarcat prin faptul că este asociată cu adăugarea celui mai mare set de modificări din istoria dezvoltării kernelului - 2297 de corecții au fost propuse pentru includere simultan, modificând mai mult de 25 de mii de fișiere (10 mii de fișiere de antet în „include /” și „arch/*/include/” directoare „și 15 mii de fișiere cu texte sursă).

Câștigul de performanță este obținut prin schimbarea metodei de procesare a fișierelor de antet. Se observă că peste treizeci de ani de dezvoltare a nucleului, starea fișierelor antet a căpătat un aspect deprimant datorită prezenței unui număr mare de dependențe încrucișate între fișiere. Restructurarea fișierului antet a durat peste un an și a necesitat o reelaborare semnificativă a ierarhiei și a dependențelor. În timpul restructurării, s-a lucrat pentru a separa definițiile de tip și API-urile pentru diferite subsisteme de nucleu.

Printre modificările efectuate: separarea fișierelor antet de nivel înalt unele de altele, eliminarea funcțiilor inline care leagă fișierele antet, separarea fișierelor antet pentru tipuri și API-uri, asigurarea asamblarii separate a fișierelor antet (aproximativ 80 de fișiere aveau dependențe indirecte care interferau cu asamblarea, expuse prin alte fișiere antet), adăugarea automată a dependențelor la fișierele „.h” și „.c”, optimizarea pas cu pas a fișierelor antet, utilizarea modului „CONFIG_KALLSYMS_FAST=y”, consolidarea selectivă a fișierelor C în blocuri de asamblare pentru reduceți numărul de fișiere obiect.

Drept urmare, munca depusă a făcut posibilă reducerea dimensiunii fișierelor antet procesate în etapa de post-preprocesare cu 1-2 ordine de mărime. De exemplu, înainte de optimizare, utilizarea fișierului antet „linux/gfp.h” a dus la adăugarea a 13543 de linii de cod și la includerea a 303 fișiere de antet dependente, iar după optimizare dimensiunea a fost redusă la 181 de linii și 26 de fișiere dependente. Sau un alt exemplu: la preprocesarea fișierului „kernel/pid.c” fără patch, sunt incluse 94 de mii de linii de cod, dintre care majoritatea nu sunt folosite în pid.c. Separarea fișierelor de antet a făcut posibilă reducerea cantității de cod procesat de trei ori, reducând numărul de linii procesate la 36 de mii.

Când nucleul a fost reconstruit complet cu comanda „make -j96 vmlinux” pe un sistem de testare, aplicarea de patch-uri a arătat o reducere a timpului de construire al ramurii v5.16-rc7 de la 231.34 la 129.97 secunde (de la 15.5 la 27.7 versiuni). pe oră) și, de asemenea, a crescut eficiența utilizării nucleelor ​​CPU în timpul asamblărilor. Cu o construcție incrementală, efectul optimizării este și mai vizibil - timpul de reconstrucție a nucleului după efectuarea modificărilor fișierelor antet a scăzut semnificativ (de la 112% la 173%, în funcție de fișierul antet modificat). Optimizările sunt disponibile în prezent numai pentru arhitecturile ARM64, MIPS, Sparc și x86 (32 și 64 de biți).

Sursa: opennet.ru

Adauga un comentariu