È stato pubblicato un insieme di patch che accelerano la compilazione del kernel Linux dal 50 all'80%

Ingo Molnar, noto sviluppatore del kernel Linux e autore dello scheduler CFS (Completely Fair Scheduler), ha proposto per discussione nella mailing list degli sviluppatori del kernel Linux una serie di patch che interessano più della metà di tutti i file nei sorgenti del kernel, garantendo un incremento della velocità di ricompilazione completa del kernel dal 50 all'80%, a seconda delle impostazioni. L'ottimizzazione realizzata è notevole poiché comporta l'aggiunta del più ampio insieme di modifiche nella storia dello sviluppo del kernel: sono proposte per l'inclusione 2297 patch che modificano più di 25.000 file (10.000 file header nelle directory «include/» e «arch/*/include/» e 15.000 file di sorgente).

L'aumento delle prestazioni è ottenuto modificando il metodo di gestione dei file di intestazione. Si nota che, dopo trent'anni di sviluppo del kernel, lo stato dei file di intestazione è diventato deludente 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 richiesto una significativa revisione della gerarchia e delle dipendenze. Durante la ristrutturazione, è stato effettuato un lavoro per separare le definizioni dei tipi e le API per diversi sottosistemi del kernel.

Tra le modifiche apportate: separazione dei file di intestazione di alto livello, esclusione dei file di intestazione collegati per le funzioni inline, distinzione dei file di intestazione per tipi e API, garantendo la raccolta separata dei file di intestazione (circa 80 file presentavano dipendenze indirette che ostacolavano la compilazione, esposte tramite altri file di intestazione), aggiunta automatica delle dipendenze ai file ".h" e ".c", ottimizzazione step-by-step dei file di intestazione, utilizzo della modalità "CONFIG_KALLSYMS_FAST=y", consolidamento selettivo dei file C in blocchi di compilazione per ridurre il numero di file oggetto.

Alla fine, il lavoro svolto ha permesso di ridurre di 1-2 ordini di grandezza la dimensione dei file di intestazione elaborati nella fase di post-elaborazione. Ad esempio, prima dell'ottimizzazione, l'uso del file di intestazione «linux/gfp.h» comportava l'aggiunta di 13543 righe di codice e l'inclusione di 303 file di intestazione dipendenti, mentre dopo l'ottimizzazione la dimensione si è ridotta a 181 righe e 26 file dipendenti. Oppure, un altro esempio: durante la preelaborazione del file «kernel/pid.c» senza patch viene incluso 94.000 righe di codice, la maggior parte delle quali non viene utilizzata in pid.c. La suddivisione dei file di intestazione ha consentito di ridurre il volume del codice elaborato di tre volte, riducendo il numero di righe elaborate a 36.000.

Con una ricompilazione completa del kernel con il comando «make -j96 vmlinux» su un sistema di test, l'applicazione di patch ha ridotto il 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'uso dei core della CPU durante la compilazione. Nella compilazione incrementale, l'effetto dell'ottimizzazione è ancora più evidente: il tempo di recompilazione del kernel dopo le modifiche ai file di intestazione è diminuito drasticamente (dal 112% al 173% a seconda del file di intestazione modificato). Le ottimizzazioni sono al momento 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