Pubblicato un insieme di patch che accelerano la compilazione del kernel Linux del 50-80%

Ingo Molnar, noto sviluppatore del kernel Linux e autore dello scheduler di compito CFS (Completely Fair Scheduler), ha proposto per discussione nella mailing list degli sviluppatori del kernel Linux una serie di patch che riguardano più della metà di tutti i file nei codici sorgente del kernel e che garantiscono un aumento della velocità di ricompilazione completa del kernel del 50-80% a seconda delle impostazioni. L'ottimizzazione implementata è notevole poiché comporta l'aggiunta del pacchetto di modifiche più consistente nella storia dello sviluppo del kernel: è stato proposto di includere 2297 patch che modificano oltre 25.000 file (10.000 file di intestazione nelle directory «include/» e «arch/*/include/» e 15.000 file sorgente).

L'aumento delle prestazioni è ottenuto attraverso la modifica del metodo di gestione dei file di intestazione. Si osserva che, dopo trent'anni di sviluppo del kernel, la situazione dei file di intestazione è diventata preoccupante a causa dell'elevato numero di dipendenze incrociate tra i file. Il lavoro di ristrutturazione dei file di intestazione ha richiesto più di un anno e ha comportato una significativa revisione della gerarchia e delle dipendenze. Durante la ristrutturazione, è stato effettuato un lavoro di separazione delle definizioni dei tipi e delle API per i diversi sottosistemi del kernel.

Tra le modifiche apportate: separazione dei file di intestazione di alto livello l'uno dall'altro, esclusione dell'inclusione di file di intestazione per le funzioni inline, creazione di file di intestazione per tipi e API, garanzia di una raccolta separata dei file di intestazione (circa 80 file avevano dipendenze indirette che ostacolavano la compilazione, propagate tramite altri file di intestazione), aggiunta automatica delle dipendenze ai file «.h» e «.c», ottimizzazione passo dopo passo dei file di intestazione, utilizzo della modalità «CONFIG_KALLSYMS_FAST=y», consolidamento selettivo dei file C in blocchi di costruzione per ridurre il numero di file oggetto.

In definitiva, il lavoro svolto ha consentito di ridurre di 1-2 ordini di grandezza la dimensione dei file di intestazione elaborati nella fase di post-preprocessing. Ad esempio, prima dell'ottimizzazione, l'utilizzo del file di intestazione "linux/gfp.h" portava all'aggiunta di 13543 righe di codice e al collegamento di 303 file di intestazione dipendenti, mentre dopo l'ottimizzazione la dimensione è scesa a 181 righe e 26 file dipendenti. Un altro esempio: durante il preprocessing del file "kernel/pid.c" senza patch, si collegano 94 mila righe di codice, gran parte delle quali non viene utilizzata in pid.c. La separazione dei file di intestazione ha permesso di ridurre il volume del codice elaborato di tre volte, abbattendo il numero di righe trattate a 36 mila.

Durante la ricompilazione completa del kernel con il comando "make -j96 vmlinux" sulla sistema di test, l'applicazione delle patch ha mostrato una riduzione del tempo di compilazione del ramo v5.16-rc7 da 231,34 a 129,97 secondi (da 15,5 a 27,7 compilazioni all'ora), e ha anche migliorato l'efficienza dell'utilizzo delle CPU durante la compilazione. Nella compilazione incrementale, l'effetto dell'ottimizzazione è ancora più evidente: il tempo di ricompilazione del kernel dopo le modifiche ai file di intestazione si è ridotto drasticamente (dal 112% al 173% a seconda del file di intestazione modificato). Le ottimizzazioni sono attualmente disponibili solo per le architetture ARM64, MIPS, Sparc e x86 (32 e 64 bit).

Fonte: opennet.ru

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster