Cherchez fois
Le problème est que l' amplification de la recherche d' écriture se comporte très différemment de l' amplification du débit d' écriture . L'amplification minimale du débit d'écriture avec parité se produit lorsqu'une bande entière est écrite à la fois (appelons cet adjectif `` pleine bande '') mais l'amplification de recherche d'écriture minimale se produit, à l'inverse, lorsque toute l'écriture suivant une recherche dans le périphérique virtuel s'inscrit dans un seul morceau. Avant d'entrer dans les détails, les relations sont beaucoup plus faciles à transmettre sous forme de tableaux:
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]
où n est le nombre total de disques, n₁ est le nombre de disques dans les groupes RAID 1 et n₅ et n₆ sont le nombre de groupes dans les matrices RAID 5 ou RAID 6 respectivement. Les exemples se rapportent à l'exemple à 12 lecteurs de la question (les lignes pertinentes sont «*bolded*
'); des exemples pour les niveaux RAID 1 + 0, 1 + 5, 1 + 6 sont respectivement 4 × 3, 6 × 2, 6 × 2.
Notez que seul le facteur d'amplification du débit d'écriture pleine bande est directement lié à la proportion de redondance. Les cas à un seul bloc sont plus compliqués pour ceux qui ont la parité. Ils surviennent parce que l'écriture d'un seul bloc nécessite de lire le plus simple des morceaux de parité ou des autres morceaux de données, avant d'écrire les morceaux de parité avec le nouveau morceau de données. (Ils ne sont pas directement multiplicatifs car les lectures induites doivent plutôt être multipliées par le facteur d'amplification de débit de lecture / recherche respectif pour RAID 1, les deux étant 1; voir ci-dessous.)
Malheureusement, le choix d'une taille de bloc qui minimise cette amplification supplémentaire du débit d'écriture a pour effet secondaire de maximiser réellementl'amplification de recherche d'écriture. Pour les écritures minuscules avec un temps d'écriture négligeable par rapport au temps de recherche, les performances d'écriture du striping avec une très petite taille de bloc (pour être pleine bande) ne sont que de 1 ×, comme la mise en miroir, car elles nécessitent que tous les lecteurs cherchent à les morceaux pour chaque écriture et le débit gagné en mobilisant tous ces lecteurs ne sont pas pertinents. Il a divisé le rapport entre le temps d'écriture et le temps de recherche par le nombre de disques dans la matrice, mais pour les petites écritures, c'était déjà négligeable. Il ne serait pas logique d'utiliser une taille de bloc si petite que même les plus petites écritures soient à pleine bande. Pour les écritures suffisamment petites pour ressentir les effets de la recherche, il est préférable qu'elles tiennent dans un seul morceau.
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)]
Remarque: Les 2 colonnes de débit du milieu peuvent être ignorées étant donné une taille de bloc sensible qui est plus grande que les écritures pour lesquelles le temps de recherche est important, mais suffisamment petite pour que les écritures de grande taille soient pleine bande. La grande taille de bloc de la deuxième colonne de débit s'apparente davantage aux disques fractionnés. Une écriture «minuscule» est l'endroit où l'effet du débit est négligeable.
Le fait d'avoir une taille de bloc inappropriée augmente également l'effet de la recherche d'amplification pour les lectures, mais pas autant et uniquement dans le cas pleine bande.
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 *
Remarque: le «à n» est dû au fait que lorsqu'une seule lecture se produit simultanément, il est théoriquement possible de mobiliser tous les lecteurs pour rechercher les emplacements appropriés et lire collectivement les données pour un débit de lecture contigu maximal maximal.
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×*
Remarque: Encore une fois, les 2 colonnes de débit du milieu peuvent être ignorées étant donné une taille de bloc sensible. La troisième colonne de débit est à nouveau étroitement liée à la proportion de redondance.
Cependant, une taille de bloc suffisamment grande signifie que les lectures minuscules ne sont jamais pleine bande. Donc, étant donné une implémentation efficace et une taille de bloc appropriée, les performances de lecture doivent être proportionnelles au nombre de disques identiques lorsqu'elles ne sont pas dégradées.
Donc, vraiment, le «facteur d'amplification» est beaucoup plus compliqué que la formule dans la question, où seule l'amplification du débit pleine bande avait été envisagée. En particulier, les performances d'écriture de 6 × 2 RAID 1 + 6 pour des écritures simultanées suffisamment petites pour être liées à la recherche seront moins bonnes que celles de 4 × 3 RAID 1 + 0. Et pour les écritures minuscules, qui sont toutes recherchées, les performances ne peuvent être que d'environ un tiers de celles du RAID 1 + 0 4 × 3 au mieux (c'est-à-dire avec une implémentation parfaite).
Après avoir résolu ce problème, la comparaison à 12 disques n'a pas de vainqueur absolu:
| 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
Remarque 1: Une copie complète des données stockées est respectivement une matrice RAID 0 quadruple ou une matrice RAID 6 dégradée 4/6. Remarque 2: Il y a une chance égale de savoir si la panne de disque déconnecte l'une des 4 paires RAID 1 dégradées ou dégrade l'une des 2 paires normales.
Néanmoins, il aurait le double des performances de lecture d'une matrice RAID 6 de 6 disques et le débit d'écriture minuscule devrait être 25% meilleur (1,5 / 1,2) en raison de la répartition des lectures requises entre les paires RAID 1, et RAID 6 le fait évidemment ont des applications appropriées, donc dans les applications de haute disponibilité qui ont de plus grandes écritures ou qui sont plus préoccupés par les performances de lecture que les performances d'écriture, peut - être il est un créneau pour RAID 1 + 6 afterall. Mais ce n'est pas tout…
Complexité
Jusqu'à présent, cela est juste en théorie (principalement la combinatoire ), dans la pratique, la complexité signifie que les implémentations de RAID 1 + 6 peuvent avoir des lacunes qui manquent des opportunités et n'atteignent pas les résultats théoriques. RAID 6 est déjà plus complexe, et l'imbrication ajoute un peu plus de complexité en plus de cela.
Par exemple, il n'est pas immédiatement évident que 6 × 2 RAID 1 + 6 peut être résumé comme ayant 3 têtes de lecture virtuelles indépendantes capables de lire simultanément 3 grandes lectures contiguës à 4 × débit chacune, tout comme 4 × 3 RAID 1 + 0. L'imbrication simple de 6 paires RAID 1 dans une matrice RAID 6 à l'aide d'un RAID logiciel peut ne pas être aussi élégante; l'implémentation peut être stupide et trash (je n'ai pas encore testé cette hypothèse).
La complexité présente également un coût accru de développement d'implémentations et d'outils. Même si certaines applications peuvent bénéficier d'une telle imbrication, les améliorations peuvent ne pas valoir les coûts de développement.