Искать время
Проблема заключается в том, что усиление поиска при записи ведет себя совершенно иначе, чем усиление пропускной способности при записи . Минимальное усиление пропускной способности записи с четностью происходит, когда записывается целая полоса за один раз (назовем это прилагательное «полная полоса»), но минимальное усиление поиска при записи происходит, наоборот, когда вся запись после поиска в виртуальном устройстве вписывается в один кусок. Прежде чем вдаваться в подробности, отношения намного проще передать в табличной форме:
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 *
Примечание: 'to 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 столбца пропускной способности можно игнорировать, учитывая разумный размер фрагмента. Третий столбец пропускной способности снова тесно связан с долей избыточности.
Тем не менее, достаточно большой размер чанка означает, что крошечные операции чтения никогда не бывают с полной полосой. Таким образом, учитывая эффективную реализацию и соответствующий размер блока, производительность чтения должна быть пропорциональна количеству идентичных дисков, если они не ухудшены.
В действительности, «коэффициент усиления» намного сложнее, чем формула в вопросе, где рассматривалось только усиление пропускной способности с полной полосой. В частности, производительность записи 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 Afterall. Но это не все…
сложность
Пока это только теоретически (в основном комбинаторика ), на практике сложность будет означать, что реализации RAID 1 + 6 могут иметь недостатки, которые упускают возможности и не достигают теоретических результатов. RAID 6 уже более сложен, и вложение еще более усложняет.
Например, не сразу очевидно, что 6 × 2 RAID 1 + 6 можно абстрагировать как наличие 3 независимых виртуальных головок чтения, способных одновременно считывать 3 смежных больших чтения с пропускной способностью 4 × каждая, как 4 × 3 RAID 1 + 0. Простое вложение 6 пар RAID 1 в массив RAID 6 с использованием программного RAID может быть не таким элегантным; реализация может быть глупой и трэш (я пока не проверял эту гипотезу).
Сложность также представляет собой повышенную стоимость разработки реализаций и инструментов. Даже при том, что могут быть приложения, которые могли бы извлечь выгоду из такого вложения, улучшения могут не стоить затрат на разработку.