Jak zmierzyć wydajność macierzy dyskowych

0

U pracownika zaczynającego pracę w centrum danych poziom wiedzy niezbędnej do wykonywania obowiązków jest na bardzo niskim poziomie. Szkoły uczą podstaw, które, mimo że są bardzo pomocne, są tylko podstawami. Wynika to zapewne po części z braku dostępu do najnowszej technologii, na którą żadna uczelnia nie może sobie pozwolić, a po części z braku komunikacji między uczelniami i biznesem. Tymczasem w firmach sprzęt wymieniany jest co kilka (trzy do pięciu) lat, a umiejętność, na przykład napisania „bash fork() bomb„, okazuje się nieprzydatna w obliczu konieczności utrzymania SLA dla dostępności systemu. Dlatego dwa podstawowe elementy umożliwiające stanie się dobrym specjalistą w centrum danych to umiejętność szybkiego uczenia się i mistrz, guru, doświadczony kolega – gotowy do przekazania swojej wiedzy.

Jeżeli te dwa warunki są spełnione, to jest duża szansa, że z czasem taki czeladnik IT zdobędzie wiarygodne informacje na temat tytułowej wydajności systemów i będzie potrafił je efektywnie wykorzystać. Dlaczego nie ma pewności, że tak się stanie? Głównie z tego powodu, że powszechnie dostępne parametry sprzętu nie mówią nam bezpośrednio o jego realnych możliwościach. W dużym stopniu winę za ten stan rzeczy ponoszą producenci, których marketing świadomie eksponuje modne liczby, a sprzedawcy nie wszystkim odkrywają ich prawdziwe znaczenie.

Niedoceniana rola dysku

Wskazana powyżej praktyka dotyczy każdego sprzętu IT i macierze dyskowe nie są tutaj wyjątkiem. Publikowane w ich specyfikacjach liczby, które mają nam pokazać, jak bardzo są one wydajne, wyglądają konkretnie:

  • przepustowość wewnątrz macierzy – ciężkie GB/s
  • ilość i szybkość wewnętrznych procesorów – jak w potężnych serwerach obliczeniowych
  • przepustowość portów FC – wiele Gb/s
  • ilość pamięci cache – jak pojemność macierzy dyskowych jeszcze kilka lat temu

Wartości te sugerują, że wydajność takiego systemu będzie bardzo wysoka. Jednak nie do końca jest to prawda. Większość tych danych mówi o maksymalnych możliwościach poszczególnych podsystemów macierzy, a te znacząco różnią się od realnych osiągów całości.

Konstrukcja jest tak mocna jak jej najsłabszy element. Stwierdzenie to dotyczy zarówno wytrzymałości mostu, jak i mocy macierzy dyskowej. Ciekawe jest, że mówiąc o wydajności pamięci masowych, rzadko wspomina się o dyskach. Wynika to zapewne z tego, że wszyscy producenci montują prawie taki sam zestaw napędów w swoich urządzeniach. Nie jest to więc parametr, który może posłużyć do porównania konkurencyjnych sprzętów. Tymczasem to właśnie dysk twardy jest najsłabszym elementem macierzy skądinąd dyskowej i to właśnie jego możliwości decydują o mocy całego rozwiązania pamięci masowej.

Dysk i jego ograniczenia

Wydajność napędu dyskowego wynika z dwóch parametrów – average seek time (średni czas pozycjonowania głowicy) i RPM (prędkość obrotowa talerzy). W najszybszym aktualnie dysku wartości dla tych parametrów to 3.1 ms avg seek time i 15000 RPM. W lutym tego roku minęła dziewiąta rocznica premiery pierwszego dysku kręcącego się 15000 obrotów na sekundę. Średni czas pozycjonowania głowicy w nim był tylko o 0,8 ms dłuższy od dysków produkowanych obecnie. Oznacza to, że w przeciągu dziewięciu lat wydajność dysków twardych wzrosła o 16%. Jak to się ma do mocy procesorów? W 2000 roku rekord testu TPC-C wynosił 7545 tpmC na procesor. Aktualny rekord to 190161 tpmC na procesor – czyli wydajność wzrosła o 2520%! Ta ogromna przepaść wynika z różnicy w budowie tych podzespołów. Dysk ma części mechaniczne, ruchomą głowicę oraz kręcące się talerze. Zmniejszanie opóźnień związanych z tą „analogowością” staje się już fizycznie niemożliwe. Rozwiązania w 100% cyfrowe, jak procesory, nie osiągnęły jeszcze swoich fizycznych limitów i, co za tym idzie, ich możliwości mogą ciągle się zwiększać.

Pisząc o parametrach dysku, świadczących o jego wydajności, nie wspomniałem nic o pojemności, typie interfejsu czy maksymalnej prędkości transferu danych. Zrobiłem to świadomie, gdyż dane te nic nie mówią o realnej mocy dysku. Jedyny słuszny parametr określający wydajność dysku to średnie losowe IOPS, czyli średnia ilość losowych operacji odczytu lub zapisu możliwa do wykonania w ciągu jednej sekundy. Wynika on właśnie z opóźnień generowanych przez głowicę i kręcący się dysk. W związku z tym, że parametr ten nie jest publikowany w specyfikacjach warto wiedzieć, jak go znaleźć. W tym celu najpierw liczymy ile trwa pół obrotu talerza w naszym dysku. W ten sposób uzyskamy average rotation latency, czyli średni czas potrzebny na obrót dysku do zadanego sektora:

average rotation latency = 1/(RPM/60)/2

RPM to oczywiście prędkość obrotowa dysku ze specyfikacji. Dodając do tego average seek time, uzyskujemy średni czas ustawienia dysku i głowicy nad zadanym sektorem danych, czyli average access latency:

average access latency = average rotation latency + average seek time

Teraz wystarczy tylko wyliczyć ile operacji I/O przy takim opóźnieniu jest w stanie wykonać się w ciągu sekundy i mamy nasze średnie IOPS dla operacji losowych:

average random disk IOPS = 1 / average access latency

Jaka jest zatem wartość tego parametru dla najszybszego obecnie na rynku dysku?

1 / ((1/15000/60)/2 + 0,0031) = 196,08

Mając wyliczony parametr IOPS, możemy sprawdzić, jakie rzeczywiste transfery danych możliwe są do osiągnięcia na tym dysku. Należy jednak pamiętać, że zależą one od ilości danych zawartych w pojedynczej operacji I/O. Tak więc:

  • dla 4 kB – 784 kB/s
  • dla 8 kB – 1568 kB/s
  • dla 32 kB – 6274 kB/s
  • dla 256 kB – 50196 kB/s

Biorąc pod uwagę, że w typowej aplikacji biznesowej średnia wielkość operacji I/O rzadko jest większa niż 32 kB, to liczby te nie są duże. Wartość samego parametru IOPS też jest raczej skromna (szczególnie w porównaniu na przykład z setkami miliardów bajtów dostępnej pojemności). Oczywiście, dość łatwo jest ten parametr podkręcić, na przykład ograniczając ruch głowicy do mniejszego obszaru dysku lub operacje losowe zastępując sekwencyjnymi, które w przyrodzie są rzadkością, a szczególnie na dysku macierzowym. Nie da to nam jednak wiarygodnej informacji o wydajności całego dysku w realnych warunkach. Dlatego tylko średnia liczba IOPS dla operacji losowych jest realnym wyznacznikiem jego wydajności.

Mało dysków – źle; dużo dysków – dobrze

Podobnie jednak jak most wiszący uzyskuje swoją wytrzymałość dzięki zawieszeniu go nie na jednym, a na wielu cięgnach, tak też macierz staje się wydajna dopiero po dodaniu do niej wielu dysków. Mnogość napędów w macierzy to jej podstawowa cecha, budująca pojemność, dostępność i właśnie wydajność całego systemu. Dopiero duża ilość dysków w dobrze zaprojektowanym rozwiązaniu powoduje, że osiągi podsystemu dyskowego stają się akceptowalne.

Zaryzykuję stwierdzenie, że znając parametry zainstalowanych napędów oraz ich ilość, posiadamy wszystkie informacje niezbędne do określenia możliwości, jakie drzemią w nowoczesnej macierzy dyskowej dowolnego liczącego się producenta. W przeszłości nie było to takie pewne, ale dziś komponenty takie jak procesory, interfejsy czy magistrale są na tyle szybkie, że we właściwej konfiguracji nie są powodem powstawania wąskich gardeł.

Najlepszym dowodem na potwierdzenie tego założenia są wyniki testów przeprowadzanych przez Storage Performace Council. Organizacja ta, jako pierwsza, podjęła się próby zmierzenia wydajności systemów pamięci masowej. W tym celu SPC opracowała kilka testów dostosowanych do rodzaju sprzętu i jego przeznaczenia. Na potrzeby badania macierzy dyskowych w środowisku systemów transakcyjnych powstał test SPC-1. Ma on za zadanie zmierzyć wydajność sprzętu w warunkach przetwarzania danych w typowej aplikacji biznesowej (baza danych, serwer pocztowy, …). Operacje I/O w takim systemie charakteryzują się dużą losowością i małym blokiem danych. Dostępna na testowanym urządzeniu przestrzeń dyskowa dzielona jest na trzy części (ASU). Każda z nich odpowiada różnym typom danych – Data Store, User Store, Log Store. Na każdym z ASU uruchamiane są sesje (I/O stream) realizujące przetwarzanie zgodne ze specyfiką ASU. Generowane strumienie operacji I/O są zarówno sekwencyjne, jak i losowe – jednak z dużą przewagą tych drugich. Wynik podawany jest w jednostce określonej jako SPC-1 IOPS™.

Pierwsze wyniki SPC-1 zostały opublikowane w 2002 roku. Do tej pory dostępnych jest ich już 70. Niemal każda z liczących się firm udostępnia swój sprzęt do przetestowania. Są to zarówno małe macierze (po kilkanaście dysków), jak i wielkie instalacje – z ponad tysiącem napędów. Zebrałem wszystkie wyniki SPC-1 i sprawdziłem, jak na nie wpływa ilość dysków w testowanych rozwiązaniach. Poniższy wykres obrazuje to doświadczenie:

Linia niebieska to ilość osiągniętych SPC-1 IOPS™. Linia czerwona przedstawia liczbę dysków. Jak łatwo zauważyć, oba parametry są mocno ze sobą powiązane. Okazuje się, że mimo siedmiu lat postępu technicznego, różnym prędkościom FC, różnej ilości pamięci cache, dziesiątkom rodzajów i wersji oprogramowania wszystko i tak zależy od tego, ile dysków zmieściło się w urządzeniu. Dla jednego z głównych producentów fakt ten jest jednym z argumentów przeciwko uczestniczeniu w testach SPC. Moim zdaniem SPC ma jednak sens, a fakt publikacji wyników jest świadectwem, że rozwiązanie jest dobrze skonstruowane i pozwala na „wyciągnięcie” ze względnie słabych dysków tyle, ile jest to możliwe.

Cache

Pomimo że dominujący wpływ dysków jest niezaprzeczalny, istnieje jeszcze jeden element, którego znaczenia dla wydajności nie można pominąć. Jest nim cache – wewnętrzna pamięć RAM macierzy, która logicznie umiejscowiona jest między dyskami, a korzystającymi z nich serwerami. Tak naprawdę, odwołując się do danych na macierzy, nigdy nie sięgamy bezpośrednio do dysków, a właśnie do pamięci cache. Dopiero w sytuacji kiedy jest taka potrzeba, wewnętrzne mechanizmy odczytują lub zapisują coś z napędu. No właśnie, ale kiedy jest taka potrzeba? W przypadku operacji czytania, zajdzie ona wtedy, gdy w pamięci cache nie ma wymaganych danych. Takie zdarzenie określa się jako read cache miss, a jego przeciwieństwo to read cache hit. W przypadku operacji zapisywania potrzeba taka zajdzie wtedy, gdy zapisujemy obszar rzadko aktualizowany. Operacja taka jest oznaczana jako write cache miss, a w odwrotnej sytuacji – write cache hit. Im większa przewaga trafień (hit) nad pudłami (miss) tym lepiej. W praktyce, w środowisku systemów transakcyjnych ilość trafień dla odczytów to 60-70% wszystkich takich operacji, a dla zapisów 20-30%.

Oprócz tej podstawowej funkcji, pamięć cache umożliwia jeszcze zastosowanie innych mechanizmów, takich jak:

  • składanie losowych operacji w sekwencje
  • wyliczanie parzystości dla RAID 5 i 6 w „locie”, bez konieczności uprzedniego odczytu jej z dysków
  • wykrywanie sekwencji operacji
  • prefetching

Wszystkie te zabiegi mają jeden wspólny cel – odciążenie dysków. Ilość pamięci cache przy tym jest dosyć istotna. Jej duża ilość znacząco poprawia wyniki całego rozwiązania.

