20030825181919, Przemysław Leszczyński


Dyski twarde i macierze dyskowe RAID

Dysk twardy

Dysk twardy jest centrum przechowywania danych każdego komputera, który składa się z:

 

Talerze - na nich fizycznie znajdują się dane,

Silnik napędzający talerze,

Głowice odczytująco - zapisujące,

Pozycjoner głowic.

 

0x01 graphic

0x01 graphic

Talerz jest miejscem wewnątrz dysku, gdzie fizycznie przechowywane są informacje. Wykonany jest z bardzo lekkiego, a jednocześnie bardzo sztywnego materiału, będącego najczęściej stopem aluminium. Materiał ten jest pokrywany warstwa magnetyczna i dopiero na niej można zapisywać impulsy magnetyczne symbolizujące pojedyncze bity. Dzieje się tak pod wpływem wrażliwości materiału, z którego wykonany jest talerz, który pod wpływem działania magnesu zmienia swój stan elektrostatyczny - z minusa na plus i na odwrót. Na pojedynczym talerzu znajdują się współosiowe ścieżki zawierające dane. Każda taka ścieżka podzielona jest dodatkowo na określona liczbę sektorów, typowo o rozmiarze 512 bajtów każdy, które są najmniejszymi pojedynczymi jednostkami dysku. W odniesieniu do dysku twardego właściwie nawet częściej używa się określenia cylinder zamiast ścieżka. Określenie to oznacza zbiór analogicznych ścieżek na odrębnych talerzach. Lokalizując pojedynczy sektor na dysku, musimy podać numer cylindra, numer głowicy i numer sektora. Za pomocą takich współrzędnych można precyzyjnie określić miejsce, z którego chcemy odczytać lub w którym chcemy zapisać informacje.

Większość dysków posiada kilka talerzy, a nie jeden. Oprócz tego każdy z talerzy zapisywany jest dwustronnie. Pozwala to proporcjonalnie zwiększyć pojemność pojedynczej jednostki dyskowej. Każda z powierzchni ma swoja własna głowicę do odczytu/zapisu, dlatego jeśli dysk ma dwa talerze, to jednocześnie posiada cztery głowice.

 

Talerze wirują wokół wspólnej osi napędzane silnikiem. Dysk pracuje ze stałą prędkością obrotową, najczęściej na poziomie ponad 5000 obrotów na minutę. Im większa prędkość obrotowa talerzy, tym szybciej dysk działa, bo przeciętnie musi krócej czekać, aż określony jego fragment znajdzie się pod głowicą.

 

Głowica odczytująco-zapisująca jest jednym z najważniejszych elementów całego dysku. Początkowo głowica dysku twardego nie różniła się zbytnio od głowicy stosowanej w napędach dysków elastycznych. Kawałek metalu z nawiniętym wokół niego drutem generował zmienne sterowane prądem pole magnetyczne, które odpowiednio polaryzowało powierzchnie dysku. Była to głowica ferrytowa. Ewolucja tej technologii była głowica MIG ( Metal In Gap ) pozwalająca zmniejszyć szczelinę, która pozostawiała magnetyczny ślad na nośniku. Zastosowanie głowicy TF ( Thin Film ) pozwoliło jeszcze bardziej zwiększyć upakowanie danych na powierzchni dysku.

Prawdziwym przełomem stały się jednak dopiero głowice magnetorezystywne MR, które są przeznaczone wyłącznie do odczytywania danych. Głowice te używają materiału, który zmienia rezystancję pod wpływem pola magnetycznego, a nie sam generuje prąd. To pozwala odczytywać dokładnie znacznie słabsze impulsy magnetyczne, a w konsekwencji upakować jeszcze bardziej dane na dysku twardym. Do zapisywania danych służy w tym przypadku zwykła głowica TF. Z tego wynika, że tak naprawdę dysk posiadający dwa talerze ma osiem głowic, a nie cztery - po dwie na każda powierzchnie talerza. Taki podział funkcji umożliwił dodatkowo znaczna optymalizacje konstrukcji głowicy TF, ponieważ wszystkie jej cechy mogą być zoptymalizowane wyłącznie pod kątem zapisu.

Aby głowica trafiła dokładnie nad wybrany cylinder, a następnie stała tam nieruchomo zastosowano mechanizm pozycjonujący wykorzystujący sprzężenie zwrotne. Na dysku, na specjalnie przeznaczonych ścieżkach znajdują się zamiast danych specjalne impulsy, które służą do „przywoływania” głowic dokładnie ponad ścieżkę z danymi. Dysk na bieżąco kontroluje te sygnały i koryguje ustawienie silnika ( głowic ).

 

Zadaniem pozycjonera jest przemieszczenie głowic na wybrany cylinder. Pozycjonery zbudowane zostały w oparciu o silnik liniowy, same parkują głowice po wyłączeniu zasilania, gdyż sprężyna samoczynnie odciąga je do położenia parkowania. Pozycjonery z silnikiem krokowym wymagają zaparkowania głowic za pomocą specjalnego programu.

0x01 graphic

Istnieje wiele metod zapisu informacji cyfrowej na nośniku magnetycznym:

Metoda bez powrotu do zera

