RAID w pigułce

23 września 2005 0 przez Artur Wyrzykowski

Choć macierze dyskowe stworzono z myślą o najbardziej wymagających systemach, możliwości ich zastosowania obecnie wykraczają poza środowiska sieciowe, serwery i drogie pamięci masowe. Od kilku lat jest to także technologia dla niewielkich serwerów, takich jak choćby serwer PCLab.pl, jest również dostępna dla przeciętnego użytkownika. Stało się to możliwe dzięki kilku czynnikom, kilku firmom, a także uniwersalnej idei macierzy. Zapraszamy do zapoznania się z teorią RAID i wynikami testów najczęściej wykorzystywanych konfiguracji.

Macierze kojarzą się z dyskami twardymi, ale wykorzystuje się je również np. w pamięciach RAM, napędach taśmowych, zasilaczach i wielu innych urządzeniach. W zależności od potrzeb można osiągnąć trzy różne efekty: wydajność trudną do uzyskania w inny sposób, pojemność jakiej nie oferuje pojedyncze urządzenie, a także odporność na awarie. Dwa pierwsze elementy są możliwe do uzyskania za pomocą coraz bardziej nowoczesnej technologii – pojemność stale zwiększa się poprzez większe upakowanie danych, wydajność można osiągnąć po zastąpieniu tradycyjnych dysków twardych np. dyskami Solid State Disks, jednak nie wymyślono jeszcze takiej technologii, która dawałaby stuprocentową niezawodność – RAID w tym przypadku jest niezastąpiony.

Dla przeciętnego użytkownika peceta ważnym etapem w rozwoju macierzy był rok 1999, kiedy to firma Promise wprowadziła pierwsze kontrolery ATA RAID – był to dowód, że macierz nie musi być kosztowna i dostępna tylko dla wybranych. Zastąpienie stosunkowo drogich dysków SCSI dyskami ATA pozwoliło budować tanie macierze, choć kontrolery ATA RAID były jeszcze dość drogie (kilkaset złotych) i oferowały stosunkowo niewiele funkcji. Kolejnym krokiem w popularyzacji ATA RAID stały się płyty główne firmy ABIT – zapewne wiele osób pamięta model KT7-RAID, czyli pierwszą płytę główną zintegrowaną z dwukanałowym kontrolerem macierzowym firmy HighPoint.

Półprzewodniki obsługujące macierze ATA RAID zaczęło produkować wiele firm, a ostatecznie także producenci chipsetów – Intel, VIA, NVIDIA i SiS. Dzięki takiemu obrotowi sprawy obecnie każda płyta główna oferuje pewne możliwości wykorzystania funkcji RAID – albo RAID 0 w celu poprawy wydajności, albo RAID 1 bądź RAID 5 w celu zabezpieczenia przed awarią dysku. A tak naprawdę twórcy technologii mieli zupełnie inne założenia – chcieli zapewnić dużą i tanią przestrzeń dyskową.

Kto i po co stworzył macierz?

W 1987 roku, gdy moc obliczeniowa systemów komputerowych wzrastała już dość szybko, a nie można było tego jeszcze powiedzieć o pamięciach masowych, trzej profesorowie z kalifornijskiego uniwersytetu w Berkeley – Garth Gibson, Randy Katz i David Patterson – opublikowali pracę pod tytułem A Case for Redundant Arrays of Inexpensive Disks (RAID). Przewidywali oni ogromny wzrost zapotrzebowania na szybkie i tanie pamięci masowe, a rozwiązaniem miał być właśnie RAID. Początkowo założeniem wcale nie było zabezpieczanie danych czy zwiększanie wydajności, lecz osiągnięcie niskich kosztów przy dużej pojemności. Dzięki połączeniu w jedną całość kilku dysków możliwe okazało się stworzenie systemu szybszego i znacznie tańszego niż jeden duży dysk.

Podczas opracowywania RAID wykorzystano urządzenia dyskowe IBM, Fujitsu i Conner. Ten pierwszy to model IBM 3380 – szafa wysokości niemal dwóch metrów, zaprojektowana do współpracy z systemami mainframe, o ogromnej jak na tamte czasy pojemności 7500 MB i wydajności na poziomie 3 MB/s. Niestety, urządzenie kosztowało aż 100 tys. USD! Drugi wykorzystany w projekcie napęd to Fujitsu M2361A o pojemności 600 MB, wydajności 2,5 MB/s i również dość wysokiej cenie 12 tys. USD. Natomiast najtańszy uwzględniony w projekcie Conner oznaczony symbolem CP3100 oferował pojemność 100 MB, wydajność na poziomie 1 MB/s, ale kosztował tylko 1000 dolarów. Tak więc koszt 1 MB przestrzeni dyskowej był paradoksalnie najmniejszy w najtańszym dysku.

Twórcy technologii zdefiniowali sposoby łączenia dysków twardych w większe konfiguracje i określili je mianem Redundant Array of Inexpensive Disks, czyli „nadmiarowa macierz tanich dysków” (w odróżnieniu od kosztowych dysków IBM). Dokładnie zmierzyli ich parametry: wydajność przy różnych typach obciążenia oraz wynikową pojemność – efekt ich pracy widać na rysunku obok. Gdy ceny dużych napędów spadły, organizacja RAID Advisory Board zajmująca się standaryzacją macierzy zmieniła znaczenie akronimu RAID na Redundant Array of Independent Disks.

Już w pierwszym projekcie zauważono, że połączenie wielu dysków w jedną całość bardzo źle wpływa na niezawodność całego rozwiązania. Prosty rachunek wykazał, że czas bezawaryjnej pracy jest odwrotnie proporcjonalny do liczby dysków zastosowanych w macierzy – im jest ich więcej, tym większa szansa uszkodzenia któregoś z nich, co oczywiście wiąże się z utratą danych. Zatem wszystkie konfiguracje oznaczone numerami 1-5 zyskały mechanizmy pomagające chronić dane poprzez zapis informacji nadmiarowych. Na szczęście rozpowszechniła się także konfiguracja RAID 0 nie oferująca żadnych zabezpieczeń – teraz jest ona najpopularniejszym rozwiązaniem macierzowym w domowych pecetach.

