Linux-goeroe en -oprichter Linus Torvalds heeft een kleine security-tweak in de broncode van het open-source OS doorgevoerd die de prestaties net even opschroeft. Vooral de multithreaded-prestaties van Linux krijgen een zetje.
De door Torvalds doorgevoerde security-aanpassing, die de designatie x86/uaccess: Avoid barrier_nospec() in 64-bit copy_from_user() heeft meegekregen, richtte zich op een verbetering van de broncode tegen de bekende Meltdown- en Spectre-aanvallen die sinds 2018 publiek bekend zijn. De tweak (of patch) is een rewrite van een door Red Hat-specialist Josh Poimboeuf gemaakte aanpassing en is nu sneller geworden. De snelheidswinst bedraagt 2,6 procent om precies te zijn.
Tweak voorkomt speculative execution
De door Linus Torvalds aangepaste tweak verandert het gebruik van de barrier_nospec() API. Die voorkomt speculatieve uitvoering van sommige machinecode ofwel ‘speculative execution’. Dat is een moderne CPU-eigenschap die ‘branch prediction’ gebuikt om te voorspellen welke programmeercode nodig is voordat het proces daadwerkelijk wordt aangeroepen. Op deze manier kan de code vooraf worden gedraaid en de resultaten in een cache opgeslagen. Wanneer deze voorspelling correct is, scheelt het tijd in het draaien van de bewuste code. Zo niet, dan verdwijnt de code ongebruikt uit de cache.
Het gebruik van deze functionaliteit zorgt mogelijk wel voor een veiligheidsricico en maakt aanvallen mogelijk. Daar verdedigt de code van Josh Poimboeuf van Red Hat dus tegen door ene deel van deze execution tegen te houden. Dit kan echter leiden tot mindere prestaties van het onderliggende open-source OS en dus bijvoorbeeld tragere servers. En laat Torvalds nu net bekend staan om zijn hartgrondige hekel aan sub-optimale prestaties.
Securitymaatregel herschreven
Torvalds’ tweak heeft de multithreaded prestaties van Linux verbeterd door het gebruik van barrier_nospec() in de copy_from_user() functie te verwijderen. In plaats daarvan heeft hij deze vervangen door een efficiëntere aanpak met pointer masking, die het blokkeren van speculative execution vermijdt en toch ongeldige adressen veilig afhandelt. Deze kleine aanpassing zorgt dus voor een meetbare prestatieverbetering van 2,6% tijdens tests, wat best behoorlijk is voor multithreaded taken op Linux.
In wezen heeft Torvalds dus een manier gevonden om hetzelfde securityresultaat te bereiken zonder de prestaties aan te tasten. Dit kan net een verschil maken in Linux-systemen die zowel hoge prestaties als robuuste security vereisen, zoals webservers. Er zijn weinig mensen die zo’n diep begrip hebben van Linux en de x86 CPU-architectuur dat ze op dit niveau een prestatiewinstje eruit kunnen persen.
Lees ook: Microsoft gaat Hyper-V op Linux extra ondersteunen