Liczenie wydajności macierzy

Skoro wpływ pozostałych komponentów na wydajność można w zasadzie pominąć i skoro wiemy, jak policzyć wydajność pojedynczego dysku, to dlaczego nie spróbować oszacowania mocy całej macierzy? Nie widzę przeszkód, przynajmniej w przypadku operacji losowych. Nie jest to jednak prosta suma average random IOPS dla wszystkich zainstalowanych napędów. Jest jeszcze kilka parametrów, które mają wpływ na osiągi całego rozwiązania. Są one związane zarówno z konfiguracją macierzy, jak i charakterystyką operacji I/O generowanych przez aplikacje. Oto one:

Poziom RAID – dla odczytów nie ma on znaczenia, ale w przypadku zapisów jest dosyć istotny. Jeden blok danych zlecony do zapisu przez aplikację powoduje odpowiednio: 1 operację I/O na wolumen sformatowany w RAID 0, 2 operacje gdy jest to RAID 10 (po jednym zapisie na każde z luster), 4 dla RAID 5 (odczyt danych, odczyt parzystości, zapis danych, zapis parzystości) i aż 5 albo 6 w przypadku RAID 6 (odczyt danych, odczyt parzystości, zapis danych, 2x zapis parzystości).

Stosunek ilości operacji odczytu do zapisu – skoro zapisy dla RAID innych niż 0 są bardziej kosztowną operacją, to ich ilość w stosunku do odczytów ma zasadnicze znaczenie.

Stripe size na macierzy, średnia ilość danych w operacji I/O i wielkość bloku danych jaką operuje aplikacja – na podstawie tych trzech wartości możemy wyliczyć prawdopodobieństwo sytuacji, gdy pojedyncza operacja I/O nie „zmieści się” na jednym dysku. Zdarza się tak, gdy blok danych, który jej dotyczy, zaczyna się na jednym dysku, a kończy na innym. Jeżeli na przykład wielkość I/O to 256 kB i równa jest ona rozmiarowi stripe’a na macierzy, a przestrzeń na wolumenie została podzielona przez aplikację na bloki 0,5 kB, to prawdopodobieństwo tego, że do wykonania tej operacji zostaną użyte dwa dyski, jest niemal równe 1.

% trafień w cache macierzy dla zapisów i odczytów – jeżeli operacja I/O odnosi się do danych, które znajdują się w cache nie wymaga ona bezpośredniego dostępu do dysku.

Posiadając wymienione wyżej informacje oraz oczywiście parametry zainstalowanych dysków i ich ilość, możemy obliczyć średnią ilość losowych operacji I/O możliwych do uzyskania z macierzy. W związku z tym, że nie znalazłem nigdzie stosownego wzoru, podjąłem próbę wyciągnięcia go samodzielnie. Ostatecznie wygląda on tak:

average random array IOPS = (disks * diskIOPS) / ((1 + ((ioSize * 1 / appBlockSize) – 1) / (stripeSize * 1 / appBlockSize)) * reads / 100 * (1 – readCacheHitRatio / 100) + writeIO * ( 1 + ((ioSize * 1 / appBlockSize) – 1) / (stripeSize * 1 / appBlockSize)) * writes / 100 * (1 – writeCacheHitRatio / 100))

Wynik tej formuły to oczywiście tylko szacunek. Daje on jednak całkiem niezły pogląd o tym, czego można spodziewać się po rozwiązaniu w zadanej konfiguracji i w określonych warunkach. Wzór ten zaimplementowałem w moim kalkulatorze wydajności i pojemności dysków oraz macierzy dyskowych dostępnym na stronie http://www.wmarow.com/storage/strcalc.html. Osoby zainteresowane wyjaśnieniem, dlaczego wygląda on właśnie tak, proszę o kontakt bezpośredni.

Samodzielne testy

Uzyskana liczba IOPS może posłużyć do porównania z realnymi wynikami osiągniętymi podczas testów wydajnościowych. Moim ulubionym narzędziem do ich wykonywania jest wieloplatformowa aplikacja Vdbench, dostępna na zasadach otwartego oprogramowania. Jest to generator strumieni danych, które można skierować na dowolne urządzenie pamięci masowej podłączone do serwera. Pomaga on zasumulować przetwarzanie o określonych parametrach takich jak: ilość danych w operacji I/O, stosunek odczytów do zapisów, współczynnik trafień w cache (zarówno dla odczytów, jak i zapisów), intensywność generowanych operacji, stosunek operacji losowych do sekwencyjnych. Maszyna na której uruchamiamy aplikację testującą musi być oczywiście odpowiednio mocna, skonfigurowana i podłączona do macierzy.