Podstawowe poziomy RAID
Poziom RAIDOpisNadmiarowośćWydajnośćWykorzystanie dysków
RAID 0 (striping)Kolejne bloki danych rozmieszczone na kolejnych dyskach macierzy, bez zapewnienia nadmiarowości.Brak – jeśli jeden dysk ulegnie uszkodzeniu, wszystkie dane zostają utracone.Bardzo wysoka wydajność, ponieważ nie ma danych nadmiarowych, dane trafiają na wiele dysków jednocześnie, a konstrukcja macierzy jest bardzo prosta.100%
RAID 1 (mirroring)Te same dane są zapisywane na dwóch dyskach macierzy.Dane na jednym dysku są wierną kopią drugiego, więc w razie awarii pojedynczego napędu nadal są dostępne.Niezła wydajność w aplikacjach losowo odczytujących dane, słaba wydajność przy zapisie (na dwóch dyskach jednocześnie).50%
RAID 2 (striping z kodami ECC)Dane są dzielone na poziomie bitów pomiędzy kilka dysków, kontroler oblicza kody Hamminga (ECC) i zapisuje je na dodatkowych napędach.Ochrona przed awarią pojedynczego dysku, możliwość korekcji błędów "w locie".Szybki transfer danych, ponieważ dane z dysków są przetwarzane równolegle. Słaba wydajność transakcji, bo najmniejsze bloki danych znajdują się na kilku dyskach.zależnie od rozwiązania, 66% lub więcej
RAID 3 (striping z kodami parzystości)Dane są dzielone na poziomie bitów pomiędzy kilka dysków, kontroler oblicza kody parzystości (XOR) i zapisuje je na dodatkowym dysku.Odporność na awarie jednego dysku, odzyskanie zawartości macierzy jest możliwe dzięki kodom parzystości.Szybki transfer danych, ponieważ dane z dysków są przetwarzane równolegle. Słaba wydajność transakcji, bo najmniejsze bloki danych znajdują się na kilku dyskach.(N-1)/N, czyli 66% lub więcej
RAID 4 (striping z kodami parzystości)Dane są dzielone na poziomie bloków pomiędzy kilka dysków, kontroler oblicza kody parzystości (XOR) i zapisuje je na dodatkowym dysku.Odporność na awarie jednego dysku, odzyskanie zawartości macierzy jest możliwe dzięki kodom parzystości.Małe bloki danych nie są rozsiane po wszystkich dyskach, stąd dobra wydajność transakcji, za to wolniejsze transfery sekwencyjne (jeden dysk zawsze obciążony bardziej niż reszta).(N-1)/N, czyli 66% lub więcej
RAID 5 (striping z kodami parzystości na wszystkich dyskach)Poszczególne bloki danych są rozmieszczane na wielu dyskach macierzy, na ich podstawie kontroler oblicza kody parzystości i również zapisuje je na różnych napędach.Odporność na awarie jednego dysku, odzyskanie zawartości macierzy jest możliwe dzięki kodom parzystości.Dobra wydajność transakcji, dobre wyniki przy dużym obciążeniu, ale stosunkowo wolny zapis, bo jest konieczne obliczanie kodów parzystości.(N-1)/N, czyli 66% lub więcej
N – liczba dysków w macierzy

Jak widać, twórcy technologii RAID opracowali kilka konfiguracji dyskowych, posługujących się różnymi metodami zwiększania pojemności, wydajności i niezawodności macierzy. Striping, który jest fundamentem RAID, zastosowany w większości konfiguracji pozwala na zapis i odczyt danych jednocześnie z kilku napędów, dzięki czemu możliwe jest zwielokrotnienie wydajności. Z kolei dwa mechanizmy zabezpieczania danych – mirroring i kody parzystości – umożliwiają zabezpieczenie przed awarią jednego z dysków w macierzy. W jednej z konfiguracji wykorzystano także kody ECC, które przez lata nie były wykorzystywane, dopiero ostatnio powracają do łask, choć w zupełnie innej postaci. W dalszej części artykułu przedstawimy najpopularniejsze konfiguracje, ich rzeczywistą wydajność, wybrane funkcje kontrolerów macierzowych, a także kilka egzotycznych pomysłów na RAID.


RAID na co dzień

Wymagania współczesnych użytkowników komputerów są nieco inne, niż założenia twórców RAID. Nie chodzi o uzyskanie dużej pojemności, bo to zapewnia pojedynczy dysk, natomiast w różnych zastosowaniach wskazana jest duża wydajność podsystemu dyskowego, a czasem także większa niezawodność – wszystko oczywiście przy zachowaniu niskich kosztów. Ten ostatni warunek łatwo zrealizować, korzystając z dysków Serial ATA – komputer z dwoma napędami kosztuje tylko trochę więcej niż z jednym, a ma wyraźnie lepsze walory użytkowe.

Pierwszym namacalnym efektem stosowania macierzy może być wydajność, którą można zrealizować, łącząc przynajmniej dwa dyski w konfigurację RAID 0. Mamy tu do czynienia z tzw. stripingiem (na język polski można to przetłumaczyć jako podział danych na paski czy też „paskowanie”). Dane są dzielone przez kontroler na porcje o określonej wielkości i rozmieszczane na dwóch lub większej liczbie dysków za pomocą algorytmu Round Robin, czyli w pętli od pierwszego do ostatniego. Teoretycznie zapis taki może odbywać się z wielokrotnie większą szybkością niż na pojedynczym dysku, również odczyt odbywa się bardzo szybko – gdy dysk w ciągu sekundy może odczytać np. 50 MB danych, dwa dyski w tym samym czasie odczytają 100 MB! Warunkiem jest to, by komputer w odpowiednio „stanowczy” sposób zażądał danych, co w mało obciążonych systemach może być trudne. Dlatego pełną wydajność macierzy RAID 0 osiągnie się w komputerach pracujących pod znacznie większym obciążeniem, np. w serwerach.

RAID 0

Gdyby głębiej wniknąć w szczegóły, okaże się, że w RAID 0 nie każdy plik jest dzielony na mniejsze porcje. Jeśli rozmiar paska (ang. stripe size) zostaje ustalony np. na 64 KB, a plik jest mniejszy od niego, być może trafi on tylko na jeden z dysków. Oznacza to, że wydajność podczas sekwencyjnego zapisu i odczytu małych plików czy np. rekordów baz danych może być taka, jak na pojedynczym dysku. Aby ją poprawić, można zmniejszyć rozmiar pasków, ale wiąże się to z większą liczbą operacji wykonywanych przez kontroler, więc efekt może być wręcz odwrotny od zamierzonego.

Duże znaczenie ma również czas dostępu do danych – w pojedynczym dysku głowica może sięgnąć do danych w ciągu kilku milisekund, a w macierzy RAID 0 może okazać się konieczne sięgnięcie po drugi blok danych na drugim dysku. Ogólnie czas dostępu może być nawet dłuższy niż w przypadku konfiguracji jednodyskowej. Na szczęście taki efekt nie występuje podczas operacji na małych blokach danych, kiedy strat nie dałoby się skompensować szybkim transferem. Średni czas dostępu np. do rekordów baz danych powinien być najwyżej taki jak w przypadku pojedynczego dysku, a ponieważ obciążenie jest równo rozłożone na kilka dysków, możliwe jest uzyskanie jeszcze lepszych efektów.

RAID 0 ma jedną wadę – do poprawnej pracy wymaga sprawności wszystkich dysków w macierzy, a awaria jednego z nich oznacza utratę wszystkich danych zapisanych na macierzy. Ryzyko rośnie proporcjonalnie do liczby dysków, a więc przy dwóch napędach prawdopodobieństwo awarii jest dwukrotnie większe niż przy jednym. Jednak niewiele osób wykorzystujących macierze się tym przejmuje, zresztą całkiem słusznie. Średni czas pracy dysku między awariami (MTBF) szacowany jest przynajmniej na 300 tys. godzin, to jakieś 35 lat! Oczywiście to tylko ŚREDNI czas bezawaryjnej pracy, czasem wynosi on tydzień, miesiąc lub rok. Jednak w rzeczywistości prawdopodobieństwo uszkodzenia dysku jest bardzo małe – istnieje znacznie więcej innych czynników, które zagrażają danym, a których najbardziej bezpieczna macierz nie jest w stanie wyeliminować, np. wirusy czy zasilacze komputerowe o słabej jakości. Poza tym typowy domowy pecet nie służy do przechowywania szczególnie ważnych informacji.

Przy okazji RAID 0 warto jeszcze wspomnieć o jednej konfiguracji zwanej JBOD – Just a Bunch of Disks, czyli grupa dysków połączona w jedną całość. Również w tym przypadku tworzony jest jeden duży dysk, ale dane są zapisywane kolejno na poszczególnych napędach, a nie są dzielone pomiędzy nie. Nie ma więc żadnego zysku wydajności, a zwiększa się ryzyko utraty danych. Dlatego też ta mało praktyczna konfiguracja nie jest często stosowana.

JBOD

Są jednak zastosowania, w których trzeba spróbować wykluczyć ryzyko utraty danych, nawet jeśli i tak jest ono bardzo małe – jedną z tanich metod jest RAID 1, czyli mirroring (kopia lustrzana). Macierz tego typu wykorzystuje tylko dwa dyski, na obu zapisuje dokładnie te same dane, a więc po awarii jednego z nich dane pozostają na drugim. Komputer nadal działa, lecz oprogramowanie informuje o stanie awaryjnym.

RAID 1

RAID 1 jest konfiguracją stosunkowo tanią (bo wystarczą dwa napędy) i w pewien sposób zabezpieczającą dane, ale ma kilka wad. Przede wszystkim cały jeden napęd musi być przeznaczony na kopię tego, co znajduje się na drugim, więc macierz np. na dwóch dyskach o pojemności 500 GB każdy ma całkowitą pojemność 500 GB (a nie 1000 GB). Podczas zapisu danych można spodziewać się pewnego spadku wydajności – dokładnie te same dane muszą być w tym samym czasie zapisywane na obu napędach, ale zawsze jeden z dysków zrobi to wolniej. Trochę lepiej jest z odczytem – na obu napędach są te same dane, są one pobierane z tego dysku, który szybciej uzyska do nich dostęp.

Jeszcze raz podkreślimy, że w przeciętnym komputerze osobistym albo serwerze bezpieczeństwo oferowane przez RAID 1 jest dość ulotne. To tylko zabezpieczenie przed awarią jednego z dysków, jednak jest wiele sytuacji, kiedy to nie wystarcza. Na przykład uszkodzony kontroler macierzowy może „zgłupieć” i zamazać pewne obszary obu napędów – odtworzenie danych z takiej macierzy jest o wiele trudniejsze niż z pojedynczego dysku. Podczas awarii zasilania czy po uderzeniu pioruna, gdy w sieci pojawi się przepięcie, uszkodzeniu mogą ulec oba napędy. Również wirus o destrukcyjnych zapędach nie będzie kasować danych na połowie macierzy, tylko na całości. Tak więc jest wiele sytuacji, przed którymi RAID 1 (ani żadna inna konfiguracja macierzowa) nie potrafi zabezpieczyć. Jak zwykle, najlepszym środkiem jest kopia bezpieczeństwa (backup).


Wydajność RAID 0 i 1

Na poparcie powyższej teorii macierzy możemy przytoczyć wybrane wyniki testów, jakie wykonaliśmy na komputerze z chipsetem Intela z mostkiem południowym ICH7R oraz czterema dyskami WD Caviar RAID Edition. Wybór chipsetu jest oczywisty – na razie jako jeden z dwóch chipsetów desktopowych (drugi to nForce4 SLI Intel Edition) obsługuje RAID 5, co również będziemy mogli zilustrować odpowiednimi wykresami.

Z teorii wynikałoby, że RAID 0 daje najlepsze efekty podczas operacji sekwencyjnego zapisu i odczytu dużych plików, natomiast podczas operacji losowych efekty powinny być mniej spektakularne. Jednak praktyka trochę się z tym mija – wykorzystanie dwóch dysków zamiast jednego przekłada się na podwojenie wydajności tylko w bardzo specyficznych warunkach, przy dość dużym obciążeniu napędów. Podczas naszych testów ustaliliśmy długość kolejki I/O na 16 komend – takie zapotrzebowanie na dane jest w stanie „zgłosić” przeciętny komputer. Z testów wynika również, że RAID 1 podczas operacji sekwencyjnych praktycznie nie różni się wydajnością od pojedynczego dysku.

Wydajność RAID

Nieco inaczej prezentują się wyniki pomiarów średniego czasu dostępu do danych przy zapisie i odczycie – dotyczą one bloków o wielkości zaledwie 512 bajtów, które w RAID 0 nie są dzielone na paski, lecz w całości trafiają na poszczególne dyski. Jeśli więc każdy dysk jest w stanie wykonać np. 100 operacji I/O na sekundę podczas losowego wyszukiwania odpowiednich sektorów, zwielokrotnienie dysków daje możliwość wykonania większej liczby operacji, a więc skraca średni czas dostępu do danych. Oczywiście efekt jest tym lepszy, im większe jest obciążenie dysków – przy kolejce I/O o długości 1 komendy czas odpowiedzi wynosi 14 ms i macierz RAID 0 nie jest w stanie go skrócić nawet odrobinę.

Również RAID 1 daje wyniki zgodne z oczekiwaniami. Losowy odczyt danych odbywa się z tego dysku, którego głowica szybciej dotrze do odpowiedniego sektora. Z kolei losowy zapis danych musi być wykonany na obu napędach, cała macierz musi „czekać” na wolniejszy dysk. Dlatego też czas odpowiedzi podczas odczytu jest krótszy, a podczas zapisu dłuższy niż w przypadku pojedynczego dysku. Ta prawidłowość dotyczy napędów pracujących zarówno pod małym, jak i dużym obciążeniem.

Wydajność RAID

Sprawdziliśmy również, czego można oczekiwać w przypadku bardziej codziennych zastosowań – File Server to test polegający na odczycie i zapisie bloków danych o różnej wielkości, zaś Web Server to test wykorzystujący tylko operacje odczytu. W obu przypadkach RAID 1 oferuje lepszą wydajność niż pojedynczy dysk, a w teście Web Server działa tak samo sprawnie jak RAID 0 w konfiguracji z dwoma dyskami (ale tylko dlatego, że w teście tym nie ma zapisu). Oczywiście RAID 0 z większą liczbą dysków jest nie do pokonania.

Wydajność RAID

Aktualizacja: Prosiliście o wyniki innych testów, m.in. PCMarka, my takimi wynikami dysponujemy (test wykonany również na ICH7R i dyskach Caviar RE). Poniżej zamieszczamy wykres porównujący wydajność jednego dysku oraz konfiguracji RAID 0 i RAID 1 w tym teście. Widoczne są dość wyraźne różnice między pojedynczym napędem a dwudyskową konfiguracją RAID 0, natomiast dodawanie kolejnych dysków do macierzy nie powoduje znacznego przyrostu wydajności – prawdopodobnie PCMark w bardzo małym stopniu obciąża dyski i nie potrafi z nich wydobyć większej wydajności, co jednak może odpowiadać niewielkiemu obciążeniu niektórych komputerów. Widać również, że konfiguracja RAID 1 w teście File Copying wypada słabiej niż pojedynczy dysk – to wynik wielu operacji zapisu, w których RAID 1 się nie sprawdza.

Wydajność RAID


Macierzowy mix

RAID 0 i RAID 1 są dość odległe od ideału – pierwsza konfiguracja zwiększa ryzyko awarii, a druga nie oferuje żadnego przyrostu wydajności. Pojawiły się więc różne kombinacje tych technologii, dobrze znanymi są RAID 01 (określane jako 0+1 lub 0/1) oraz RAID 10 (1+0 lub 1/0). Oba te rozwiązania są bardzo podobne, łączą wydajność RAID 0 z podwyższoną niezawodnością RAID 1. Często są ze sobą mylone, nawet wielu producentów z premedytacją deklaruje obsługę RAID 10 przez kontrolery, choć być może obsługują one właśnie tylko RAID 01 (większy numer mógłby sugerować lepszą wydajność macierzy).

RAID 01 to dwie macierze RAID 0 o podwyższonej wydajności, połączone w konfigurację lustrzaną (RAID 1) zapewniającą niezawodność. Do realizacji tego celu potrzeba przynajmniej 4 dysków, z czego na dane użytkownika będzie przeznaczona połowa przestrzeni dyskowej, a druga połowa jest przeznaczona na kopie. Gdy jeden dysk w macierzy RAID 0 zostaje uszkodzony, cała ta połówka przestaje działać, ale pracuje druga połowa. Oczywiście w macierzy RAID 0 mogą jednocześnie zostać uszkodzone oba dyski – nie ma to żadnego znaczenia. Jednak gdy zdarzy się, że „padnie” dysk z drugiej macierzy RAID 0 (prawdopodobieństwo ok. 1/2), cała konfiguracja przestaje działać. Dlatego RAID 01 chroni przed awarią tylko jednego dysku, a w razie awarii dwóch istnieje znaczne prawdopodobieństwo utraty danych.

RAID 01

Jak można się domyślać, konstrukcja RAID 10 jest odwrotna – najpierw tworzone są pary dysków RAID 1 zapewniające podwyższony poziom bezpieczeństwa, a następnie pary te są łączone w wydajną konfigurację RAID 0 – w sumie muszą to być przynajmniej cztery napędy. Choć idea jest bardzo podobna do RAID 01, konfiguracja taka zapewnia nieco lepszą ochronę danych, co zależy od liczby dysków zastosowanych w macierzy. Na przykład jeśli jest ich 10 (czyli 5 par RAID 1) i w jednej z par ulegnie awarii jeden dysk, ma ona jeszcze do dyspozycji drugi, na którym może normalnie działać. Prawdopodobieństwo, że w dalszej kolejności awarii ulegnie napęd z tej samej macierzy jest stosunkowo niewielkie (ok. 1/5), bo raczej tym razem przytrafi się to w kolejnej „lustrzanej” parze, a cała macierz będzie nadal sprawna. Oczywiście, w przypadku wykorzystania czterech dysków, odporność na awarie obu konfiguracji jest taka sama.

RAID 10

