2008/12/10

Dlaczego RAID10 jest szybszy od RAID5?

Przyznam się, że na to pytanie bardzo długo odpowiadałem w durny sposób, o tak: "Dla RAID5 kontroler macierzy musi wyliczać parzystość danych co powoduje jego słabszą wydajność." Nie mogę patrzeć na bzdurę, którą właśnie napisałem, a przecież przez wiele lat było to moje zdanie w tym temacie. Częściowo słuszne może ono było, ale do lat 90'tych poprzedniego stulecia, kiedy procesor w kontrolerze nie był dość szybki. Oto kolejny przykład na to, że uczyć się trzeba cały czas i że warto zwracać uwagę na zmieniające się warunki.

Kontrolery aktualnie to mocne maszyny, które przy liczeniu parzystości nie kucają :) Co więc powoduje, że RAID5 ze względu na swoją gorszą wydajność nie jest lubiany np. przez Oracle'a? Powodem jest jego większa zachłanność na najbardziej deficytowy towar w macierzy dyskowej - ilość operacji IO. Przy pojedynczej operacji zapisu na wolumen w RAID5 wykonywane są na dyskach 2 odczyty i 2 zapisy, podczas gdy w RAID10 zachodzą przy tym tylko 2 zapisy. Czyli np. grupa dysków w RAID5 o wydajności 800 IOPS (suma IOPS dysków) podczas zapisów będzie mogła obsłużyć tylko 200 IOPS. Raczej spory spadek wydajności. Te same dyski w RAID10 obsłużą 2x więcej IOPS - 400. Operacje odczytu będą wykonywane z pełną wydajnością grupy w obu przypadkach. Przy charakterystyce operacji 50% odczytów/50% zapisów osiągniemy w tych przypadkach odpowiednio ~320 IOPS z RAID5 i ~533 IOPS z RAID1.
W tradycyjnej macierzy gdzie grupa dyskowa to kilka, kilkanaście dysków, różnica przy zapisach na te dwa typy RAID'u jest na tyle duża, że wybór jest oczywisty. Niestety lepsza wydajność RAID1 kosztuje gorszą efektywność wykorzystania przestrzeni dyskowej. W nowych rozwiązania takich jak 3PAR czy Pillar Axiom, w których wolumeny "rozsmarowane" są po wielu dyskach większa ilość IO generowane przez RAID5 nie jest już tak istotna. Odpowiednio duża ilość dysków w takim box'ie zapewni nam wydajność wystarczającą dla niemal dowolnych systemów bez względu na typ raid'u. Tu jednak też znajdą się przypadki takich aplikacji dla których RAID5 nie będzie dość wydajny.

(korzystałem z informacji z bloga Storage Advisors)

4 komentarze:

tsucharz pisze...

Maro, pozwól, że trochę sprecyzuję.
Rzeczywiście potrzeba więcej IO na backend macierzy przy RAID5, ale wyróżniamy trzy przypadki (mowa o rzecz jasna tylko o write IO):

1. Aby zapisać IO potrzeba odczytać starą daną, odczytać starą parzystość, zapisać nową daną, zapisać nową parzystoć (w sumie 4 operacje więc przelot 4:1).
2. W nowych implementacjach RAID5 np.: w DMX-4 macierz wykonuje jedynie 3 operacje na backend -> przeplot 3:1.
3. I tu niespodzianka, bo RAID5 może być szybszy przy zapisach niż RAID10. Sytuacja ta ma miejsce szczególnie przy sekwencyjnych zapisach. Generalnie chodzi o to, że macierz może wykryć, że przyszło na tyle dużo operacji zapisu, że 'poukłada je w pamięci cache' i zapisze cały pasek w RAID5 z nową parzystością, bez konieczności odczytywania starych wartości. Wtedy przeplot wynosi 1:1. Nie jest to wbrew pozorom sytuacja niezwykła.
Tomek.

Unknown pisze...

Suchy, dzięki za trafny komentarz. Oczywiście nie miałem o tym pojęcia. Wiesz może jeszcze jaka jest sekwencja operacji na beckend'zie przy zapisie w tej nowej implementacji RAID5?

tsucharz pisze...

Maro, w przypadk 2 (przeplot 3:1) o ile pamiętam to jest: odczyt danej, zapis danej, zapis parzystości (nowa parzystość jest przeliczana w locie). Ale sprawdzę i potwierdzę.
Najciekawiej wygląda ostatni przypadek, jeśli np.: pasek jest zbudowany na 4 stronach pamięci (macierze jak wiesz operują nie na sektorach, ale jednostkach większych) o rozmiarze np.: 64K wystarczy zapisać sekwencyjnie 256KB aby wygenerować pojedyńczą IO na backend'zie.

Unknown pisze...

Drodzy koledzy.

Jeśli wydajność liczymy w ilośćiach IOPS na backendzie macierzy, to macie rację. Jeśli wydajność, to w uproszczeniu czas obsługi, to zarówno przy raid1 jak i raid5 pewna część io będzie wykonywana równolegle, często przez inne procesory backendowe. Tak więc, owszem, obciążenie backendu przy raid10 i raid5 wzrośnie ale wydajność wcale tak bardzo nie musi spaść.