Velocizzare la compilazione di Linux

Lavorando con sistemi embedded di diversa natura mi capita spessissimo di dover ricompilare il kernel Linux; una operazione che, di per se, necessita di parecchio tempo.

I PC di ultima generazione, che si usano come sistemi host sui quali gira il cross-compilatore, hanno in genere più di un core e quindi perché non sfruttare la compilazione parallela che make ci mette a disposizione per velocizzare l’operazione?

Riuscire infatti a ricompilare il kernel più velocemente per diminuire i tempi morti che si hanno durante lo sviluppo di un sistema embedded (e chi fa il mio mestiera sa quanto tempo si perde se si deve ricompilare spesso il kernel) è sicuramente importante!

Vediamo allora di trovare una regoletta generale per ricompilare il kernel il più velocemente possibile sfruttando al massimo le risorse del nostro PC di lavoro.

Innanzi tutto per abilitare la compilazione parallela di make dobbiamo usare l’opzione -j; ad esempio, per lanciare 2 thread di compilazione in parallelo dobbiamo usare il comando:

$ make -j2

Poi vediamo quanti core abbiamo sul nostro sistema GNU/Linux:

$ grep processor /proc/cpuinfo | wc -l
8

Nel mio caso, quindi, posso sfruttare fino ad 8 core!

Bene. Iniziamo vedendo quando tempo impieghiamo per compilare un kernel utilizzando una sola thread (usiamo il comando time per misurare i tempi esatti):

$ time make -j1

real    88m51.958s
user    80m52.111s
sys    7m12.663s

e poi ripetiamo la prova con diversi valori per il parametro -j. Riporto i risultati che ho ottenuto dalle mie prove nella tabella seguente:

# thread tempo
1  88m 51.958s
2  52m 50.192s
4  34m 0.174s
7  29m 8.606s
8  28m 30.574s
9  29m 7.138s
16  28m 35.644s

 

Dai tempi ottenuti (e considerando un po’ di errori dovuti al carico macchina variabile – stavo lavorando mentre facevo questi test n.d.a.) è palese che il risultato migliore lo otteniamo con un numero di thread vicino al numero di core della macchina.

Ora, non volendo essere questa una prova scientifica, possiamo però affermare che, per ricompilare il kernel nel minor tempo possibile, possiamo usare una compilazione parallela con un numero di thread pari al numero di core disponibili.

Valori troppo grandi non fanno altro che sovraccaricaricare la macchina senza influire i tempi di compilazione.

Su Rodolfo Giometti

Ingegnere informatico libero professionista ed esperto GNU/Linux offre supporto per: - device drivers; - sistemi embedded; - sviluppo applicazioni industriali per controllo automatico e monitoraggio remoto; - corsi di formazione dedicati. Manutentore del progetto LinuxPPS (il sottosistema Pulse Per Second di Linux) contribuisce attivamente allo sviluppo del kernel Linux con diverse patch riguardanti varie applicazioni del kernel e dispositivi (switch, fisici di rete, RTC, USB, I2C, network, ecc.). Nei 15+ anni di esperienza su Linux ha lavorato con le piattaforme x86, ARM, MIPS & PowerPC.

Lascia un commento

Utilizzando il sito, accetti l'utilizzo dei cookie da parte nostra. maggiori informazioni

Questo sito utilizza i cookie per fonire la migliore esperienza di navigazione possibile. Continuando a utilizzare questo sito senza modificare le impostazioni dei cookie o clicchi su "Accetta" permetti al loro utilizzo.

Chiudi