Polega na tym, że zmiana kierunku prądu w głowicy zapisu następuje w chwili zmiany wartości kolejnych bitów informacji. Zmiana kierunku prądu nie występuje podczas zapisywania ciągu zer lub jedynek. Metoda ta nie posiada możliwości samo synchronizacji, tzn. z informacji odczytanej nie da się wydzielić impulsów określających położenie komórki bitowej.

Metoda modulacji częstotliwości (FM)

Polega na tym, że przy modulacji FM prąd w głowicy zapisu zmienia na początku każdej komórki bitowej, oraz w środku komórki, gdy zapisywany bit ma wartość "jedynki".

Metoda zmodyfikowanej modulacji częstotliwości

Metoda MFM nazywana jest metodą z podwójną gęstością i dzięki niej jest podwojona jest pojemność dysku twardego, stosuje się tu regułę: bit o wartości "1" ustawia impuls zapisujący pośrodku komórki bitowej, bit o wartości "0", ustawia impuls na początku komórki bitowej, lecz tylko wtedy, gdy poprzedni bit nie jest równy "1".
W metodzie tej dla odtwarzania danych, w trakcie odczytu, stosowany jest układ z pętlą synchronizacji fazy PLL, na podstawie impulsów odczytanych z głowicy odczyt o nazwie READ DATA.

Metoda RRL

Redukuje o 35% ilości przemagnesowań nośnika - można zatem, przy niezmienionej maksymalnej częstotliwości pracy, półtorakrotnie zwiększyć gęstość zapisu danych Odczyt informacji polega na przemieszczeniu namagnesowanych odcinków nośnika pod szczeliną.
Pole magnetyczne pochodzące od namagnesowanego odcinka nośnika, przenika rdzeń głowicy i indukuje w cewce siłę elektromotoryczną, która jest następnie wzmacniana i formowana w impuls cyfrowy, taktowany jako impuls zerowy lub jako bit danych, w zależności od metody zapisu informacji.

Napęd dysków twardych łączy się ze systemem mikroprocesorowym (płytą główną) poprzez sterownik dysku twardego za pomocą interfejsów HDD.
Do najczęściej spotykanych interfejsów należą:

Interfejs IDE

Interfejs E-IDE

IDE-AT (Bus Hard Disk Interface) to pierwszy interfejs ze zintegrowanymi układami związanymi ze sterowaniem i transmisją danych. Interfejs posiada 16-bitowa szynę do transmisji informacji, nie może więc być stosowany w komputerach XT. Dla sterowników IDE zarezerwowano tylko dwa obszary (1F0...1F7 i 170...177) w przestrzeni adresowej I/O, dzięki temu system mikroprocesorowy może współpracować z dwoma dyskami twardymi.
Niektóre sterowniki IDE wyposażane są w pamięci Cache, pozwalające zwiększyć szybkość transmisji danych, mogą osiągać pojemności kilku MB. Kontroler te umożliwia podłączenie dwóch dysków na jednym kablu jako Master i Slave o pojemności nie większej niż od 40 do 528 MB.


Interfejs EIDE (ang., Enhanced IDE) funkcjonuje od 1994 roku różni się on od swego poprzednika zwiększoną szybkością przesyłania danych, pokonuje granice 528 MB, obsługuje cztery dyski twarde, może obsługiwać również inne urządzenia np.: CD.-ROM, streamery.
Standard EIDE może obsłużyć cztery dyski twarde za pomocą dwóch adapterów (dwóch kanałów IDE) o adresach IFO-1F7H i poziomie przerwania IRQ14 oraz adresach 170-177H i IRQ15. Adaptery mogą znajdować się na wspólnej karcie lub na kartach oddzielnych. Do każdego kanału można dołączyć dwa urządzenia IDE, które pracują w zwyczajnym systemie jako Master i Slave. 
Cztery dyski twarde pracujące w systemie zachowują następującą kolejność: 

1.Dysk Master - Pierwotny adapter, 
3.Dysk Master - Wtórny adapter ,
2. Dysk Slave - Pierwotny adapter,
4. Dysk Slave - Wtórny adapter

Dla pokonania granicy 528 MB standard EIDE wykorzystuje tzw. Metodę LBA (Logical Block Address), która powoduje przenumerowanie wszystkich sektorów, tzn. dokonuje tzw. Transakcji adresów, zamieniając rzeczywisty numer głowicy, cylindra i sektora na logiczny odpowiednik; odpada więc skomplikowana adresacja za pomocą cylindrów, głowic i sektorów. Metoda ta funkcjonuje w każdym systemie operacyjnym oprócz DOS-a. Alternatywą do metody LBA jest metoda Extended CHS (XCHS), która zezwala na zwiększenie liczby głowic do 255.
Z tego wynika, że BIOS może obsłuży dyski posiadające 64 sektory, 255 głowic i 1024 cylindry, czyli o maksymalnej pojemności do 7,8 GB. Oczywiście w praktyce zakłada się, że liczba głowic nie może by większa niż 16. Jeśli wiec BIOS natrafi na parametr określający liczbę głowic większa niż 16, wtedy przelicz wartości CHS w ten sposób, że dyskowi nie przydziela więcej niż 16 głowic, zwiększa natomiast liczbę cylindrów lub sektorów.

