Łatka Google'a na lukę w AMD i Intelach jednak spowalnia. Ale nie zgadniesz jak
Gdy głośno zrobiło się o atakachMeltdown i Spectre, najbardziej poszkodowanym okazał się Intel– wszystkie produkowane od 1995 roku jego procesory były podatnena te zagrożenia. AMD niezwłocznie zapewniło, że architekturajego procesorów na Meltdown jest odporna, zaś w wypadku Spectrewystarczą łatki software’owe, których wpływ na wydajnośćsystemu będzie znikomy. Niestety sytuacja nie wygląda tak różowo,jak czerwoni chcą ją nam przedstawić. Łatki Retpoline, mającezabezpieczyć przed drugą odmianą ataku Spectre, są już dostępne,jednak generowanego przez nie narzutu zlekceważyć nie można.
10.01.2018 13:27
Łatki Kernel Page Table Isolation błyskawicznie wylądowały wlinuksowym kernelu, łatając podatność na Meltdown na procesorachIntela. Decyzją Linusa Torvaldsa nie są one ładowane naprocesorach AMD, dzięki czemu nie doświadczymy efektów ubocznych –znaczącego spadku wydajności w obciążeniach roboczych związanychz operacjami I/O, dostępem do sieci i zasobów dyskowych.
Z łatkami na Spectre sytuacja wygląda bardziej skomplikowanie.Atak ten, grożący zarówno procesorom Intela jak i AMD, zostałzneutralizowany za pomocą łatek Retpoline, stworzonych przedewszystkim przez programistów Google’a. Uniemożliwiają one atakiwstrzykiwania rozgałęzień, poprzez unikanie spekulatywnychniebezpośrednich rozgałęzień w kodzie kernela. Wydana w ostatniweekend wersja piąta łatek to około 200 wierszy kodu dla kernela,połączonych ze specjalnymi łatkami dla kompilatora GCC – i jakzapowiadają jej twórcy, obniży wydajność systemu o jakieś 1,5%.Można to przeżyć, a nawet zrekompensować optymalizacjami, prawda?
Zależy jednak w czym. Na łamach Phoronixa/OpenBenchmarkingpojawiły się wyniki testów wydajności uodpornionych na Spectresystemów, zarówno częściowo, poprzez same łatki na kernel(retpoline), jak i całkowicie, poprzez łatki na kernel i kompilator(retpoline+gcc). Michael Larabel przetestował zarówno procesoryIntel Kaby Lake i Coffee Lake, jak i AMD Ryzen/EPYC, jako żewszystkie one są podatne na Spectre.
Wolniej, szybciej, bez zmian?
Jak można się było spodziewać, w większości syntetycznychobciążeń roboczych zauważalnych różnic nie ma. Ale zarazemwidać też, że pojawiają się niespodziewanie nowe wąskie gardła,specyficzne dla danej platformy. Oto najważniejsze problemy, jakieprzynosi załatanie Spectre:
- W teście losowego odczytu danych (Flexible IO Tester) procesoryCore i9-7980XE i Ryzen 7 1800X odnotowały po zastosowaniu łatekdrastyczne spadki IOPS, odpowiednio 34% i 36%. Co ciekawe, innetestowane procesory Intela i AMD ucierpiały jedynie minimalnie, anawet (Dual Xeon Gold 6138) uzyskały wydajność nieco wyższą.
- W teście losowego zapisu danych (Flexible IO Tester) wspomnianyCore i9-7980XE utracił od 11% do 21% IOPS, odpowiednio dla łatekretpoline i retpoline+gcc. Niespodzianka: Ryzen 7 1800X nieco połatkach przyspieszył.
- W teście sekwencyjnego zapisu danych znów najbardziej ucierpiałCore i9-7980XE, po łatkach szybkość zapisu spadła od 4%(retpoline) do 11% (retpoline+gcc).
- W teście budowania projektu do kompilacji (Compile Bench InitialCreate) najwięcej oberwały procesory Intela: i7-8700K, i9-7980XE iDual Xeon Gold 6138 odnotowały spadki od 5% do 10%. Procesory AMDwyszły tu obronną ręką.
- Czas samej kompilacji po zastosowaniu łatek nie uległ wydłużeniu– zarówno w Timed Apache Compilation jak i Timed Linux KernelCompilation procesory Intela i AMD wykazywały różnice poniżejbłędu pomiaru.
- Jeśli chodzi o czystą wydajność procesora, to zupełnie nie maczym się przejmować, łatki na Spectre nie powodują tu żadnegomierzalnego zmniejszenia wydajności – pokazały to benchmarkiParboil (OpenMP), Rodinia, lzbench, John the Ripper czy C-ray.
- Procesor AMD Epyc miał problemy z benchmarkiem webserwera ebizzy,który generuje obciążenia typowe np. dla sklepów internetowych –dużo wątków, częste alokacje i dealokacje dużych obszarówpamięci. Po zastosowaniu retpoline+gcc jego wydajność spadła ażo 13%. Ryzen 7 1800X zachował się zaś dziwnie – przy samychłatkach retpoline w benchmarku tym uzyskał o kilka procent większąwydajność, zaś z łatkami retpoline+gcc stracił 8%. ProcesoryIntela nie ucierpiały tu zauważalnie.
- Prawdziwy dramat zaczął się przy obciążeniach bazodanowych.Wydajność Redisa w benchmarku LPOP (usuwanie i zwracanie pierwszegoelementu listy przechowanego jako klucz), przyniosło spadkisięgające nawet 35% (Core i3-7100 z łatkami retpoline+gcc). Cociekawe, wcale nie ma gwarancji, że zrezygnowanie z łatek wkompilatorze zawsze da mniejszy spadek wydajności – w wypadkuRyzena 7 1800X system załatany z retpoline+gcc był sporo szybszy odtego, który miał tylko retpoline. Na procesorze AMD Epyc było jużna odwrót.
- Baza Redis w teście GET okazała się być na procesorze Corei9-7980XE szybsza o 11% po zastosowaniu samych łatek retpoline.Nieco przyspieszył też procesor Dual Xeon. Wszystko innespowolniło, albo nie zauważyło innych zmian.
- Serwowanie statycznych stron po Apache (Apache Benchmark)najbardziej dotknęło procesory Intela – i7-8700K stracił 10%wydajności z retpoline+gcc, Dual Xeon Gold spowolnił o 7%. AMD Epyc– przyspieszył tymczasem o okrągły 1%.
- Benchmark, który był prawdziwym pogromem w teście łatki naMeltdown, tj. PostgreSQL pgbench, w wypadku łatek na Spectre niewykazał żadnych zauważalnych różnic.
Spectre gorsze jednak niż Meltdown
Jakie można z tego wszystkiego wysnuć wnioski? Podobnie jak wwypadku łatek na Meltdown, załatanie Spectre powodować możespadek wydajności I/O i tych operacji, w których dochodzi dointensywnych interakcji z kernelem. Kluczowym słowem jest tu „może”– ponieważ nie musi. Z dostępnych na OpenBenchmarking.org wynikównie sposób wyciągnąć jakichś ogólnych wniosków – procesoryzachowują się bardzo różnie, względem wydawałoby się nawetpodobnych obciążeń roboczych.
Oznaczać to może tylko spore kłopoty dla operatorów centrówdanych, chmur i usług hostingowych. W razie odnotowania problemów zwydajnością nie będą mogli zignorować detali dotyczącychużywanego w serwerach hardware. Może się okazać, że akurat tenkonkretny model procesora po zastosowaniu domyślnych łatek(retpoline i łatki na GCC niebawem wejdą do głównej linii)powoduje drastyczne opóźnienia, podczas gdy konkurencja nie ma ztym problemu, bo akurat zastosowała inne procesory.
Wybórmiędzy Intelem i AMD stał się o wiele bardziej skomplikowany niżdotąd.