Torna l’ottimizzazione in compilazione del Kernel, e Linus risponde

8

Una canzone di Antonello Venditti recita:

Certi amori non finiscono
fanno dei giri immensi e poi ritornano

Ecco, alcuni argomenti riguardo il Kernel sono uguali: sembra siano stati esauriti, ma ogni tanto tornano alla ribalta. E l’ottimizzazione del Kernel in fase di compilazione è certamente uno di questi.

Piccola digressione: il Kernel è (quasi esclusivamente) scritto in C, che richiede una fase di compilazione per trasformare il codice in un programma eseguibile.
Tipicamente è usato il compilatore GCC, che ha una miriade di opzioni a disposizione, alcune attivate a gruppi tramite l’opzione “-O”. L’intento è attivare delle fasi più avanzate/profonde nella compilazione, che richiedono più tempo/memoria/CPU, per avere un programma eseguibile più performante.
Sembra del tutto ragionevole usare le opzioni più spinte una volta per ottenere qualcosa di più veloce nell’uso, soprattutto se stiamo parlando del Kernel, il programma base in cui qualsiasi miglioramento – per quanto piccolo – può risultare vantaggioso.

Allora dove sta il problema? Nel fatto che anche GCC è un programma, affetto da bug come tutti. E che le opzioni più spinte sono anche quelle più pericolose, nel senso che possono introdurre dei bug nel programma eseguibile.
Questa categoria di bug è quella più difficile da rilevare, visto che il codice sorgente non ha alcun errore. Ma ancora più difficile è da sistemare: se il problema non è nel codice del Kernel, allora è in quello del compilatore (GCC) – un altro progetto.

Di recente è stata proposta una patch per poter attivare – in maniera sperimentale e solo su richiesta – il terzo livello di ottimizzazione, l’opzione “-O3”, ovvero un livello superiore a quello standard. E, come già detto, non è la prima volta che si prova a fare una cosa del genere.
E anche stavolta Linus ha dato il suo giudizio – negativo, ovviamente:

Honestly, let’s just remove -O3 entirely.

Onestamente, possiamo semplicemente rimuovere -O3 completamente.

La spiegazione è molto corta: l’opzione è già attivabile, non serve una patch apposita, ma – soprattutto – il programma risultante con “-O2” è storicamente meglio di quello generato con “-O3” (e si parla degli ultimi vent’anni, non pochi giorni).

Sono in tanti a pensare che il miglioramento di performance possa valere qualche rischio.
Per valutare quanto possa essere vero, Phoronix ha svolto qualche test, e il risultato è che sì, c’è un miglioramento, ma il più delle volte piccolo se non piccolissimo: meno del 5%.

Pertanto, siamo convinti che qualcuno ripresenterà la richiesta, e Linus puntualmente la casserà: amici mai!

Ho coltivato la mia passione per l’informatica fin da bambino, coi primi programmi BASIC. In età adulta mi sono avvicinato a Linux ed alla programmazione C, per poi interessarmi di reti. Infine, il mio hobby è diventato anche il mio lavoro.
Per me il modo migliore di imparare è fare, e per questo devo utilizzare le tecnologie che ritengo interessanti; a questo scopo, il mondo opensource offre gli strumenti perfetti.