Można też dostrzec także istotną różnicę w sposobie odtwarzania danych po awarii pojedynczego dysku: macierz RAID 01 składa się z dwóch dużych macierzy RAID 0, więc uszkodzenie jednej z nich wiąże się z odtworzeniem dużej ilości danych. Z kolei RAID 10 można składać się z wielu małych kopii lustrzanych – awaria jednego z dysków wiąże się z koniecznością odtworzenia tylko niewielkiej części danych, co zajmuje znacznie mniej czasu.

Warto jeszcze wspomnieć o dwóch mniej znanych konfiguracjach: Matrix RAID, która ma coraz szersze zastosowanie w komputerach osobistych, a także RAID 1.5, która prawdopodobnie nigdy popularności nie zyska. Matrix RAID jest oferowany przez Intela w mostkach południowych ICH6R i ICH7R – praktycznie nie jest to żadna nowość, pozwala po prostu na stworzenie na parze (lub większej liczbie dysków) dwóch macierzy. Takie możliwości od dawna oferują kontrolery SCSI RAID, np. dysponując czterema dyskami można stworzyć małą, szybką i bezpieczną macierz RAID 01, obok niej pojemną macierz RAID 5, a dla aplikacji wymagających największej wydajności (albo dla partycji wymiany) RAID 0. Niestety, Matrix RAID ma ograniczenie tylko do dwóch macierzy, ale to i tak dużo – na dwóch dyskach można stworzyć RAID 0 (np. pozwalający na szybką pracę systemu i oprogramowania), a także RAID 1 do przechowywania cennych danych.

Matrix RAID

Wyjątkowo egzotyczny pomysł na RAID zaprezentowała niegdyś firma HighPoint w mało znanych kontrolerach HPT372N. My nie mieliśmy tych kontrolerów na żadnej płycie w naszym laboratorium, za to pisał o tym serwis Tom’s Hardware Guide. Założeniem RAID 1.5 korzystającego z pary dysków jest zaoferowanie zarazem dużej wydajności i podwyższonego bezpieczeństwa danych. Zapis odbywa się w identyczny sposób jak w RAID 1, na oba dyski trafiają te same dane, więc są stosunkowo bezpieczne, a wydajność jest trochę gorsza od pojedynczego dysku. Jednak podczas odczytu dane są pobierane naprzemiennie z obu napędów jak w RAID 0 (np. bloki parzyste z jednego dysku, nieparzyste z drugiego), co teoretycznie powinno skutkować dwukrotnie szybszym transferem podczas odczytu. Jednak według testów przeprowadzonych przez THG wynika, że zysk wydajności podczas odczytu może wynosić do 20 procent, a w niektórych testach zaobserwowano spadek wydajności w stosunku do pojedynczego dysku.

RAID 1.5


Z myślą o wielkich

Konfiguracje RAID 1, 01 oraz 10 są stosunkowo bezpieczne, ale olbrzymią wadą jest wykorzystanie połowy przestrzeni dyskowej na lustrzaną kopię danych. Przy dwóch lub czterech dyskach nie jest to problemem, ale gdy macierz ma mieć pojemność wielu terabajtów i składa się z dziesiątek dysków, takie marnowanie przestrzeni dyskowej jest niedopuszczalne. Dlatego już przy opracowywaniu wstępnych założeń dla macierzy stworzono dwa poziomy RAID: 3 i 5, które posługują się kodami parzystości, zapisują je na dodatkowym dysku i w ten sposób chronią przed awarią pojedynczego napędu. Ostatnio popularność zdobywa także RAID 6, który toleruje awarię dwóch dysków.

Macierz RAID 3 musi składać się przynajmniej z trzech napędów – dwa do równoległego zapisu danych użytkownika, trzeci do przechowywania informacji o parzystości. Jednak dane nie są dzielone na „paski”, lecz podział odbywa się na znacznie mniejsze porcje, bo na poziomie pojedynczych bitów. Na przykład pierwszy bit pliku trafia na dysk 1, drugi bit na dysk 2, z tych dwóch bitów wyliczana jest logiczna funkcja XOR (Exclusive OR), po czym wynik jest zapisywany na trzecim dysku. W razie awarii napędu przechowującego kody parzystości są one odtwarzane na podstawie danych oryginalnych, zaś w razie awarii jednego z dysków przechowujących dane oryginalne, są one obliczane za pomocą XOR na podstawie informacji z drugiego dysku oraz kodów.

RAID 3

Podczas sekwencyjnego zapisu i odczytu dużych ilości danych podział danych na poziomie bitów jest równoznaczny ze stripingiem, zwielokrotnienie napędów pozwala uzyskać bardzo wysokie transfery, ale pod warunkiem wyposażenia kontrolera w szybki procesor do obliczania kodów parzystości. Z pozoru taka prosta funkcja logiczna jak XOR nie wymaga szczególnej mocy obliczeniowej – jeśli argumentami operacji są dwa zera lub dwie jedynki, wynik wynosi 0, a jeśli argumenty są różne, wynikiem jest 1. Jednak XOR działa tylko na dwóch argumentach, a kontrolery macierzowe potrafią obsłużyć dziesiątki lub nawet setki napędów. Należy wtedy obliczyć XOR z dwóch pierwszych bitów, następnie uwzględnić bit z trzeciego dysku i ponownie obliczyć XOR, następnie wziąć jeden bit z następnego napędu itd… Ponadto słabym punktem RAID 3 jest większe obciążenie jednego dysku, a także powolny dostęp do małych porcji danych, bo nawet najmniejsze z nich są rozproszone po wszystkich dyskach macierzy.

Powyższe wady powodują, że współczesne kontrolery nie obsługują konfiguracji RAID 3, za to jej miejsce zajął lepiej przemyślany RAID 5. Pierwszą różnicą jest to, że kody parzystości są rozsiane po wszystkich napędach, co pozwala na ich równomierne obciążenie. Natomiast druga modyfikacja, usprawniająca obsługę małych plików, to sposób rozmieszczania danych na dyskach – nie są one dzielone na pojedyncze bity, lecz na „paski” takie jak w RAID 0. W efekcie ogólna wydajność jest znacznie lepsza niż w przypadku RAID 3, ale nadal bardzo zależy od procesora wykorzystanego w kontrolerze macierzowym (albo od wydajności CPU, jeśli rozwiązanie jest realizowane programowo).