Właściwie przeprowadzone testy i porównanie ich z oczekiwanymi rezultatami może być bardzo silnym argumentem przy wyborze właściwego rozwiązania, czy też decyzji o zmianie konfiguracji (na przykład wybór innego poziomu RAID).

Przyspieszamy

Jest kilka sposobów na uczynienie rozwiązania pamięci masowej szybszym. Pierwszy, to ograniczenie wykorzystywanego obszaru każdego z dysków do zewnętrznych części talerzy. Powoduje to ograniczenie ruchu głowicy, za czym idzie zmniejszenie opóźnień i zwiększenie ilości IOPS. Kosztem tej operacji jest zmniejszenie dostępnej pojemności. Oznacza to, że rozwiązanie będzie szybsze, ale droższe.

Druga metoda to wygaszanie tak zwanych „gorących regionów”, czyli grup najbardziej obciążonych dysków. Wolumeny założone na tych obszarach macierzy należy rozłożyć w takiej sytuacji na większą ilość urządzeń. W tradycyjnej macierzy pula dysków dzielona jest na stosunkowo małe grupy RAID. Mimo, że większość z nich może być wykorzystywana w minimalnym stopniu, to o wydajności całego rozwiązania będą decydować te przeciążone. Problem ten nie występuje w rozwiązaniach wykorzystujących technologię wide striping, gdzie standardowo każdy pojedynczy wolumen rozciągnięty jest po wielu, a nawet po wszystkich dyskach. Wracając do analogii z mostem – jest on w takim przypadku zabezpieczony wszystkimi dostępnymi cięgnami. Może na niego jednocześnie wjechać tyle samochodów, ile jest w stanie udźwignąć cała tak zabezpieczona konstrukcja. W przypadku macierzy podzielonej na grupy dysków, każda z nich reprezentuje oddzielny most. Podczas gdy na większości ruch jest sporadyczny, to na kilku auta muszą czekać, aż inne samochody zjadą z przeciążonej konstrukcji.

No i oczywiście napędy SSD. Sposobów na wykorzystanie ich w macierzach jest kilka. Trudno aktualnie powiedzieć, który z nich będzie standardem. Najprostsze wydaje się zastąpienie nimi dysków. Wydajność napędu SSD jest od nich o rząd wielkości większa. Mają jednak też swoje wady. Główną jest wysoka cena przy stosunkowo niskiej pojemności. Bardziej opłacalne wydaje się zastosowanie ich jako swoistego cache. W tym celu podejmowane są próby stosowania technologii adaptive tiering, czyli automatycznej detekcji stopnia wykorzystania poszczególnych wolumenów, czy bloków danych i migracji ich między klasami (tier) pamięci masowej o różnej wydajności. Pojawia się też pytanie o to, jak będziemy nazywali urządzenia z takim rodzajem napędów? Na pewno nie będzie to już macierz dyskowa, a przynajmniej nie tylko dyskowa. Poza tym rozpowszechnienie się rozwiązań SSD spowoduje, że 90% informacji zawartych w tym dokumencie stanie się nieistotna lub nieaktualna.

Na koniec

Na początku swojej kariery specjalista do spraw pamięci masowych ma wrażenie, że potężne sprzęty, którymi administruje, posiadają nieograniczone możliwości. Wielkie, tajemnicze, błyskające kolorowymi diodami. Koncentruje się na poznaniu ich GUI i CLI. Uczy się jak tworzyć wolumeny i wystawiać je do serwerów. Z czasem poznaje zaawansowane funkcje – kopie lokalne, replikacja danych. Na pojawiające się uwagi o problemach z wydajnością – odpowiada, że taka zaawansowana maszyna nie może być ich przyczyną. Ale im wcześniej uświadomi on sobie, że moc tego urządzenia zależy od dysku niewiele lepszego od tego, który znajduje się w jego stacji roboczej, tym lepiej dla firmy. Wiem to z własnego doświadczenia 🙂

Marek Wołynko, ekspert ds. pamięci masowych, Netia SA
wmarow@gmail.com, www.wmarow.com

BRAK KOMENTARZY

ZOSTAW ODPOWIEDŹ