Wydajność pamięci RAM DDR3 i DDR4 pod Linuksem

Od czego zależy wydajność pamięci RAM i jak wpływa ona na wydajność aplikacji?

Pamięć RAM w komputerze jest jednym z kluczowych komponentów. Przechowuje obecnie wykonywany program, jego dane i wynik działania. Od wydajności i dostępnej ilości RAMu zależy wydajność z jaką może pracować nasz komputer.

Wraz z wprowadzeniem przez Intela procesorów z rodziny Skylake do powszechnego użytku weszła nowa generacja pamięci RAM - DDR4. Sprawdźmy co oferuje nowa technologia i co decyduje o osiągach różnych kości pamięci RAM.

O pamięci RAM słów kilka

Pamięć RAM może być jednym z kluczowych elementów odpowiedzialnych za wydajność komputera. W najbardziej ekstremalnym przypadku jeżeli jest jej za mało system operacyjny będzie ratował się używając dysku twardego co drastycznie spowolni wykonywanie zadań przez procesor. Pamięć RAM cechuje się znacznie większą szybkością przesyłu i dostępu danych niż dyski twarde. Jest jednak ulotna - nic nie jest trwale zapisywane. Jeżeli mamy wystarczającą ilość pamięci RAM do wykonania danego zadania to wtedy o osiągach zaczynają decydować parametry kości RAM.

Pierwszym parametrem pamięci RAM jest przepustowość, czyli prędkość przesyłu danych. Drugi to opóźnienia - czas jaki jest potrzebny od wydania polecenia przez kontroler pamięci do wykonania operacji przez RAM. Im większa przepustowość tym szybciej można załadować i pobrać dane z pamięci. Im niższe opóźnienia tym szybciej można dokonywać operacji na pamięci. Ale to nie wszystko.

W większości bardziej współczesnych komputerów sprzed procesorów Skylake znajdziemy pamięci RAM standardu DDR3 o taktowaniu 1600 MHz i opóźnieniu CL11-CL9 (oznaczenie PC3-12800). W nieco starszych może to być też 1333MHz (PC3-10600). Większość komputerów z procesorami Skylake będzie wyposażona (nie wszystkie) w nowe kości DDR4 o częstotliwości 2133 MHz i opóźnieniu około CL14-15 (PC4-17000).

Jak widać rozwój technologiczny zwiększa częstotliwość pracy pamięci. 1333 MHZ/PC3-10600 to przepustowość 10,6 GB/s lub 1333 MT/s (megatransferów na sekundę). 1600 MHz/PC3-12800 to 12,8 GB/s lub 1600 MT/s, a 2133MHz to 17 GB/s i 2133 MT/s. Im wyższa częstotliwość tym większa przepustowość pamięci.

Opóźnienie CAS wydaje się rosnąć wraz ze wzrostem częstotliwości pamięci. Jest to jednak tylko pozorny wzrost, gdyż podawana wartość opóźnienia określa ilość cykli zegara potrzebnych do wykonania operacji. Wraz ze wzrostem częstotliwości spada czas jednego cyklu zegara więc realny czas opóźnienia też spada/pozostaje bez zmian mimo wzrostu ilości potrzebnych cykli. 1333MHz/CL9 ma opóźnienie wynoszące 13.50 ns, 1600MHz/CL11 ma opóźnienie 13.75 ns, 2133MHz/CL14 ma opóźnienie rzędu 13,12 ns. Oczywiście z czasem pojawiają się kości o niższych opóźnieniach pozwalając nieco je skrócić.

Przepustowość pomiędzy pamięcią RAM a kontrolerem można też podwoić stosując dwie identyczne pod względem parametrów kości RAM pracujące dwukanałowo. Na płytach głównych wymaga to zazwyczaj umieszczenia dwóch kości w oznaczonych jednym kolorem złączach RAM. Na bardziej zaawansowanych platformach serwerowych i przeznaczonych pod stacje robocze o dużej wydajności można spotkać technologie trój czy czterokanałowe jeszcze bardziej zwiększające przepustowość.

DDR4 kontra DDR3

Pamięci DDR4 wykonane są za pomocą nowszych technologii i pracują na niższym napięciu (1,2V) niż pamięci DDR3 (1,5V lub 1,35V DDR3L). Pobierają więc tym samym mniej mocy. Dodatkowa zaleta to możliwość gęstszego upakowania pamięci na czipie przez co łatwiej o kości o dużej pojemności.

DDR4 obsługiwana jest przez niektóre procesory Broadwell (te z górnej półki), jak i procesory z linii Skylake. Intel dla ułatwienia przejścia na nowe pamięci zachował obsługę DDR3 w tych procesorach, niemniej Skylake oficjalnie nie obsługują DDR3 pracujących na 1,5V napięciu. Producenci płyt głównych taką obsługę zapewniają, niemniej Intel stwierdził że użytkowanie takiej pamięci w dłuższym okresie czasu może uszkodzić kontroler pamięci a tym samym cały procesor. Na szczęście rynek szybko zapełnia się pamięciami DDR4, a ceny są coraz bardziej korzystne.

Testy wydajności

Do testów udało mi się wykorzystać komputer oparty o płytę główną Asrock B150M Combo-G i procesor i5-6600. Ta płyta główna pozwala na użycie do dwóch kości DDR3 lub do dwóch kości DDR4, więc porównanie wpływu różnych kości RAM na wydajność będzie maksymalnie miarodajne. Do testów użyłem zestawu benchmarków phoronix działających na Ubuntu 15.10. Całość uzupełniła grafika AMD R9-270. W testach wzięły udział następujące kości RAM:

Pamięć Przepustowość Opóźnienie
Corsair DDR3 1333MHz/CL9 4GB 10666 MB/s 13.50 ns
Kingston DDR3 1866MHz/CL10 4GB 14933 MB/s 10.72 ns
Geil DDR4 2133MHz/CL15 4GB 17066 MB/s 14 ns
Kingston DDR4 2133MHz/CL14 4GB 17066 MB/s 13,1 ns
Corsair DDR3 1333MHz/CL9 2x4GB dwukanałowo ~21332 MB/s 13.50 ns
Kingston DDR4 2133MHz/CL14 2x4GB dwukanałowo ~34132 MB/s 13,1 ns

Niektóre strony prezentujące benchmarki pamięci RAM stosują jako szacunkowy wyznacznik osiągów wartość dzielenia częstotliwości przez opóźnienie. W tym porównaniu najlepiej wypada pamięć 1866/CL10, następnie 20% niżej 2133/CL14 i 1333/CL9 i na końcu 2133/CL15. Nie są to jednak w pełni miarodajne wartości do porównań.

Zestaw testowy Asrock B150M Combo-G i procesor i5-6600

Zestaw wyników dostępny jest na stronie openbenchmarking.org. Poniżej zaprezentuję znormalizowane wyniki z tych testów.

Wyniki

W benchmarku Stream testującym przepustowość pamięci wyniki są zgodne z przepustowością poszczególnych konfiguracji pamięci:

Benchmark przepustowości pamięci RAM

Dość często testuje się kości RAM na różnych grach. Lepsze kości pozwalają wycisnąć kilka klatek więcej. Ja wykorzystałem gry takie jak Xonotic, Warsow, czy UrbanTerror.

FPS w grze Xonotic
FPS w grze Warsow
FPS w grze OpenArena

Jak widać po wynikach największa różnica osiągów sięgająca 33% jest widoczna w grze Xonotic, a najmniejsza w OpenArena (w niej pamięć jak widać nie jest czynnikiem limitującym wydajność). DDR3/1333 w Nexuiz osiągną 114FPS a najlepszy zestaw dwukanałowy DDR4/2133 153FPS. DD3/1333 w trybie dwukanałowym przyśpieszyło do 145FPS więc wygląda na to że kluczowym czynnikiem jest przepustowość pamięci. Gry zajmowały mniej niż 4GB pamięci RAM (choć trochę szkoda że nie udało mi się porównać 2 x 4 GB bez trybu dwukanałowego). W pozostałych grach układ jest podobny, choć różnice w wynikach są mniejsze.

Bardziej niskopoziomowy APITEST testujący wydajność OpenGL4 dla większości przypadków pokaże ten sam układ i różnice. Tylko kilka z nich nie zależało od zastosowanej pamięci RAM.

Kolejnym testem pamięci są czasy kompresji plików, operacje na plikach/danych wykonywane w pamięci:

Czas kompresji BZIP
Czas kompresji 7zip
Czas kompilacji kernela Linuksa

Najwyższa rozpiętość wyników występuje w przypadku BZIP2 - 15% (9 sekund kontra 7,83 sekundy). W pozostałych przypadkach różnice są jeszcze mniejsze. Układ ten sam jak w grach. Dwukanałowa pamięć przed jednokanałową (dodatkowa ilość pamięci też mogła mieć jakiś efekt).

Warto też sprawdzić jak sprawują się serwerowe aplikacje silnie wykorzystujące możliwości pamięci RAM - bazy danych, redis, czy serwery HTTP.

TPS w PostgresSQL
Żądań na sekundę serwera Apache

W przypadku aplikacji serwerowych wyniki są zupełnie inne od dotychczasowych. Ilość żądań na sekundę obsłużonych przez Nginxa praktycznie nie zależała od konfiguracji pamięci, natomiast w przypadku Apache już tak - 5% na korzyść pamięci o najniższym opóźnieniu. W przypadku redisa rozrzut wyników był dość duży przez co trudno wskazać która konfiguracja jest lepsza. W przypadku PostgresSQL niektóre testy też miały większy rozrzut niemniej test o wysokiej konkurencji obsługi transakcji na sekundę także posortował pamięci po opóźnieniu i na końcu umieszczając z jakiegoś powodu pamięci pracujące dwukanałowo różnicą 87%. Duży wpływ na wynik może być konfiguracja z jaką działa baza danych. W tym teście konfiguracja mogła być bardziej domyślna niż optymalizowana pod konkretne przypadki.

Wnioski

W przypadku desktopowe użytku naszego komputera współczesne kości RAM mogą nieznacznie różnić się osiągami. Starsze kości jak 1333MHz bez problemu nadrabiają działając dwukanałowo, a nowsze mogą wycisnąć parę procent osiągów więcej. Tak więc szybkie przejście na DDR4 i procesory Skylake nie jest potrzebne, szczególnie gdy mamy w miarę nowe podzespoły. W przypadku zadań serwerowych czy stacji roboczych trudno wskazać kluczowy parametr odpowiedzialny za osiągi pamięci (i optymalną jej ilość). Wtedy warto samemu przetestować pod konkretne zadania, czy poszukać specjalistycznego testu.

Trzeba też uwzględnić że DDR4 to nowość i dynamiczny rozwój dopiero przed tą technologią. Możliwe do osiągnięcia są znacznie większe częstotliwości.

W moich testach nie sprawdzałem osiągów zintegrowanego układu graficznego. Wydajność zintegrowanych układów AMD i Intela dość wyraźnie zależy od wydajności pamięci RAM, co wielokrotnie testowano na phoronix.com.

blog comments powered by Disqus

Kategorie

Strony