Fast Kernel Headers, una serie di patch che velocizzano la compilazione del kernel del 50-80%

Ingo Molnar, un noto sviluppatore di kernel Linux e autore di CFS Task Scheduler proposto per la discussione sulla mailing list di sviluppo del kernel Linux una serie di patch, che interessano più della metà di tutti i file nel sorgente del kernel e forniscono un aumento complessivo della velocità di ricostruzione del kernel del 50 -80% a seconda della configurazione.

L'ottimizzazione implementata è degno di nota in quanto è associato all'aggiunta del più grande set di modifiche nella storia dello sviluppo del kernel: si proponevano di includere 2297 patch contemporaneamente, modificando più di 25mila file.

Guadagno di prestazioni si ottiene modificando il metodo di gestione del file di intestazione. Va notato che durante trent'anni di sviluppo del kernel, lo stato dei file di intestazione ha assunto una forma triste a causa della presenza di un gran numero di dipendenze incrociate tra i file.

La ristrutturazione dei file di intestazione ha richiesto più di un anno e ha richiesto una riprogettazione significativa della gerarchia e delle dipendenze. Durante la ristrutturazione, si è lavorato per separare le definizioni dei tipi e le API per i diversi sottosistemi del kernel.

Sono lieto di annunciare la prima versione pubblica del mio nuovo progetto "Fast Kernel Headers" su cui sto lavorando dalla fine del 2020, che è una rielaborazione completa della gerarchia delle intestazioni del kernel Linux e delle dipendenze delle intestazioni, con il doppio obiettivo di:

- accelerare la compilazione del kernel (tempi di compilazione sia assoluti che incrementali)

- tipo disaccoppiamento di sottosistema e definizioni API l'uno dall'altro

Come la maggior parte degli sviluppatori di kernel sa, ci sono circa 10,000 header .h principali nel kernel Linux, nelle gerarchie include / e arch / * / include /. Negli ultimi 30+ anni, si sono evoluti in un complicato e doloroso insieme di dipendenze incrociate che chiamiamo affettuosamente "Inferno delle dipendenze".

Tra le modifiche apportate ci sono: separazione dei file di intestazione di alto livello l'uno dall'altro, esclusione delle funzioni inline che collegano i file di intestazione, mappatura dei file di intestazione per tipi e API, fornitura di un set separato di file di intestazione (circa 80 file avevano dipendenze indirette che interferiscono con l'assemblaggio, esposti tramite altri file di intestazione di file), aggiunta automatica di dipendenze a File ".h" e ".c", ottimizzazione passo passo dei file di intestazione, utilizzo della modalità "CONFIG_KALLSYMS_FAST = y", consolidamento selettivo dei file C in blocchi di assieme per ridurre il numero di file oggetto.

Di conseguenza, il lavoro svolto ha consentito di ridurre le dimensioni dei file di intestazione elaboratinella fase di post-preelaborazione di 1-2 ordini di grandezza.

  • Ad esempio, prima dell'ottimizzazione, l'utilizzo del file di intestazione "linux / gfp.h" ha comportato l'aggiunta di 13543 righe di codice e l'inclusione di 303 file di intestazione dipendenti e, dopo l'ottimizzazione, la dimensione è stata ridotta a 181 righe e 26 file dipendenti.
  • Un altro esempio: la preelaborazione del file "kernel / pid.c" senza patch connette 94mila righe di codice, la maggior parte delle quali non vengono utilizzate in pid.c. La suddivisione dei file di intestazione ci ha consentito di ridurre la quantità di codice elaborato tre volte, riducendo il numero di righe elaborate a 36.

Quando il kernel è stato completamente ricostruito con il comando "make -j96 vmlinux" sul sistema di test, la patch ha mostrato una riduzione del tempo di compilazione del ramo v5.16-rc7 da 231,34 a 129,97, 15,5 secondi (da 27,7 a XNUMX build per ora) e ha anche aumentato l'efficienza dell'utilizzo del core della CPU durante la compilazione.

Con una compilazione incrementale, l'effetto di ottimizzazione è ancora più evidente: il tempo per ricostruire il kernel dopo aver apportato modifiche ai file di intestazione è stato notevolmente ridotto (dal 112% al 173%, a seconda del file di intestazione che viene modificato).

Le ottimizzazioni sono attualmente disponibili solo per le architetture ARM64, MIPS, Sparc e x86 (32 bit e 64 bit).

Finemente se sei interessato a saperne di più, puoi controllare i dettagli nel file seguente link


Lascia un tuo commento

L'indirizzo email non verrà pubblicato. I campi obbligatori sono contrassegnati con *

*

*

  1. Responsabile dei dati: Miguel Ángel Gatón
  2. Scopo dei dati: controllo SPAM, gestione commenti.
  3. Legittimazione: il tuo consenso
  4. Comunicazione dei dati: I dati non saranno oggetto di comunicazione a terzi se non per obbligo di legge.
  5. Archiviazione dati: database ospitato da Occentus Networks (UE)
  6. Diritti: in qualsiasi momento puoi limitare, recuperare ed eliminare le tue informazioni.