Linus Torvalds aumenta le prestazioni di Linux del 2,6% con una patch di 21 righe

Una piccola modifica al codice da parte di Linus Torvalds sta portando a un miglioramento misurabile nelle prestazioni multithread di Linux. Il commit, denominato “x86/uaccess: Avoid barrier_nospec() in 64-bit copy_from_user()”, è un aggiornamento di sicurezza pensato per contrastare vulnerabilità note come le falle Meltdown e gli attacchi Spectre emersi nel 2018.
La patch è una riscrittura di una modifica originariamente proposta dallo sviluppatore di Red Hat Josh Poimboeuf, successivamente migliorata da Torvalds per aumentarne la velocità. “Il test del kernel riporta un miglioramento del 2,6% nel benchmark per_thread_ops,” ha scritto Torvalds nel commit.
Nella nuova versione, Torvalds evita l’uso dell’API barrier_nospec(), che impedisce l’esecuzione speculativa di alcune istruzioni di macchina. L’esecuzione speculativa è una caratteristica dei moderni processori, che utilizzano la previsione delle ramificazioni per anticipare quale codice sarà eseguito, così da elaborarlo e memorizzarne i risultati in anticipo. Sebbene questo processo possa velocizzare le operazioni, apre anche la porta a problemi di sicurezza, su cui gli esperti lavorano da anni.
Al posto di barrier_nospec(), nel caso di un indirizzo non valido nella chiamata copy_from_user(), la nuova versione del codice usa il pointer masking per restituire un indirizzo composto da soli 1.
Queste difese sono una “necessità scomoda”, particolarmente per i server web e i dispositivi simili che utilizzano Linux, che devono essere protetti da ogni possibile attacco, anche a costo di ridurre le prestazioni. Torvalds è noto per la sua avversione nei confronti di queste misure che penalizzano la velocità del sistema.
Sui computer locali, come desktop o laptop, che non accettano connessioni in entrata, è possibile disattivare queste difese, migliorando così le prestazioni con un rischio relativamente basso (sempre se si è consapevoli di quello che si sta facendo).