W poprzednim wpisie pisałem o minusach jakie mają poszczególne poziomy RAID przy zapisie danych. Jednak to nie wszystko co powinniśmy brać pod uwagę przy doborze odpowiedniego poziomu RAID, ważne jest również pasmo przepustowości oraz ilość IOPS.

Zdajemy sobie sprawę jak trudno jest określić ilość wymaganych IOPS i pasmo przepustowości dla poszczególny aplikacji, w szczególności dla baz danych. Jednak uważamy, że od autora oprogramowania powinniśmy otrzymać informacje mówiące nam jaki jest średni lub maksymalny TPS (Transactions Per Second) dla danej ilości użytkowników, jaki jest wymagany rozmiar bloku itp.

Ponieważ te informacje czasami nie są łatwo dostępne, to zawsze możemy obliczyć przepustowość i ilość IOPS dla naszego RAID-u, wolumenu czy LUN-a. Wtedy takie informacje możemy przekazać dla autora oprogramowania. Oczywiście należy sobie zdawać sprawę, że są to osiągi samego wolumenu, na które dodatkowo wpływ będą miały inne czynniki jak np. wydajność HBA, konfiguracja FC/iSCSI, ruch w sieci itp. Ale nie zmienia to faktu, że autor oprogramowania otrzyma informację o tym jaką wydajność ma macierz, na której chcemy uruchomić aplikację i będzie musiał udzielić informacji czy to wystarczy, aby aplikacja działała prawidłowo.

Producenci dysków przeważnie oficjalnie publikują informację o ilości IOPS i o paśmie przepustowości pojedynczego dysku, ale jeżeli nie ma takich informacji to w prosty sposób możemy je wyliczyć z parametrów czasów “seek” i “latency”.

Na przykład jeżeli dysk twardy HDD ma parametry jak poniżej

average latency = 2.8 ms;          average read seek = 4.2 ms;              average write seek = 4.8 ms

wtedy ilość IOPS można obliczyć z poniższego wzoru

                                  1
         IOPS = ---------------------------------------
                (average latency) + (average seek time)

W naszym przypadku będzie to,

                    1
         IOPS = -------------------  = 136.986 IOPS
                (0.0028) + (0.0045)

Jest to całkiem prosta operacja, prawda? Oczywiście prościej jest przyjąć ilość IOPS z zakresu dla danego typu dysków, tak jak to widać w tabeli poniżej:

Typ Dysku RPM Zakres IOPS
SATA 5,400 50-75
SATA 7,200 75-100
SAS/FC 10,000 100-125
SAS/FC 15,000 175-200
SSD N/A 5,000-10,000

Informacje powyżej są tylko podane w celach informacyjnych, nie są one dokładne, ale wystarczające dla nas do wyliczenia IOPS dla RAID-u/wolumenu/LUN-a. Poniżej znana już wam tabela z poprzedniego wpisu, która zawiera karne punkty zapisu dla różnych poziomów RAID:

Poziom RAID Ilość Odczytów I/O
Ilość Zapisów I/O
Karne Punkty Zapisu
0 1 1 1
1 (1+0, 0+1) 1 2 2
5 1 4 4
6 1 6 6

Następnie musimy znać współczynnik Odczytu do Zapisu dla naszej aplikacji. Wcześniej wspomnieliśmy, że aplikacje typu OLTP (online transaction processing) mają ten współczynnik na poziomie 2:1 lub 3:1 na korzyść Odczytu.

Żeby uprościć sprawę, załóżmy, że utworzymy RAID- 6 z ośmiu dysków SATA. Nasze dyski mają 7,200 RPM i 100 IOPS każdy. Załóżmy, że do obliczeń wykorzystamy współczynnik 2:1 dla Odczytu, co daje nam 66.666% Odczytu i 33.333% Zapisu.

W połączeniu ilość IOPS dla 8 dysków przy skonfigurowanym RAID-6 powinna być na poziomie 800 IOPS. Ponieważ RAID-6 otrzymał punkty karne dla zapisu to efektywna wartość IOPS będzie mniejsza. Zróbmy kilka obliczeń, wtedy zobaczymy co się stanie:

1)  Odczyt IOPS + Zapis IOPS = 800 IOPS

2)  (0.66666 x 800) + (0.33333 x 800) = 800 IOPS

3) Odczyt IOPS będzie to 0.66666 x 800 = 533.328 IOPS

4) Zapis IOPS będzie to 0.33333 x 800 = 266.664 IOPS. Jednak RAID-6 otrzymał 6 karnych punktów dla zapisu, więc otrzymaną wartość musimy podzielić przez 6, więc 266.664/6 daje nam 44.444 IOPS dla Zapisu

Z tego wynika, że wolumen RAID-6 średnio ma 533 IOPS dla Odczytu i 44 dla Zapisu.

Obliczyliśmy ilość IOPS dla wolumenu RAID 6, teraz pozostało nam wyliczenie przepustowości. Pasmo przepustowości jest zależne od wielkości bloku. Zakładając, że RAID-6 wykorzystuje bloki w wielkości 4-K i wiedząc, że całkowita ilość IOPS to 577 (533+44) możemy obliczyć pasmo wydajności przez pomnożenie tych dwóch wartości, tak jak to zrobiliśmy poniżej.

     Przepustowść = 577 IOPS x 4-KB
                = 2308KB/sec

Więc jeżeli operacje I/O są na poziomie ciągłym wtedy efektywna wartość przepustowości wynosi 2308KB/sec.

Z drugiej strony, zawsze mówi się, aby dodać więcej dysków do wolumenu żeby zwiększyć ilość IOPS. To prawda gdy maksymalna liczba IOPS może być wykorzystana, a ma to miejsce tylko wtedy gdy wolumen RAID nie nasyci się. Dlatego warto wiedzieć, że dodanie większej ilości dysków nie zawsze jest równoznaczne z większą ilością IOPS.

Wielkość osiągów dla baz danych i innych aplikacji to zarówno nauka i sztuka. Matematycznie możemy udowodnić pewne rzeczy z pewną dokładnością i pewnością, ale różne platformy serwerowy różnie się zachowują przy obsłudze RAID. Wynika to z tego, że firmy mają swoje własne opatentowane poziomy RAID i dla nich nie ma znaczenia jaki RAID jest lepszy dla jakiej aplikacji, zawsze ci powiedzą, że ich wersja RAID jest najlepsza. Przykładowo IBM ma swój RAID-X, NetApp RAID-DP, a NETGEAR X-RAID i gdy zapytasz np. NetApp, jaki RAID jest najlepszy dla twojej aplikacji to oczywiście odpowiedź będzie jedna RAID-DP, ale czy faktycznie tak jest w praktyce ? Na to pytanie odpowiedzcie sobie sami.

Reasumują nie ma dobrego czy złego wyboru poziomu RAID dla aplikacji. Ale bardzo ważne jest, aby wiedzieć jakie są AKTUALNIE najlepsze praktyki. Na koniec moja rada, zawsze żądaj dowodów, zadawaj pytanie dlaczego i TESTUJ, wtedy na pewno wybierzesz odpowiedni RAID dla swojej aplikacji.

Jeżeli chcesz wiedzieć co to są IOPS to zapraszamy tutaj: https://www.backupacademy.pl/iops-o-co-tu-chodzi