In tanti ritenevano che Linus Torvalds non apportasse più modifiche sul kernel Linux ma si limitasse prevalentemente a mantenere il controllo e ad esercitare un’azione di verifica sulle modifiche proposte da altri soggetti. Invece, in questi giorni l’informatico finlandese ha stupito tutti per l’aggiunta di un suo contributo che migliora le prestazioni di Linux nelle attività multithread.
Prestazioni dei sistemi operativi affossate dalle patch contro Meltdown e Spectre
Il “re pinguino” ha sviluppato e approvato una modifica al kernel Linux che interviene sulle correzioni applicate in passato per gestire le vulnerabilità di tipo Meltdown e Spectre. Scoperte a inizio 2018, sono i capostipiti di una lunghissima serie di lacune di sicurezza via via venute a galla che aprono le porte ad attacchi side-channel a livello di processore.
Questi attacchi sfruttano i difetti nell’esecuzione speculativa delle moderne CPU, permettendo agli aggressori di ottenere informazioni riservate, come i contenuti della memoria, osservando il comportamento del processore durante l’esecuzione del codice.
L’esecuzione speculativa utilizza la predizione dei rami per anticipare il codice che potrebbe essere eseguito dalla CPU, in modo da elaborarlo in anticipo e memorizzare i risultati. Se la previsione è corretta, si risparmia tempo, ma se è errata, i risultati vengono scartati. Questo processo, sebbene ottimizzi le prestazioni, apre a specifici tipi di attacchi, come quelli legati a Meltdown, Spectre e successive vulnerabilità.
Le patch contro gli attacchi side-channel hanno comportato l’introduzione di misure di sicurezza che limitano alcune ottimizzazioni hardware, con un impatto significativo in termini di performance su tutti i sistemi operativi. Dopo l’applicazione delle misure correttive, si sono riscontrati cali prestazionali compresi tra il 5% e il 30%, a seconda della configurazione della CPU e del sistema operativo in uso.
Linus Torvalds: 21 righe di codice per migliorare le prestazioni del kernel Linux
Perché la patch di Linus Torvalds è importante? Perché Torvalds è convinto che ci siano margini per recuperare parte delle prestazioni sacrificate dopo l’applicazione delle patch anti-Meltdown, Spectre e attacchi similari, venuti a galla in tempi successivi.
Così, nel benchmark per_thread_ops, la semplice correzione da 21 righe di codice apportata sul kernel Linux ha già da sola permesso di guadagnare un 2,6% in termini di prestazioni. È lo stesso informatico a spiegarlo nella mailing list del kernel Linux, aggiungendo di aver basato il suo lavoro su un’intuizione di Josh Poimboeuf (Red Hat).
La modifica riguarda l’eliminazione dell’uso della funzione barrier_nospec()
, che impedisce l’esecuzione speculativa di alcune istruzioni da parte della CPU. Anziché farne uso, grazie alla patch di Torvalds, il kernel Linux d’ora in avanti si avvale della tecnica conosciuta come pointer masking. Essa restituisce un indirizzo con tutti i bit impostati a 1 in caso di indirizzo non valido, evitando quindi l’esecuzione speculativa senza compromettere la sicurezza.
L’importanza della modifica applicata da Torvalds
Torvalds è noto per la sua avversione rispetto all’introduzione di misure di sicurezza che penalizzano le prestazioni, soprattutto su sistemi locali come desktop o laptop. Quando il rischio è contenuto o di fatto insignificante, l’inventore del kernel Linux preferisce disattivare le protezioni. Questo perché il loro utilizzo non giustificherebbe il calo prestazionale conseguente.
Nel caso dei sistemi server, che restano il principale campo applicativo di GNU/Linux, è fondamentale bilanciare la sicurezza con le prestazioni, sacrificando talvolta quest’ultime per garantire una protezione efficace contro gli attacchi più evoluti.
Sebbene un +2,6% possa sembrare un miglioramento marginale, va detto che quando applicato a milioni di sistemi e in un numero elevato di operazioni, può avere un impatto significativo sul comportamento complessivo dei sistemi. Ogni piccola ottimizzazione può contribuire a una catena di miglioramenti cumulativi, aumentando l’efficienza generale nel tempo.
Il traguardo appena raggiunto potrebbe rappresentare il primo frutto di una serie di sforzi volti a mitigare l’impatto delle patch a contrasto degli attacchi side-channel, soprattutto sui sistemi aziendali e in quelli utilizzati per gestire applicazioni mission-critical.