Dysk jest zasilany czteropinowym kablem dostarczającym mu napięcie +5V oraz +12V.

Macierze Dyskowe RAID

Technologia RAID (nadmiarowa macierz niezależnych dysków - ang. Redundant Array Of Independent Disks) stała się potężnym sposobem przyspieszania wydajności podsystemu dyskowego i/lub zwiększania bezpieczeństwa danych. Połączenie kilku małych dysków tak, aby z punktu widzenia systemu stanowiły jeden, nie było problemem. Uzyskiwane w ten sposób parametry eksploatacyjne i ekonomiczne były lepsze niż w przypadku pojedynczych dysków o wielkich pojemnościach.

Dostępne poziomy RAID:

RAID-0

RAID-0 (ang. striping - podział danych, zapis paskowy) jest podstawowa, a zarazem i najszybsza wersja RAID'a. W architekturze tej dane przynależne do jednego logicznego napędu dzieli się na bloki (klastry), które zapisywane są kolejno na wszystkich zainstalowanych dyskach. Bloki przyporządkowywane są do napędów fizycznych poprzez rotacje. Pierwszy blok zapisywany jest na pierwszym dysku, drugi na drugim itd.

0x01 graphic

Architektura RAID 0

(Ciąg danych został podzielony na bloki: Blok 1, ..., Blok 9, a następnie zapisany na zainstalowanych dyskach. Szerokość paska, równa liczbie dysków, wynosi 3 jednostki.)

Pojemność macierzy standardu RAID-0 można wyznaczyć ze wzoru:

Pmacierzy=N*Pdysku
Pmacierzy- pojemność macierzy
N- liczba dysków
Pdysku- pojemność pojedynczego dysku

Zakłada się tutaj, ze dyski maja taka sama pojemność. W przeciwnym przypadku wykorzystuje się na każdym z zainstalowanych dysków tylko taka pojemność, jaka posiada najmniejszy z pracujących w macierzy dysków.

Liczba obsługiwanych przez macierz dysków określana jest mianem szerokości paska (ang. stripe width).

Praca macierzy dyskowej pracującej w standardzie RAID-0 wygląda dosyć ciekawie w przypadku zadania odczytu danych dłuższych niż rozmiar bloku. Realizacją zadania musi się wtedy "zając" kilka dysków. Logiczny rozkaz odczytu (zapisu) generowany przez np. system operacyjny tłumaczony jest na ciąg fizycznych rozkazów generowanych przez kontroler RAID. Zadania te są kolejno (szeregowo) rozsyłane do poszczególnych dysków. Ich realizacja przebiega jednak współbieżnie. Odczyt danych z macierzy wymusza jednocześnie uruchomienie odpowiednich procedur scalania danych pochodzących z poszczególnych dysków w informacje logiczna oczekiwana przez użytkownika (przyp., w przypadku zapisu - dzielenia informacji). Takie podejście zapewnia wymagana "przezroczystość" dla końcowego użytkownika (programu) - macierz dyskową "widzi" on jako zwykły dysk.

0x01 graphic

Odczyt danych

(Przy odczycie sekwencyjnym, wszystkie dyski pracują współbieżnie. Wynikowa szybkość transmisji stanowi sumę szybkości poszczególnych dysków.)

Wydawać by się mogło, ze równoległą realizacja zadań odczytu (zapisu) w każdym przypadku powoduje końcowy wzrost wydajności. Niestety nie jest to prawda. Wyznacznikiem jest rozmiar klastra (bloku). Poniżej pewnego przyjętego rozmiaru klastra wzrost wydajności systemu na pewno nie wystąpi; powyżej pewnego rozmiaru wzrost takowy wystąpić może, aczkolwiek nie musi (patrz niżej). Wynika to z bardzo prostego faktu. Każda transmisja danych (do lub z każdego dysku) musi zostać poprzedzona wysłaniem szeregu rozkazów do dysku - ustaleniem parametrów transmisji. W przypadku najczęściej stosowanych dysków typu SCSI jest to zazwyczaj od 4 do 7 rozkazów - co tez wymaga pewnego, niezależnego od długości transmisji czasu. Dla małych ilości transmitowanych danych (czyli dla małego rozmiaru klastra) może dojść do sytuacji, w której czas potrzebny na ustanowienie transmisji będzie większy od czasu właściwej transmisji. Dla typowo stosowanych dysków rozgraniczający rozmiar klastra to 4¸ 8kB. W wypadku zastosowania mniejszego rozmiaru wydajność macierzy znacznie spadnie (czas wysyłania rozkazów będzie dominować), w przypadku zastosowania większych klastrów wydajność może wzrosnąć (czas transmisji będzie dominować).

Jednoczesne uaktywnienie wielu dysków owocuje znacznym wzrostem wydajności. Łatwo jest to stwierdzić, gdy czynnikiem ograniczającym wydajność jest szybkość transmisji z lub do pojedynczego dysku. Różnice te dobrze widać przy odczycie sekwencyjnym. Występuje wtedy pomijalnie mała strata czasu na przemieszczanie i pozycjonowanie głowic dysków. Przy odczycie sekwencyjnym dyski pracują z maksymalna wydajnością tzn. ilość danych wysyłanych na zewnątrz dysku jest dla danego dysku maksymalna (maximal transfer rate). Zakładając dalej, iż dyski pracują w sposób równoległy (tzw. równoległą obsługą zadań), można przyjąć, ze wynikowy transfer danych jest w przybliżeniu suma transferów poszczególnych dysków.

Wzrost wydajności występuje także w przypadku odczytu losowego (ang. random access). Czas wykonania całej operacji wejscia-wyjscia (dla danego dysku) zdominowany jest wtedy przez czas przemieszczania i pozycjonowania głowic dysku. Czas transmisji danych stanowi, w tym przypadku, zaledwie ok. 2% czasu całej operacji (średnio). Dyski nie pracują wiec z maksymalna wydajnością. Pamiętać należy tutaj jednak, ze nawet nowoczesne dyski twarde są w stanie obsłużyć co najwyżej 100 losowych operacji wejscia-wyjscia na sekundę. Ograniczenie to powoduje, iż nadchodzące zadania (odczytu, zapisu) musza być kolejkowane. W efekcie wiec, realizowane są z pewnym, zależnym od długości kolejki, opóźnieniem. Architektura RAID-0 z samego założenia powoduje, ze logicznie ciągła informacja (np. plik) jest dzielona na kawałki i zapisywana na każdym dysku należącym do macierzy. Dochodząca do tego równoległa praca dysków daje efekt podzielenia jednej logicznej kolejki zadań (odczytu, zapisu) przypisanej do macierzy na szereg mniejszych kolejek przypisanych do każdego dysku macierzy. Kolejki te mogą być wiec opróżniane współbieżnie, a co się z tym wiąże, czas ich realizacji jest znacznie mniejszy niż w przypadku klasycznym tzn. obsługi tylko przez jeden dysk. Rozwiązanie takie posiada jednak w przypadku odczytu losowego pewna, dosyć uciążliwą wadę. Uzyskiwana wydajność, mierzona jako np. liczba odczytywanych klastrów na sekundę, nie ma wartości stałej, a inaczej mówiąc jest niestabilna. Zazwyczaj bowiem rozkład zadań (odczytu, zapisu) nie jest równomierny tzn. kolejki przypisane poszczególnym dyskom nie są sobie równe. Bardzo często dochodzi do sytuacji, w której większość odwołań skierowanych jest do jednego (ciągle tego samego) dysku.

W przypadku jednorazowego odczytu (zapisu) tylko jednego klastra nie występuje jakakolwiek zmiana wydajności. Odczyt (zapis) realizowany jest jednorazowo i tylko przez jeden dysk. Uzyskana wydajność jest wiec wydajnością dysku, który te operacje wykonuje.

Z punktu widzenia bezpieczeństwa danych architektura RAID-0 nie jest niestety rozwiązaniem bezpiecznym. Spójność informacji uzależniona jest bowiem od każdego dysku pracującego w systemie. W przypadku awarii któregokolwiek z nich, informacja jest bezpowrotnie tracona, gdyż nie istnieje jakakolwiek (zaimplementowana w architekturze) możliwość jej odtworzenia. Niezawodność systemu dyskowego opartego na architekturze RAID-0 maleje wiec tyle razy, ile jest w nim zainstalowanych dysków.

0x01 graphic

Uszkodzenie dysku macierzy

Uszkodzenie jednego z dysków macierzy całkowicie uniemożliwia poprawny odczyt informacji. (Dane są bezpowrotnie tracone.)

RAID-1
Standard RAID 1 znany jest przede wszystkim jako zapis lustrzany (ang. mirroring). W architekturze tej dane przynależne do jednego logicznego napędu przechowywane są jednocześnie (w takiej samej postaci) na dwóch dyskach. Ten koncepcyjnie prosty system jest jednak dosyć drogi w eksploatacji. Wada jest bowiem wykorzystanie tylko polowy sumarycznej pojemności zainstalowanych dysków.

0x01 graphic

Architektura RAID 1

Ciąg danych został zapisany na bloki: Blok1,...,Blok3, a następnie zapisany na obu dyskach macierzy.)

Pojemność użytkową macierzy można obliczyć ze wzoru:

Pmacierzy = ( N * Pdysku ) / 2

Pmacierzy - pojemność macierzy
N - liczba dysków
Pdysku - pojemność pojedynczego dysku

Zakłada się tutaj, ze dyski maja taka sama pojemność. W przeciwnym wypadku wykorzystuje się (na każdym z dysków) pojemność równa najmniejszej spośród zainstalowanych w macierzy dysków: Pdysku=min(Pdysk1,Pdysk2,...,PdyskN), gdzie Pdysk1,Pdysk2,...,PdyskN - pojemności poszczególnych dysków.

Macierz pracująca w standardzie RAID-1 oferuje dosyć dobra wydajność odczytu danych. Wynika to z niskiego stopnia obciążenia poszczególnych dysków. Pojedyncze odczyty danych odbywają się w sposób tradycyjny - obsługiwane są tylko przez jeden dysk. Zachowanie macierzy wygląda odmiennie w przypadku serii odczytów sekwencyjnych lub losowych. Macierz pracuje wtedy jako pamięć wielodrożna. Dla dwóch dysków w systemie jako dwudrożna itd. Zadanie odczytu bloku danych może być wiec wykonane na dwa sposoby: przez pierwszy lub przez drugi dysk itd. W celu wykorzystania tego udogodnienia definiuje się kilka metod dostępu do danych zapisanych na macierzy.

Większość implementacji oferuje możliwość wyboru strategii odczytu danych. Jest to zazwyczaj metoda karuzelowa (ang. round robin) lub wybieranie geometryczne (ang. geometric scheduling).

Metoda karuzelowa powoduje, ze po trafieniu (ang. hit) przy odczycie z jednego dysku kolejny odczyt wykonywany jest z innego (kolejnego) dysku macierzy. Skutkuje to mniejszym obciążeniem poszczególnych dysków i daje dobre rezultaty przy odczycie losowym. Zawodzi jednak przy odczycie sekwencyjnym. Nieustanne przełączanie się miedzy dyskami wpływa bowiem niekorzystnie na zaimplementowane sprzętowo (w kontrolerze każdego dysku) algorytmy optymalizacji odczytu.

W przypadku wybierania geometrycznego macierz (zespól dysków) dzielona jest na regiony. Każdy region obsługiwany jest przez inny dysk. Przykładowo macierz dwudrożna może automatycznie przekazywać pierwszemu dyskowi wszystkie odwołania do danych znajdujących się w pierwszej połowie dysku logicznego; pozostałe odwołania - drugiemu. Zaleta jest mniejsze obciążenie dysków i w efekcie wzrost ilości transmitowanych danych. Wada takiego rozwiązania jest jednak oczywista. Wybieranie geometryczne zawodzi w chwili, gdy najczęściej używane dane znajdują się np. na pierwszej połowie dysku. W takim przypadku tylko jeden napęd zajmuje się realizacja żądań odczytu i w efekcie macierz pracuje z jego wydajnością.

Wydajność zapisu danych nie jest niestety silna strona architektury RAID-1. Standard wymusza bowiem zapis danych jednocześnie na dwóch dyskach. Logiczna operacja zapisu trwa aż do momentu zakończenia jej przez oba dyski. Nie oznacza to wcale, ze trwa dwa razy dłużej niż tradycyjnie. Rozkazy zapisu rozsyłane są do dysków szeregowo, sam zapis przebiega już jednak współbieżnie. W rezultacie trwa o około 15-20% dłużej niż w przypadku zapisu na pojedynczy dysk.

W przypadku awarii któregokolwiek z dysków macierz zaczyna pracować w tzw. trybie zdegradowanym (ang. degraded mode). Wadliwy dysk wyłączany jest automatycznie, a role głównego nośnika danych przejmuje drugi (sprawny) napęd. Wydajność macierzy równa jest wtedy wydajności tego właśnie dysku.

Proces rekonstrukcji macierzy rozpoczyna się automatycznie po wymianie uszkodzonego napędu na sprawny. Polega on oczywiście na przekopiowaniu danych z sąsiedniego napędu. Rekonstrukcja może się odbywać równolegle z normalna praca systemu skutkując czasowym obniżeniem jego wydajności.

0x01 graphic

Rekonstrukcja danych

(Po uszkodzeniu napędu (Dysk 2), główną role przejmuje pozostały sprawny dysk. Po usunięciu awarii (prawa strona), rozpoczyna się przekopiowywanie danych.)

RAID 0+1

Architektura ta stanowi kombinacje rozwiązań z poziomów 0 i 1, czyli striping danych na lustrzanych dyskach. Dziedziczy wiec wszystkie zalety i wady powyższych standardów - jest rozwiązaniem bardzo efektywnym, jeśli chodzi o szybkość i bezpieczeństwo danych. Jest tez niestety rozwiązaniem wysoce kosztownym.

Dane (podobnie jak w RAID-0) po podzieleniu na bloki zapisywane są naprzemiennie na wszystkich zainstalowanych dyskach. Każdy z tych dysków posiada swój duplikat (ang. mirror), czyli każdy blok zapisany jest jednocześnie na dwóch dyskach.

0x01 graphic

Architektura RAID 0+1

(Ciąg danych został podzielony na bloki: Blok1, ..., Blok 6. Format zapisu jest analogiczny do stosowanego w RAID-0 - zapis paskowy wykonany na napędach: Dysk 1 oraz Dysk 2. Dodatkowo każdy pasek posiada swój duplikat - na napędach Dysk 3 oraz Dysk 4.)

Pojemność użytkową macierzy można obliczyć ze wzoru:

Pmacierzy = ( N * Pdysku ) / 2

Pmacierzy - pojemność macierzy
N - liczba dysków
Pdysku - pojemność pojedynczego dysku

Zakłada się tutaj, ze dyski maja taka sama pojemność. W przeciwnym wypadku wykorzystuje się (na każdym z dysków) pojemność równa najmniejszej spośród zainstalowanych w macierzy dysków: Pdysku=min(Pdysk1,Pdysk2,...,PdyskN), gdzie Pdysk1,Pdysk2,...,PdyskN - pojemności poszczególnych dysków.

Brak występujących w RAID-1 różnych metod dostępu do danych nie wpływa ujemnie na wydajność macierzy. Zapis paskowy danych (striping) korzystnie wpływa na szybkość odczytu sekwencyjnego, natomiast wielodrożnosc macierzy (wynikająca z zapisu lustrzanego) sprzyja odczytom losowym.

Zapis danych, z tych samych powodów co w architekturze RAID-1, jest o około 15-20% wolniejszy niż w przypadku zapisu danych na pojedynczy dysk.

RAID 2

Architektura, podobnie jak RAID-0, implementuje podział danych (striping). Jedyna różnica w stosunku do RAID-0 jest wielkość podziału - w tym przypadku podział danych następuje na poziomie bitów. Dodatkowo, dla większego bezpieczeństwa, dane mogą być przechowywane jednocześnie na kilku nośnikach (mirroring) bądź tez może dla nich być wyznaczana informacja kontrolna - parzystość. Ostatni przypadek stanowi podwaliny standardu RAID-3.

Technologia RAID-2 implementowana była przez pewien czas w architekturze pamięci RAM. Nie była natomiast stosowana przy realizacji macierzy dyskowych. Przyczyna jest, wynikająca z jednostki podziału danych, dosyć niska wydajność oraz, co się z tym także wiąże, dość duże koszty realizacji.

RAID 3

Architektura RAID-3 stanowi rozszerzenie architektury RAID-0. Dane, podobnie jak w RAID-0, zapisywane są naprzemiennie na zainstalowanych dyskach (ang. striping), a dodatkowy dysk służy do przechowywania informacji kontrolnej - parzystości. Napędu tego nie uwzględnia się przy określaniu szerokości paska (patrz RAID-0). Parzystość wyznaczana jest oddzielnie dla każdego paska.

Pojemność elementarnego klastra (bloku) w standardzie RAID-3 wynosi jeden bajt lub jedno słowo.

0x01 graphic

Architektura RAID 3

(Ciąg danych został podzielony na bloki: Blok1,...,Blok9. Sposób zapisu jest analogiczny do stosowanego w RAID-0, czyli zapis paskowy. Dodatkowo na napędzie Dysk4 przechowywana jest informacja o parzystości każdego paska.)

Pojemność użytkową macierzy można obliczyć ze wzoru:

Pmacierzy = ( N - 1 ) * Pdysku

Pmacierzy - pojemność macierzy
N - liczba dysków
Pdysku - pojemność pojedynczego dysku.

Zakłada się tutaj, ze dyski maja taka sama pojemność. W przeciwnym wypadku wykorzystuje się (na każdym z dysków) pojemność równa najmniejszej spośród zainstalowanych w macierzy dysków: Pdysku=min(Pdysk1,Pdysk2,...,PdyskN) , gdzie Pdysk1,Pdysk2,...,PdyskN - pojemności poszczególnych dysków.

Do wyznaczenia parzystości danego paska wykorzystuje się funkcje XOR, której argumentami są zawartości wszystkich należących do danego paska klastrów. Przykładowo dla paska zawierającego 4 kalstry (b1, ...,b4): parzystość = b1 xor b2 xor b3 xor b4.

Wykorzystywana funkcja XOR posiada jedna bardzo ważną własność: jest funkcja odwracalna. Pozwala wiec wyznaczyć zawartość utraconego klastra na podstawie informacji o parzystości oraz zawartości wszystkich pozostałych klastrów (w ramach jednego paska oczywiście). Przykładowo utracona zawartość klastra b2 można wyznaczyć ze wzoru:

b2 = parzystość xor b1 xor b3 xor b4.

Wyznaczanie parzystości jest procesem szybkim. W typowo stosowanych macierzach zajmuje mniej niż milisekundę (dla 8kB danych) - nie wpływa wiec znacząco na końcowa wydajność.

Systemy oparte na architekturze RAID-3 oferują aplikacjom wykorzystującym odczyt sekwencyjny bardzo wysoka wydajność. Działanie macierzy w takim przypadku jest analogiczne do działania macierzy typu RAID-0. Równoległa praca zainstalowanych dysków daje, w końcowym efekcie, wzrost ilości odczytywanych i przesyłanych danych. Podobny efekt można również zaobserwować przy odczycie losowym.

W trakcie normalnej pracy (odczyt) dysk zawierający informacje o parzystości nie jest wykorzystywany. Odczyt z tego napędu występuje tylko i wyłącznie w przypadku błędu odczytu z któregokolwiek z pozostałych dysków macierzy. Na podstawie informacji o parzystości wyznacza się wtedy oryginalna zawartość uszkodzonego klastra. Należy jednak nadmienić, ze warunkiem koniecznym dla przeprowadzenia tego procesu jest odczytanie wszystkich pozostałych klastrów należących do danego paska. Przykładowo dla systemu składającego się z trzech dysków służących do przechowywania danych i jednego dysku do przechowywania parzystości (3+1) proces "odzyskiwania" uszkodzonego klastra wymusi (oprócz nieudanej próby jego odczytu) odczyt 2 klastrów z pozostałych dysków z danymi oraz klastra z informacja o parzystości. Końcowym efektem będzie wiec (oprócz poprawnego odczytu) zauważalny spadek wydajności macierzy.

0x01 graphic

Tryb zdegradowany

(W celu wyznaczenia uszkodzonego bloku należy wykonać serie odczytów pomocniczych z pozostałych, sprawnych dysków. Obniża to oczywiście wydajność całego systemu.)

Słabym punktem architektury RAID-3 jest dosyć mała wydajność w trakcie zapisu informacji, zwłaszcza w trakcie zapisu losowego. Przyczyna tego faktu tkwi w fizycznej organizacji samej macierzy. Jakikolwiek bowiem zapis na dysk z danymi wymusza automatycznie odwołanie się do dysku z informacja o parzystości (w celu uaktualnienia). Zważywszy na fakt, ze architektura RAID-3 definiuje tylko jeden taki dysk, można powiedzieć, ze staje się on niejako "wąskim gardłem" systemu. Przykładowo wiec w trakcie sekwencyjnego zapisu czterech klastrów w systemie z czterema dyskami dla danych i jednym dla przechowywania parzystości wystąpi po jednym odwołaniu do dysków z danymi oraz aż cztery odwołania do dysku z parzystością. Zakładając, ze zapis danych na owych czterech dyskach przebiega współbieżnie, a czterokrotny proces aktualizacji parzystości musi być przeprowadzany sekwencyjnie (w celu zapewnienia spójności danych) można łatwo zauważyć, ze zapis właściwych danych zakończy się znacznie wcześniej niż. zapis parzystości.

RAID 5

Poważną wada architektury RAID-3 jest zbyt duże obciążenie dysku z informacja o parzystości. Każdy zapis danych wymusza również zapis i na tym dysku, co skutecznie obniża wydajność systemu.

Technologia RAID-5 omija to nieudogodnienie. Informacja o parzystości umieszczana jest dla kolejnych pasków w różnych lokacjach. Dla pierwszego paska na ostatnim dysku, dla drugiego - na przedostatnim itd.

0x01 graphic

Architektura RAID 5

(Dane po podzieleniu na bloki: Blok1, ..., Blok9, zostały zapisane na zainstalowanych dyskach. Format zapisu jest podobny do stosowanego w RAID-3.Róznica polega jedynie na zmiennym położeniu bloku zawierającego informacje o parzystości paska.)

Pojemność użytkowa macierzy wylicza się identycznie jak w przypadku macierzy typu RAID-3.

W przypadku bezbłędnego odczytu danych nie wykorzystuje się informacji o parzystości paska (analogicznie jak i w RAID-3). Dopiero błąd operacji wymusza odczyt i dalsza interpretacje, czyli przeprowadzenie procesu rekonstrukcji danych. Podstawowym warunkiem wyznaczenia oryginalnej zawartości uszkodzonego klastra jest, podobnie jak w RAID-3, odczytanie zawartości wszystkich pozostałych klastrów należących do danego paska (wraz z parzystością). Ujemne, ze względów czasowych, skutki takiej operacji da się łatwo zaobserwować dla systemów składających się z dużej ilości dysków. Przykładowo wiec dla systemu zawierającego 30 dysków wykonane zostanie aż 29 odczytów, co znacznie obniży jego wydajność. Specyfika architektury RAID-5 (RAID-3) powoduje, ze czas zapisu informacji do macierzy także zależy od ilości zainstalowanych dysków, a dokładniej - od szerokości paska. Przyczyna tego stanu tkwi w samym algorytmie wyznaczania parzystości. Wymusza on bowiem odczyt wszystkich klastrów należących do danego paska, a co za tym idzie, im dłuższy jest pasek, tym dłużej trwa ten proces. Te właśnie względy powodują, ze nie implementuje się macierzy o długości paska przekraczającej 6 jednostek.

Wydajność odczytu z macierzy wykonanej w technologii RAID-5 osiąga wartość maksymalna w przypadku odczytu sekwencyjnego. Sposób odczytu danych jest wtedy analogiczny do sposobu odczytu danych z macierzy typu RAID-0. Podział informacji umożliwia równoległą prace dysków wchodzących w skład macierzy, co skutkuje zwiekszeniem wartosci efektywnej transmisji. Równiez w przypadku odczytu losowego (podobnie jak w RAID-0) da sie zaobserwowac pewien wzrost wydajnosci wynikajacy z rozdzielenia (na poszczególne dyski) zadań odczytu.

Zapis danych, ze względów oczywistych, wygląda odmiennie niż w architekturze RAID-0. Wydajność zapisu nie jest niestety silna strona technologii RAID-5. Czynnikiem ograniczającym jest czas trwania, składającego się z całej serii odczytów pomocniczych, procesu wyznaczania parzystości.

W architekturze RAID-5 zaimplementowano zasadę ciągłego zachowania spójności danych (ang. data integrity). Przykładowo, gdyby po zapisaniu bloku danych a przed aktualizacja parzystości paska doszło do awarii zasilania, to po usunięciu awarii parzystość nie odpowiadałaby prawdziwej zawartości paska. W celu uniknięcia tej katastroficznej sytuacji większość systemów wykorzystuje dwustopniowy protokół aktualizacji danych. Zapis informacji w takim systemie wygląda następująco:

1. Współbieżnie, ze wszystkich dysków należących do danego paska, odczytuje się zawartości wszystkich bloków

2. Wylicza się nowa wartość bloku parzystości (proces ten jest bardzo szybki w porównaniu z czasem odczytu danych w pkt.1).

3. Parzystość wraz z zawartością (nowa) modyfikowanego bloku oraz dodatkowo identyfikator (numer) paska, którego dotyczy ta informacja, zapisuje się w specjalnym obszarze systemowym (ang. log area). W celu zachowania spójności cały proces realizuje tylko jedna operacja wejscia-wyjscia. Na podstawie tych danych można, po ewentualnej awarii, przeprowadzić proces uaktualnienia zawartości paska.

4. Modyfikuje się zawartość macierzy - dane oraz parzystość. Zapis na dwóch dyskach przebiega współbieżnie.

5. Po zakończeniu operacji z pkt. 4 unieważnia się informacje zapisana w obszarze systemowym (pkt. 3).

W każdym z powyższych kroków operacje wejscia-wyjscia realizowane są współbieżnie. Zachowanie pełnej spójności danych nie pozwala jednak na współbieżne wykonywanie poszczególnych kroków (zwłaszcza z pkt. 3 i 4). Kolejny krok rozpoczyna się wiec w momencie zakończenia poprzedniego.

Ujemne efekty zastosowania dwustopniowego protokołu aktualizacji danych są oczywiste. Jedna logiczna operacja zapisu rozrasta się nagle do całego szeregu operacji odczytu i zapisu, co skutkuje znacznym, bo średnio o ok. 60%, spadkiem wydajności systemu.

Zastosowanie pamięci nielotnej (ang. non-volatile memory), która służy do tymczasowego przechowywania modyfikowanego bloku wraz z parzystością paska (patrz pkt. 3), pozwala znacznie przyśpieszyć operacje zapisu. Źródło zysku tkwi oczywiście w szybkości działania samej pamięci. Zapis danych do pamięci zajmuje max. 0,5 milisekundy, natomiast w przypadku dysku - ok. 5-12 milisekund. Zastosowanie pamięci pośredniczącej wprowadza jeszcze jeden dodatkowy efekt: możliwość unieważniania zapisu. Pamięć nielotna pracuje wtedy jako pamięć o opóźnionym zapisie (ang. lazy write), bądź tez jako pamięć podręczna w trybie zapisu zwrotnego (ang. write back). Przykładowo wiec, cala seria zapisów do danego paska nie wymusza ciągłego zapisywania i odczytywania informacji o jego parzystości. Pierwsza operacja zapisu wygeneruje wpis parzystości do pamięci, drugi zapis wymusi jej odczyt z pamięci, następnie jej unieważnienie i wpisanie (po wyznaczeniu) nowej wartości itd. Zapis danych z pamięci nielotnej na dysk występuje automatycznie po określonym czasie od jej ostatniej modyfikacji (w trybie zapisu opóźnionego - ang. lazy write), bądź tez w przypadku zadania jej zwolnienia (w trybie zapisu zwrotnego - ang. write back).

Specyficznym rodzajem pracy macierzy jest praca w trybie zdegradowanym, czyli po uszkodzeniu jednego z jej dysków. Podobnie jak w pozostałych architekturach niesprawny napęd automatycznie odłączany jest od macierzy. Dane na nim zawarte staja się teoretycznie niedostępne, praktycznie jednak wyznaczane są na podstawie informacji o parzystości (opis wyżej). Macierz zdegradowana pracuje wiec w trakcie odczytu z bardzo silnie obniżoną wydajnością. Sytuacja taka nie występuje natomiast w przypadku zapisu danych do macierzy. Proces ten jest, z samej natury, długotrwały - limitowany czasem wyznaczania i zapisu parzystości. Uszkodzenie jednego napędu nie wpływa zasadniczo na przebieg zapisu danych. Uszkodzony napęd omijany jest po prostu przy zapisie danych do paska, gdyż odpowiadające mu dane mogą być wyznaczone na podstawie parzystości.

Wymiana uszkodzonego napędu na sprawny może się odbywać w trakcie normalnej pracy systemu (bez potrzeby jego wyłączania). Automatycznie po wymianie rozpoczyna się proces rekonstrukcji macierzy. Nowy dysk zapełniany jest sukcesywnie danymi wyznaczonymi na podstawie parzystości. Rekonstrukcja jest procesem bardzo czasochłonnym - składa się przecież z całej serii odczytów danych z pozostałych dysków. Powoduje to znaczne obniżenie i tak już dosyć niskiej (z powodu degradacji) wydajności macierzy.

Należy tutaj nadmienić, ze macierz pracującą w trybie zdegradowanym, oprócz mniejszej wydajności, zapewnia przede wszystkim mniejsze niż zwykle bezpieczeństwo przechowywanych danych. Z tych właśnie względów uszkodzony dysk macierzy należy bezzwłocznie wymieniać na nowy.



Wyszukiwarka