RAID 5

Obecnie rośnie znaczenie konfiguracji RAID 6, do niedawna uznawanej za bardzo egzotyczną i stosowanej w serwerach o najwyższym współczynniku niezawodności (przez HP była zwana Advanced Data Guarding, przez IBM po prostu jako „RAID-5 dual parity”). RAID 6 – podobnie jak poziomy 0, 3 i 5 – wykorzystuje striping, a do ochrony danych służą dwa dyski, tak więc macierz tego typu musi zawierać przynajmniej cztery napędy. W takiej minimalnej konfiguracji dane zapisywane są na dwa napędy, na ich podstawie obliczane są kody parzystości za pomocą XOR (wynik trafia na trzeci dysk), a dodatkowo za pomocą algorytmu Reed Solomon obliczane są kody korekcji błędów ECC, które trafiają na czwarty dysk. Dzięki temu macierz toleruje uszkodzenie dwóch dysków w jednym czasie. W RAID 6 „marnuje się” stosunkowo dużo przestrzeni dyskowej, w przypadku zastosowania 4 dysków jest to aż połowa, ale np. w macierzy 10-dyskowej jest to 1/5 pojemności. Ponieważ RAID 6 jest rozwinięciem RAID 5, ma bardzo podobny zakres zastosowań oraz zbliżoną wydajność.

RAID 6

Podobnie jak w przypadku macierzy poziomu 0 i 1, możliwe jest również łączenie funkcjonalności macierzy 3 i 5 z innymi konfiguracjami. Na przykład 03, 30, 05 i 50 to nic innego jak RAID 3 i RAID 5 dodatkowo wspomagany stripingiem. Pojawiają się nawet takie konfiguracje jak RAID 15 oraz 51, czyli połączenie mirroringu z wykorzystaniem kodów parzystości – to dla osób paranoicznie dbających o bezpieczeństwo danych. W 8-dyskowej macierzy RAID 15 uszkodzeniu mogą ulec dowolne 3 dyski, zaś podobna macierz RAID 51 w sprzyjających warunkach toleruje nawet uszkodzenie 5 dysków! Są to jednak konfiguracje tak egzotyczne, że prawdopodobnie nigdy nie znajdziemy ich w żadnym z kontrolerów RAID.


Wydajność RAID 01 i 5

Chcielibyśmy przedstawić jakieś dowody świadczące o wydajności poszczególnych macierzy, szczególnie jeśli chodzi o słabości RAID 3. Niestety, w laboratorium nie mieliśmy kontrolerów obsługujących ten poziom RAID, bo praktycznie zniknęły one z rynku. Z kolei RAID 6 jest nowością i jest dostępny tylko w najnowszych serwerach niektórych firm. Możemy za to pokazać różnice pomiędzy RAID 01 a RAID 5 w konfiguracjach z trzema i czterema dyskami.

Na początek konfrontacja teorii z praktyką , dotycząca operacji sekwencyjnego odczytu i zapisu danych. Macierz RAID 01 to nic innego, jak dwie wydajne macierze RAID 0 (o transferze dwukrotnie większym niż pojedynczy dysk) połączone w konfigurację lustrzaną, która praktycznie w żaden sposób nie zwiększa wydajności. Tak więc RAID 01 ma dokładnie takie osiągi, jak RAID 0. Co ciekawe, podobną szybkość transferu danych jest w stanie zapewnić RAID 5 zbudowana z trzech dysków, z czego jeden jest przeznaczony na kody parzystości (czyli na zapis danych są przeznaczone dwa dyski). Oczywiście konfiguracja RAID 5 wykorzystująca cztery napędy oferuje odpowiednio wyższą wydajność.

Wydajność RAID

Dwie omawiane konfiguracje osiągają także bardzo dobre wyniki podczas operacji o charakterze losowym – średni czas odpowiedzi jest 2,5-3-krotnie krótszy niż w przypadku pojedynczego dysku. Macierz RAID 01 to dwie kopie lustrzane RAID 0, przy czym zarówno kopia lustrzana, jak i striping powoduje skrócenie czasu dostępu do danych (co wykazaliśmy na poprzednich stronach artykułu). W przypadku RAID 5 losowy odczyt małych porcji danych odbywa się ze wszystkich dysków jednocześnie, co również owocuje bardzo krótkim czasem odpowiedzi. Zupełnie inaczej jest podczas zapisu – kontroler obsługujący macierz RAID 5 musi obliczać kody parzystości i tutaj dokładnie widać jego słabości – każda operacja zapisu wyraźnie się wydłuża. Natomiast RAID 01 składający się z dwóch macierzy RAID 0 jest w stanie zaoferować znacznie lepszą wydajność w takim teście.

Wydajność RAID

Oczywiście w codziennych zastosowaniach dominują operacje odczytu danych, więc w teście File Server obie macierze mają szanse osiągnąć podobną wydajność, a w teście Web Server wyniki powinny być jeszcze bardziej zbliżone. Te przewidywania w pełni się sprawdzają – w pierwszym przypadku macierz RAID 01 jest wyraźnie szybsza od RAID 5, za to w drugim możliwości obu macierzy są niemal identyczne. Oczywiście konfiguracja RAID 5 wykorzystująca 5 dysków (taka jak w serwerze PCLab.pl) byłaby wyraźnie lepsza od konfiguracji 4-dyskowej.

Wydajność RAID

Aktualizacja: Również w przypadku RAID 01 oraz RAID 5 dodajemy wyniki z testu PCMark 04. W tym przypadku konfiguracja RAID 01 wypada nieporównywalnie lepiej niż RAID 5, co jest dość podejrzane – w testach XP Startup czy Application Loading (prawie wyłącznie odczyt danych) również różnice między wydajnością tych macierzy są duże, choć nie powinny. Poza tym RAID 5 z czterema dyskami generalnie wypada słabiej niż z trzema, co jest zupełnie pozbawione sensu. No cóż, być może PCMark 04 nie potrafi dobrze testować macierzy – z pewnością znacznie większe zaufanie mamy do testu Iometer.

