Blogi

Suorituskyky Meltdown ja Spectre paikkausten jälkeen

Nyt kun Meltdown ja Spectre -haavoittuvuudet on paikattu, voidaan tarkastella korjauspäivitysten vaikutusta suorituskykyyn.

Aluksi pelättiin jopa 5-30% suorituskyvyn heikentymistä, mutta Google rauhoitteli vaikutuksen olevan useimmiten merkityksetön. Kotimaassa uutisoitiin, että jättibugien korjaaminen ei hidastakaan järjestelmiä.

Vaikutuksia nollasta sataan

Asennettuamme paikkauksen tuhansille ylläpitämillemme palvelimille, havaitsimme että päivitys ei tosiaan useimmissa tapauksissa heikentänyt suorituskykyä juuri lainkaan. Joissakin tapauksissa suorittimen käyttö kasvoi kuitenkin dramaattisesti.

meltdown_cpu2.png

Suorittimen käyttöasteen nousu eräällä Node.js sovelluspalvelimella paikkauksen jälkeen

Yksittäisissä verkkopalveluissa havaitsimme suorittimen käytön jopa moninkertaistuneen. CPU:ta näissä käyttivät esimerkiksi PHP- ja Node.js-alustoille koodatut sovellukset. Joissakin tapauksissa palvelu hidastui huomattavasti loppukäyttäjänkin näkökulmasta.

Yhteisiä nimittäjiä näissä tapauksissa ei ole vielä tiedossa. Tarkempaa tietoa löytyisi todennäköisesti vain profiloimalla sovelluksia.

Rautaa rajalle?

Virtualisoiduissa palvelinympäristöissä suoritintehoa on toki helppo lisätä palvelimelle lennossa, jos sen tarve on tällä tavalla yhtäkkiä kasvanut. Mutta se kasvattaa myös todellisia kustannuksia.

Toinen vaihtoehto on kytkeä Meltdown/Spectre-paikkaukset pois päältä. Se onnistuu Linux-palvelimilla helposti jopa ilman uudelleenkäynnistystä Red Hatin ohjeilla.

meltdown_cpu1.png

Suorittimen käyttöaste paikkausten poiskytkemisen jälkeen eräällä PHP-sovelluspalvelimella

RHEL 7 ja CentOS 7 -järjestelmissä paikkaukset voi kytkeä päältä näin:

echo 0 > /sys/kernel/debug/x86/pti_enabled
echo 0 > /sys/kernel/debug/x86/ibpb_enabled
echo 0 > /sys/kernel/debug/x86/ibrs_enabled

RHEL 6 ja CentOS 6 -järjestelmissä pitää ottaa ennen näitä debugfs-tiedostojärjestelmä käyttöön:

mount -t debugfs nodev /sys/kernel/debug

Pysyvästi paikkaukset saa pois päältä lisäämällä seuraavat parametrit kernelin komentoriviin käyttöjärjestelmän lataajassa (esim. GRUB):

noibrs noibpb nopti

Entäs tietoturva?

Palvelin on tietenkin taas haavoittuvainen tietoturvapäivitysten poiskytkemisen jälkeen.

Yksittäisen virtuaalikoneen sisällä tällä ei ole kuitenkaan välttämättä kriittistä merkitystä, jos voidaan luottaa ajettavien sovellusten tietoturvaan. Meltdown ja Spectre-hyökkäykset vaativat paikallisen pääsyn palvelimelle, johon voi toki riittää esimerkiksi tietoturva-aukko sovelluksessa.

Tärkeintä on varmistaa virtualisointialustan tietoturvapäivitykset, jotta muisti ei olisi luettavissa virtuaalikoneesta toiseen. Erityisen tärkeää tämä on container-virtualisointia (Docker, LXC, Virtuozzo, OpenVZ, Jelastic, jne.) käytettäessä, jossa kaikilla virtuaalipalvelimilla on jaettu käyttöjärjestelmän ydin, eli kernel.

Jos et tiedä onko palveluntarjoajasi paikannut jo virtualisointialustansa, nyt kannattaa viimeistään ottaa asiasta selvää.