Szukaj razy
Problem polega na tym, że wzmocnienie wyszukiwania zapisu zachowuje się zupełnie inaczej niż wzmocnienie przepustowości zapisu . Minimalne wzmocnienie przepustowości zapisu z parzystością występuje, gdy cały pasek jest zapisywany jednocześnie (nazwijmy to przymiotnikiem „pełnym paskiem”), jednak minimalne wzmocnienie wyszukiwania zapisu występuje odwrotnie, gdy cały zapis po wyszukiwaniu w urządzeniu wirtualnym pasuje do pojedynczy kawałek. Zanim przejdziemy do szczegółów, relacje są znacznie łatwiejsze do przekazania w formie tabelarycznej:
RAID | write throughput amplification factor | write seek amplification factor
| full-stripe (e.g.) | single-chunk | full-stripe | single-chunk
0 | 1 ; 1 | 1 ; 1 | n ; 12 | 1 ; 1
1 | n ; 12 | n ; 12 | n ; 12 | n ; 12
5 | n/(n - 1) ; ~1.1 | min [3, n] ; 3 | n ; 12 | min [3, n] ; 3
6 | n/(n - 2) ; 1.2 | min [5, n] ; 5 | n ; 12 | min [5, n] ; 5
*1+0 | n₁ ; 3 | n₁ ; 3 | n ; 12 | n₁ ; 3*
1+5 | n/(n₅ - 1) ; 2.4 | expr₁ ; 5 | n ; 12 | expr₁ ; 5
*1+6 | n/(n₆ - 2) ; 3 | expr₂ ; 8 | n ; 12 | expr₂ ; 8*
expr₁ = 2n₁ + min [1, n₅ - 2]
expr₂ = 3n₁ + min [2, n₆ - 3]
gdzie n jest całkowitą liczbą dysków, n₁ jest liczbą dysków w grupach RAID 1, a n₅ i n₆ są liczbą grup odpowiednio w macierzach RAID 5 lub RAID 6. Przykłady dotyczą przykładu z 12 dyskami w pytaniu (odpowiednie wiersze to „ *bolded*
”); przykładami poziomów RAID 1 + 0, 1 + 5, 1 + 6 są odpowiednio 4 × 3, 6 × 2, 6 × 2.
Należy zauważyć, że tylko współczynnik wzmocnienia przepustowości zapisu pełnego paska jest bezpośrednio związany z proporcją redundancji. Przypadki jednoczęściowe są bardziej skomplikowane dla osób z parzystością. Powstają, ponieważ napisanie pojedynczego fragmentu wymaga odczytu, który jest najłatwiejszy z fragmentów parzystości lub innych fragmentów danych, przed zapisaniem fragmentów parzystości wraz z nowym fragmentem danych. (Nie są one bezpośrednio zwielokrotniane, ponieważ indukowane odczyty należy zamiast tego pomnożyć przez odpowiedni współczynnik przepustowości odczytu / wzmocnienia amplifikacji dla RAID 1, oba równe 1; patrz poniżej.)
Niestety wybranie wielkości fragmentu, która minimalizuje to dodatkowe zwiększenie przepustowości zapisu, ma efekt uboczny polegający na maksymalizacjiwzmocnienie poszukiwania zapisu. W przypadku drobnych zapisów z pomijalnym czasem zapisu w porównaniu z czasem wyszukiwania wydajność zapisu w przypadku bardzo małych rozmiarów fragmentu (w celu uzyskania pełnego paska) wynosi tylko 1 ×, podobnie jak w przypadku kopii lustrzanej, ponieważ wymaga, aby wszystkie dyski próbowały części dla każdego zapisu i uzyskana przepustowość z mobilizacji wszystkich tych dysków są nieistotne. Dzielił stosunek czasu zapisu do szukania czasu przez liczbę dysków w macierzy, ale w przypadku małych zapisów było to już znikome. Nie ma sensu używać tak małego fragmentu, aby nawet najmniejsze zapisy były pełne. W przypadku pism wystarczająco małych, aby wyczuć efekty wyszukiwania, najlepiej pasować do jednego kawałka.
RAID | large contiguous write throughput | concurrent tiny writes throughput
| full-stripe | single-chunk | full-stripe | single-chunk
0 | n× ; 12× | n× ; 12× | 1× ; 1× | n× ; 12×
1 | 1× ; 1× | 1× ; 1× | 1× ; 1× | 1× ; 1×
5 | (n - 1)× ; 11× | max[n/3, 1]×; 4× | 1× ; 1× | max[n/3, 1]×; 4×
6 | (n - 2)× ; 10× | max[n/5, 1]×; 2.4× | 1× ; 1× | max[n/5, 1]×; 2.4×
*1+0 | n₀× ; 4× | n₀× ; 4× | 1× ; 1× | n₀× ; 4× *
1+5 | (n₅ - 1)×; 5× | expr₃× ; 2.4× | 1× ; 1× | expr₃× ; 2.4×
*1+6 | (n₆ - 2)×; 4× | expr₄× ; 1.5× | 1× ; 1× | expr₄× ; 1.5×*
expr₃ = n/(2n₁ + min [1, n₅ - 2]) = max [n/(2n₁ + 1), n/(2n₁ + n₅ - 2)]
expr₄ = n/(3n₁ + min [2, n₆ - 3]) = max [n/(3n₁ + 2), n/(3n₁ + n₆ - 3)]
Uwaga: środkowe 2 kolumny przepustowości można zignorować, biorąc pod uwagę rozsądny rozmiar fragmentu, który jest większy niż zapisów, dla których czas wyszukiwania jest znaczący, ale wystarczająco mały, aby duże zapisy były pełne. Duży fragment drugiej kolumny przepustowości jest bardziej zbliżony do dysków łączonych. „Mały” zapis oznacza, że efekt przepustowości jest znikomy.
Posiadanie nieodpowiednio małego fragmentu zwiększa również efekt wzmocnienia wyszukiwania dla odczytów, choć nie tak bardzo i tylko w przypadku pełnego paska.
RAID | read throughput amplification factor | read seek amplification factor
| full-stripe | single-chunk | full-stripe (e.g.) | single-chunk
0 | 1 | 1 | n to n; 12 | 1
1 | 1 | 1 | 1 to n; 1–12 | 1
5 | 1 | 1 | n - 1 to n; 11–12 | 1
6 | 1 | 1 | n - 2 to n; 10–12 | 1
*1+0 | 1 | 1 | n₀ to n; 4–12 | 1 *
1+5 | 1 | 1 | n₅ - 1 to n; 5–12 | 1
*1+6 | 1 | 1 | n₆ - 2 to n; 4–12 | 1 *
Uwaga: „do n” jest spowodowane tym, że gdy jednocześnie odbywa się tylko jeden odczyt, teoretycznie możliwe jest zmobilizowanie wszystkich dysków w celu znalezienia odpowiednich miejsc i zbiorowego odczytu danych w celu uzyskania maksymalnej dużej ciągłej przepustowości odczytu.
RAID | large contiguous read throughput | concurrent tiny reads throughput
| full-stripe (e.g.)| single-chunk | full-stripe | single-chunk
0 | n× ; 12× | n× ; 12× | 1× ; 1× | n× ; 12×
1 | n× ; 12× | n× ; 12× | n× ; 12× | n× ; 12×
5 | n× ; 12× | n× ; 12× | n/(n - 1)× ; ~1.1× | n× ; 12×
6 | n× ; 12× | n× ; 12× | n/(n - 2)× ; 1.2× | n× ; 12×
*1+0 | n× ; 12× | n× ; 12× | n₁× ; 3× | n× ; 12×*
1+5 | n× ; 12× | n× ; 12× | n/(n₅ - 1)× ; 2.4× | n× ; 12×
*1+6 | n× ; 12× | n× ; 12× | n/(n₆ - 2)× ; 3× | n× ; 12×*
Uwaga: Ponownie środkowe 2 kolumny przepustowości można zignorować, biorąc pod uwagę rozsądny rozmiar porcji. Trzecia kolumna przepustowości jest ponownie ściśle związana z proporcją redundancji.
Jednak wystarczająco duży rozmiar fragmentu oznacza, że małe odczyty nigdy nie są pełne. Biorąc pod uwagę efektywną implementację i odpowiedni rozmiar porcji, wydajność odczytu powinna być proporcjonalna do liczby identycznych dysków, jeśli nie ulegnie pogorszeniu.
Tak naprawdę „współczynnik wzmocnienia” jest o wiele bardziej skomplikowany niż wzór w pytaniu, w którym rozważano jedynie pełne zwiększenie przepustowości. W szczególności wydajność zapisu 6 × 2 RAID 1 + 6 dla równoczesnych zapisów, które są na tyle małe, że można je wyszukać, będzie gorsza niż wydajność 4 × 3 RAID 1 + 0. A w przypadku niewielkich zapisów, które są poszukiwane, wydajność może wynosić tylko około 3 z 4 × 3 RAID 1 + 0 w najlepszym przypadku (tj. Przy doskonałej implementacji).
Po wyjaśnieniu tego problemu porównanie 12 dysków nie ma bezpośredniego zwycięzcy:
| 4×3 RAID 1+0 | 6×2 RAID 1+6
number of identical 1TB drives | 12 | 12
storage capacity | 4TB | 4TB
redundancy proportion | 2/3 | 2/3
large contiguous write throughput | 4× | 4×
large contiguous read throughput | 12× | 12×
concurrent tiny writes throughput |*4× | 1.5×
concurrent tiny reads throughput | 12× | 12×
safe number of random drive loses | 2 |*5
12 - 1 large write throughput | 4× | 4×
12 - 1 large read throughput | 8× |*11×
12 - 1 tiny writes throughput |*4× | ~1.42×
12 - 1 tiny reads throughput | 8× |*~9.33×
can split-off a copy for backup | yes[1] | yes[1]
2-site failover | yes | yes
2-copy large write throughput | 4× | 4×
2-copy large read throughput |*8× | 6×
2-copy tiny writes throughput |*4× | ~1.28×
2-copy tiny reads throughput |*8× | 6×
2-copy safe random drive loses | 1 |*2
2-copy - 1 large write throughput | 4× | 4×
2-copy - 1 large read throughput | 4× |*5× or 6×[2]
2-copy - 1 tiny writes throughput |*4× | ~1.46× or 1.2×[2]
2-copy - 1 tiny reads throughput | 4× |*3.6x or 6×[2]
can be divided into 3 full copies | yes | yes
3-site failover | yes | yes
1-copy large write throughput | 4× | 4×
1-copy large read throughput | 4× | 4×
1-copy tiny writes throughput |*4× | ~0.85×
1-copy tiny reads throughput |*4× | 2×
1-copy safe random drive loses | 0 | 0
complexity |*simple | more complex
Uwaga 1: Pełna kopia przechowywanych danych to odpowiednio czterokrotna macierz RAID 0 lub macierz RAID 6 zdegradowana o 4/6. Uwaga 2: Istnieje nawet szansa na to, czy awaria dysku obciąży jedną z 4 zdegradowanych par macierzy RAID 1, czy pogorszy jedną z 2 normalnych par.
Niemniej jednak podwoiłaby wydajność odczytu macierzy RAID 6 z 6 dyskami, a mała przepustowość zapisu powinna być o 25% lepsza (1,5 / 1,2) ze względu na to, że wymagane odczyty zostały podzielone pomiędzy pary macierzy RAID 1, a RAID 6 oczywiście robi mają odpowiednie wnioski, a więc w aplikacjach o wysokiej dostępności, które mają większe zapisy lub które są bardziej zaniepokojony wydajność odczytu niż wydajności zapisu, może tam jest nisza dla RAID 1 + 6 przecież. Ale to nie wszystko…
Złożoność
Jest to do tej pory tylko teoretycznie (głównie kombinatoryka ), w praktyce złożoność będzie oznaczać, że implementacje RAID 1 + 6 mogą mieć braki, które tracą szanse i nie osiągają teoretycznych rezultatów. RAID 6 jest już bardziej złożony, a zagnieżdżanie dodaje nieco więcej złożoności.
Na przykład nie jest od razu oczywiste, że 6 × 2 RAID 1 + 6 można wyodrębnić jako posiadające 3 niezależne wirtualne głowice odczytu zdolne do jednoczesnego odczytu 3 sąsiadujących dużych odczytów o przepustowości 4 × każdy, podobnie jak 4 × 3 RAID 1 + 0. Po prostu zagnieżdżanie 6 par RAID 1 w macierzy RAID 6 przy użyciu programowego RAID może nie być tak eleganckie; implementacja może być głupia i thrash (choć nie przetestowałem jeszcze tej hipotezy).
Złożoność wiąże się również ze zwiększonym kosztem rozwoju wdrożeń i narzędzi. Chociaż mogą istnieć aplikacje, które mogłyby skorzystać z takiego zagnieżdżenia, ulepszenia mogą nie być warte kosztów rozwoju.