Wydajność RAID


Nietypowe konstrukcje

Przedstawione do tej pory konfiguracje RAID to nie wszystkie możliwe kombinacje. Istnieje kilka rzadko spotykanych rozwiązań, niektóre z nich zostały opracowane w teorii, ale nie zyskały popularności. Przykładem jest RAID 2, który z założenia miał chronić dane na dyskach nie dysponujących mechanizmami wykrywania i korekcji błędów. Dane są dzielone na pojedyncze bity, zapisywane na kilku dyskach jednocześnie, służą też do obliczania kodów Hamminga, które „w locie” mogą skorygować przekłamania. Oczywiście macierz musi być wyposażona w dodatkowe dyski przechowujące kody ECC, musi być ich stosunkowo dużo (np. dla macierzy 10-dyskowej potrzeba 4 dodatkowych napędów). Konieczne jest także zastosowanie odpowiednich rozwiązań sprzętowych do obliczania „w locie” kodów ECC. Jednak ponieważ dokładnie takie same mechanizmy korekcji błędów są implementowane we wszystkich dyskach, stosowanie ich dodatkowo w macierzach nie ma sensu. Dlatego RAID 2 pozostał tylko na papierze, choć podobno próbowała go kiedyś używać firma Connection Machine – dziś nie ma śladu po tych rozwiązaniach.

RAID 2

Dość specyficznym rozwiązaniem jest także RAID 4 – to coś pomiędzy poziomem 3 i 5. Dane nie są dzielone na pojedyncze bity (jak w RAID 3), lecz na paski (jak w RAID 5), trafiają na kolejne dyski, a na wydzielonym dysku przechowywane są kody parzystości obliczane za pomocą funkcji XOR. Pozwala to osiągnąć nieco inne właściwości niż w przypadku RAID 3 – aby sięgnąć po określony blok danych, nie trzeba pobrać jego poszczególnych fragmentów ze wszystkich dysków macierzy, bo jest on zapisany tylko na jednym dysku. Dzięki temu w operacjach związanych z obsługą baz danych RAID 4 spisuje się bardzo dobrze (przynajmniej tak wynika z teorii), czego nie można powiedzieć o operacjach sekwencyjnego zapisu i odczytu danych. Trudno powiedzieć, dlaczego rozwiązanie nie zyskało popularności – było zapewne znacznie trudniejsze do implementacji niż RAID 3, a gdy kontrolery nieco się rozwinęły, opracowano znacznie lepszy RAID 5. Obecnie żadne kontrolery macierzowe nie obsługują RAID 4, choć podobno konfiguracja taka jest (była) wykorzystywana w niektórych macierzach firmy Network Appliance.

RAID 4

Kolejnym rozwiązaniem o bardzo ograniczonym zakresie zastosowań jest RAID 7, a mała popularność wynika z tego, że jest to pomysł opatentowany przez firmę Storage Computer Corporation i nie jest powszechnie wykorzystywanym standardem przemysłowym. Łączy cechy RAID 3 i 4, do przechowywania informacji nadmiarowych (kodów parzystości) wykorzystuje wydzielony dysk. Korzysta ze specjalizowanego kontrolera, a także ze specjalnych mechanizmów buforowania danych, szczególnie w odniesieniu do dysku przechowującego informacje nadmiarowe. W efekcie osiągnięto doskonałą wydajność podczas odczytu bloków o dowolnej wielkości, a także bardzo dobrą wydajność podczas zapisu. Jedynym problemem jest koszt technologii, wynikający m.in. z jego niewielkiej popularności.

Jeszcze jednym specyficznym rodzajem macierzy RAID jest rozwiązanie firmy EMC o nazwie RAID S lub też Parity RAID, wykorzystywane w macierzach Symmetrix, zoptymalizowane do dużych, sieciowych pamięci masowych. W tym przypadku kolejne bloki danych są zapisywane na tym samym dysku fizycznym, a więc z punktu widzenia jednego użytkownika nie jest to w ogóle macierz. Jednak poszczególne dyski logiczne (wolumeny) są ulokowane na różnych dyskach twardych, przez co dla całej sieci urządzenie zachowuje się jak macierz. Istnieje też duże podobieństwo do RAID 4, ponieważ do przechowywania kodów parzystości służy wydzielony dysk.


Funkcje kontrolerów

Pisząc o macierzach nie można pominąć kontrolerów, bo to one realizują wszystkie funkcje odpowiedzialne za podział danych pomiędzy dyski, wygenerowanie i zapis danych nadmiarowych, buforowanie itd. Chcielibyśmy więc wspomnieć o kilku najważniejszych funkcjach związanych z obsługą dysków (fizycznych i logicznych), a także z zapewnieniem niezawodności. Niektóre z tych rozwiązań są bardzo zaawansowane, ale dopiero ich zastosowanie pozwala uzyskać naprawdę bezpieczną macierz.

