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

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.

8 risposte a “Torna l’ottimizzazione in compilazione del Kernel, e Linus risponde”

  1. Avatar JustATiredMan
    JustATiredMan

    E anche su questo mi sento di essere d’accordo col dittatore. almeno in ambito server. per un misero 5%, non vado a rischiare l’affidabilita’ e la continuita’ di un servizio, magari di vitale importanza.

  2. Avatar xan
    xan

    solo a me un “fino al 5%” con una sola modifica software sembra un enormità e non un valore “piccolissimo” ?

  3. Avatar xan
    xan

    avere la possibilità di poter usare O3 non significa che tutti debbano usarla.

  4. Avatar BlaBla
    BlaBla

    Se il rischio è introdurre bug o instabilità non ne vale la candela

  5. Avatar xan
    xan

    dipende dal contesto, su steam DECK, +5% vale la pena

  6. Avatar BlaBla
    BlaBla

    Al momento Linux è diffuso sul 95% dei server mondiali, la priorità è la sicurezza e l’affidabilità, quella imposta da torvalds è solo l’impostazione predefinita, ma nessuno ti vieta di ricompilare il kernel con quell’opzione attivata, puoi farti un’intera distro con quel kernel e nessuno vienta agli sviluppatori di steam di fornire un kernel ottimizzato a quel modo.

  7. Avatar xan
    xan

    A ok, non avevo capito.

  8. Avatar JustATiredMan
    JustATiredMan

    certamente, ma se diventa una pratica ammessa come standard, devi anche gestirla, e quindi gestirne il supporto (patch o proibizione nell’uso) nel caso sorga un qualche bug dovuta alla stessa. Personalmente pensio sia preferibile limitare le variabili in gioco, in modo da ottimizzare il codice, piuttosto che il come venga ottimizzato l’eseguibile dal compilatore.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *