Fast Kernel Headers, un set de patch-uri care accelerează compilarea nucleului cu 50-80%

Ingo Molnar, un binecunoscut dezvoltator de kernel Linux și autorul CFS Task Scheduler a propus pentru discuția listei de corespondență pentru dezvoltarea nucleului Linux o serie de patch-uri, care afectează mai mult de jumătate din toate fișierele din sursa nucleului și asigură o creștere a vitezei generale de reconstrucție a nucleului cu 50 -80%, în funcție de configurație.

Optimizarea implementată Este notabil deoarece este asociat cu adăugarea celui mai mare set de modificări în istoria dezvoltării nucleului: au propus să includă 2297 de patch-uri simultan, schimbând peste 25 de mii de fișiere.

Câștigul de performanță se realizează prin schimbarea metodei de gestionare a fișierului antet. Trebuie remarcat faptul că peste treizeci de ani de dezvoltare a nucleului, starea fișierelor de antet a căpătat o formă deprimantă din cauza prezenței unui număr mare de dependențe încrucișate între fișiere.

Restructurarea fișierelor antet a durat mai mult de un an și a necesitat o reproiectare 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 kernel.

Sunt încântat să anunț prima lansare publică a noului meu proiect „Fast Kernel Headers” la care lucrez de la sfârșitul anului 2020, care este o reelaborare cuprinzătoare a ierarhiei antetului kernelului Linux și a dependențelor antetului, cu dublu scop:

- accelerați construirea nucleului (atât timpii de construcție absoluti, cât și incrementali)

– decuplarea tipului de subsistem și a definițiilor API unul de celălalt

După cum știu majoritatea dezvoltatorilor de kernel, există aproximativ 10,000 de anteturi .h principale în nucleul Linux, în ierarhiile include / și arch/*/include/. În ultimii peste 30 de ani, au devenit un set complicat și dureros de dependențe încrucișate pe care le numim cu afecțiune „Iadul Dependenței”.

Printre modificările efectuate se numără: separarea fișierelor de antet de nivel înalt unele de altele, excluderea funcțiilor inline care leagă fișierele antet, maparea fișierelor antet pentru tipuri și API-uri, furnizarea unui set separat de fișiere antet (aproximativ 80 de fișiere aveau dependențe indirecte care interferează cu asamblarea, expuse prin alte fișiere de 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 reducerea numărului de fișiere obiect.

Ca urmare, Munca depusă ne-a permis să reducem dimensiunea fișierelor de 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.
  • Un alt exemplu: preprocesarea fișierului „kernel/pid.c” nepatchat conectează 94 de mii de linii de cod, dintre care majoritatea nu sunt folosite în pid.c. Împărțirea fișierelor antet ne-a permis să reducem de trei ori cantitatea de cod procesat, reducând numărul de linii procesate la 36 de mii.

Când nucleul a fost complet reconstruit cu comanda „make -j96 vmlinux” de pe sistemul de testare, aplicarea patch-urilor 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). build-uri pe oră) și, de asemenea, a crescut eficiența utilizării nucleelor ​​CPU în timpul construcției.

Cu compilarea incrementală, efectul de optimizare este și mai vizibil: timpul de reconstrucție a nucleului după efectuarea modificărilor fișierelor antet a fost redus 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).

Fin dacă sunteți interesat să aflați mai multe despre asta, puteți verifica detaliile în următorul link.


Lasă comentariul tău

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *

*

*

  1. Responsabil pentru date: Miguel Ángel Gatón
  2. Scopul datelor: Control SPAM, gestionarea comentariilor.
  3. Legitimare: consimțământul dvs.
  4. Comunicarea datelor: datele nu vor fi comunicate terților decât prin obligație legală.
  5. Stocarea datelor: bază de date găzduită de Occentus Networks (UE)
  6. Drepturi: în orice moment vă puteți limita, recupera și șterge informațiile.