Istotne jest to, w jaki sposób macierze mogą zarządzać przestrzenią dyskową – te funkcje, które dziś są dostępne w pecetach, nawet w najnowszych chipsetach Intela, to jedynie niewielka część możliwości. Oto kilka przykładów.

  • Najprostsze Adaptec SATA RAID 2410SAkontrolery macierzowe potrafią stworzyć na dyskach fizycznych tylko jeden dysk logiczny, tzn. dysponując dwoma dyskami można utworzyć na nich RAID 0 lub RAID 1. Technologia Matrix RAID umożliwia stworzenie dwóch dysków logicznych, a więc para dysków wystarczy do tego, by utworzyć na nich jednocześnie RAID 0 i RAID 1. Dodatkowo, mostek południowy ICH7R obsługuje poziom RAID 5, więc np. na trzech dyskach można stworzyć RAID 0 i RAID 5. Tymczasem typowe kontrolery SCSI RAID nie nakładają żadnych ograniczeń co do liczby tworzonych wolumenów, a każdy z nich jest widoczny przez system jako osobny napęd, który można dowolnie partycjonować.
  • Migracja macierzy to funkcja dostępna już w desktopowych chipsetach Intela (ICH6R i ICH7R) oraz NVIDIA (w nForce4, technologia zwana morphingiem). Dzięki temu możliwa jest zmiana poziomu macierzy RAID bez usuwania danych, choć podczas takiej operacji zawsze istnieje pewne ryzyko. Oczywiście migracja macierzy wiąże się z pewnymi ograniczeniami, np. RAID 0 zazwyczaj nie może być przekształcony na RAID 1, ponieważ macierz wynikowa jest mniejsza niż pierwotna.
  • Migracja macierzy jest ściśle związana z możliwością rozbudowy macierzy on-line, również bez konieczności usuwania danych. Oznacza to, że do macierzy można dodać kolejne dyski, zwiększając w ten sposób jej pojemność lub wydajność. Jednak gdy jeden dysk jest większy niż pozostałe (np. 2 dyski mają po 80 GB, trzeci 120 GB), zwykle pojawia się problem z zagospodarowaniem nadmiaru przestrzeni dyskowej i nie może być ona wykorzystana przez użytkownika. Kontrolery SCSI RAID (i droższe SATA RAID) oczywiście takich ograniczeń nie mają, można także stopniowo wymienić wszystkie dyski na większe, a uzyskaną w ten sposób dodatkową pojemność zagospodarować zgodnie z potrzebami.
  • Ważną funkcją, szczególnie w serwerach, jest obsługa dysków zapasowych (tzw. hot-spare). Macierz zapewniająca ochronę danych (np. RAID 1 lub RAID 5) może mieć dodatkowy dysk zapasowy, który w razie awarii automatycznie przejmuje rolę dysku uszkodzonego i dane są synchronizowane między napędami (następuje tzw. odbudowa macierzy). W ten sposób macierz szybciej powraca do normalnego stanu pracy i odzyskuje pełną wydajność i niezawodność. Istnieje także pojęcie „global hot-spare” – w sytuacji, gdy kontroler ma skonfigurowanych kilka macierzy, nie trzeba dla każdej z nich wydzielać osobnego (lokalnego) dysku zapasowego, lecz może to być właśnie jeden dysk globalny.

Użytkownicy dysków Serial ATA mogą korzystać z wielu wymienionych funkcji, ale potrzeba do tego lepszych kontrolerów, takich jak np. czterokanałowy Adaptec Serial ATA RAID 2410SA (zamieszczony na zdjęciu powyżej) lub inne kontrolery Adapteca wyposażone maksymalnie w 16 kanałów Serial ATA.

W typowych warunkach niezawodność oferowana przez RAID i RAID 5 jest wystarczająca, ale istnieje kilka ciekawych rozwiązań, o których warto wiedzieć. Jak pisaliśmy, konfiguracje macierzowe zabezpieczają przed awarią dysków, ale nie chronią przed awarią kontrolera czy kabli. Dopiero macierz z podwójnym kontrolerem i nadmiarowym okablowaniem uznaje się za rzeczywiście bezpieczną.

  • Adaptec Storage Manager Browser EditionPraca dwóch kontrolerów w trybie active-passive lub active-active pozwala zabezpieczyć przed awarią jednego z nich. W tym pierwszym przypadku kontroler zapasowy przejmuje rolę kontrolera głównego, gdy ten ulegnie uszkodzeniu. Natomiast w drugim przypadku oba kontrolery mogą pracować jednocześnie, obsługiwać macierze wykorzystujące te same napędy i równoważyć obciążenie (każdy dysk jest podłączony do dwóch macierzy jednocześnie. W przypadku tanich kontrolerów taka funkcja nie wchodzi w grę, jednak pewnym ratunkiem jest to, że konfiguracja macierzy najczęściej nie jest przechowywana w kontrolerze, lecz w pierwszych sektorach dysków – w razie uszkodzenia kontrolera macierz można przełożyć do innego komputera (z takim samym kontrolerem).
  • Standard Serial ATA wniósł kilka nowości, które nie są jeszcze powszechnie stosowane – to m.in. funkcja Port Selector, pozwalająca na podłączenie jednego dysku do dwóch różnych portów kontrolera, za pomocą oddzielnych kabli. W ten sposób uzyskuje się bardziej niezawodne połączenie między elementami macierzy.
  • Zawsze słabym punktem kontrolerów, szczególnie tych dużych, był bufor zapisu – gdy ma pojemność rzędu setek MB, jego awaria lub nagłe odłączenie zasilania można oznaczać utratę sporej ilości danych. Istnieją przynajmniej dwa sposoby by temu zapobiec – podtrzymanie zawartości bufora za pomocą baterii, która przeważnie może go zasilać przez 3 doby, a także przełączenie bufora w tryb pracy write-through, który informuje system operacyjny o udanym zapisie dopiero wtedy, gdy dane rzeczywiście trafią na dysk (często jest to domyślny tryb pracy kontrolera).
  • Liczne funkcje i standardy monitorowania macierzy, m.in. specyfikacja SAF-TE wykorzystująca dodatkowe komendy SCSI do kontroli temperatury, zasilania i pracy wiatraków, monitorowanie macierzy za pomocą protokołu SNMP czy przez przeglądarkę.

* * *

Niniejszy artykuł właściwie nie wymaga podsumowania – najlepszym komentarzem do teorii są wyniki testów wykonanych na dyskach Serial ATA. Oczywiście na tym temat macierzy się nie kończy – występują one w wielu postaciach, jako podsystemy pamięci masowej montowane bezpośrednio w serwerach, jako samodzielne serwery plików Network Attached Storage, a także jako duże systemy z interfejsami światłowodowymi, pracujące w sieciach Storage Area Network. Wykorzystują nie tylko dyski Serial ATA, ale także SCSI, Serial Attached SCSI i Fibre Channel, a charakterystyka każdego z tych interfejsów jest zupełnie inna. Również kontrolery dają znaczne możliwości konfiguracji dziesiątek różnych parametrów, co wpływa na cechy macierzy. W zależności od tych czynników zakres zastosowań macierzy może być bardzo różny – pewne konfiguracje mają pojemności dziesiątek terabajtów i są budowane tylko po to, by przechowywać kopie zapasowe, inne doskonale pasują do serwerów takich jak ten serwujący strony PCLab.pl, jeszcze inne do pecetów. Okazuje się, że bez RAID coraz trudniej się obejść!