Шукайте разів
Проблема полягає в тому, що посилення пошуку запиту поводиться дуже інакше, як посилення пропускної здатності запису . Мінімальне посилення пропускної здатності запису з паритетом виникає, коли вся смужка пишеться одразу (назвемо це прикметник «повною смугою»), але мінімальне посилення запиту запису відбувається, навпаки, коли все записування після запиту у віртуальному пристрої вписується єдиний шматок. Перш ніж розібратися в деталях, відносини набагато простіше передати в табличному вигляді:
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]
де n - загальна кількість дисків, n₁ - кількість дисків у групах RAID 1, а n₅ і n₆ - кількість груп у масивах RAID 5 або RAID 6 відповідно. Приклади стосуються 12-ти приводного запису у питанні (відповідні рядки ' *bolded*
'); Прикладами рівнів RAID 1 + 0, 1 + 5, 1 + 6 є 4 × 3, 6 × 2, 6 × 2 відповідно.
Зауважимо, що лише коефіцієнт посилення пропускної здатності запису повної смуги прямо пов'язаний із часткою надмірності. Одномісні випадки складніші для тих, хто має паритет. Вони виникають через те, що для написання одного фрагмента потрібне читання того, що найлегше з фрагментів парності або інших фрагментів даних, перед тим, як писати шматки парності разом з новим фрагментом даних. (Вони не є безпосередньо мультиплікаційними, тому що індуковані зчитування повинні замість цього помножуватися на відповідний коефіцієнт посилення читання / шукати коефіцієнт посилення для RAID 1, обидва - 1; див. Нижче.)
На жаль, вибір розміру шматка, який мінімізує це додаткове посилення пропускної здатності запису, має побічний ефект фактично максимізаціїзапис домагається посилення. Для крихітних записів з мізерним часом запису порівняно з часом пошуку, показник запису смуги з дуже невеликим розміром шматка (щоб бути повною смугою) становить лише 1 ×, як дзеркальне дзеркальне відображення, оскільки для цього потрібні всі диски, щоб прагнути шматки для кожного запису та отримана пропускна здатність від мобілізації всіх цих дисків не має значення. Він розділив співвідношення часу запису на пошук часу на кількість накопичувачів у масиві, але для крихітних записів це було вже незначно. Не було б сенсу використовувати шматок розміру настільки малий, щоб зробити навіть крихітні записи повнорозмірними. Для записів, досить малих, щоб відчути наслідки пошуку, найкраще, щоб вони вмістилися в межах одного шматка.
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)]
Примітка. Середні 2 пропускні стовпчики можна ігнорувати, надаючи чутливий розмір шматка, який більший, ніж час запису, для якого час пошуку є значним, але досить малий, щоб великі записи були повна смуга. Великий розмір шматка 2-ої пропускної колонки більше схожий на розкидані накопичувачі. "Крихітна" запис - це ефект пропускної здатності незначний.
Недостатньо невеликий розмір шматка також збільшує ефект пошуку посилення для читання, хоча і не настільки, і лише у випадку з повною смугою.
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 *
Примітка: "до n" полягає в тому, що коли відбувається одночасне зчитування одночасно, теоретично можливо мобілізувати всі диски для пошуку відповідних місць і спільно зчитувати дані для максимальної великої суміжної пропускної здатності.
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×*
Примітка. Знову ж таки, середні 2 пропускні стовпчики можна ігнорувати з огляду на розмір розумного розміру. 3-й пропускний стовпчик знову тісно пов'язаний із пропорцією надмірності.
Однак достатньо великий розмір шматка означає, що крихітні читання ніколи не бувають повними. Отже, враховуючи ефективну реалізацію та відповідний розмір шматка, продуктивність читання повинна бути пропорційною кількості однакових накопичувачів, коли вони не погіршуються.
Тож насправді "коефіцієнт посилення" набагато складніше, ніж формула у питанні, де було розглянуто лише повне посилення пропускної здатності. Зокрема, продуктивність запису 6 × 2 RAID 1 + 6 для одночасних записів, які є достатньо малими, щоб бути пов'язаними з пошуком, буде гіршою, ніж у 4 × 3 RAID 1 + 0. А для крихітних записів, до яких усі прагнуть, продуктивність може бути приблизно третьою, ніж 4 × 3 RAID 1 + 0 в абсолютному кращому випадку (тобто, з ідеальною реалізацією).
Виявивши цю проблему, порівняння з 12 приводами не має прямого переможця:
| 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
Примітка 1: Повна копія збережених даних - це відповідно четвірка RAID 0 або масив RAID 6, деградований 4/6. Примітка 2: Є рівномірний шанс того, чи невдача диска обмежує одну з 4 деградованих пар RAID 1 або погіршує одну з 2 нормальних пар.
Тим не менш, це було б подвоїти ефективність зчитування масиву RAID 6 з 6 дисків, і крихітна пропускна здатність запису повинна бути на 25% кращою (1,5 / 1,2) через необхідне зчитування розділене між парами RAID 1, а RAID 6 очевидно мати відповідні програми, тому в додатках із високою доступністю, які мають більшу кількість записів або більше стурбовані ефективністю читання, ніж продуктивністю запису, можливо, є ніша для RAID 1 + 6 після завершення. Але це ще не все ...
Складність
Це поки що теоретично (в основному комбінаторика ), на практиці складність означатиме, що реалізація RAID 1 + 6 може мати недоліки, які втрачають можливості та не досягають теоретичних результатів. RAID 6 вже складніший, і вкладення додає трохи більше складності вгорі цього.
Наприклад, не відразу очевидно, що 6 × 2 RAID 1 + 6 можна абстрагувати як такі, що мають 3 незалежні віртуальні зчитувальні головки, здатні одночасно зчитувати 3 суміжні великі зчитування з пропускною здатністю 4 × кожна, як і 4 × 3 RAID 1 + 0. Просто вкладати 6 пар RAID 1 в масив RAID 6 за допомогою програмного RAID може бути не таким елегантним; реалізація може бути дурною і зграйною (я ще не перевіряв цю гіпотезу).
Складність також представляє збільшення витрат на розробку реалізацій та інструментів. Незважаючи на те, що можуть бути додатки, які могли б отримати користь від такого вкладення, поліпшення, можливо, не коштуватимуть витрат на розробку.