Disques RAID

par Michel Jaunin, SIC-Exploitation


TABLE DES MATIERES



La technologie de disques RAID (Redundant Array of
Inexpensive Disks, actuellement Redundant Array of Independant Disks) est le
résultat de travaux effectués à l'Université de Californie (Berkeley) à la fin
des années 80 (première publication : ACM SIGMOD, en 1988).

On constate actuellement une énorme croissance de ce marché ; un système RAID
est basé sur un ensemble de disques simples 3.5" (ou 5.25") assemblés (disk
array) pour permettre le travail à l'unisson (transfert en parallèle), grâce à
un contrôleur ou à du logiciel, qui eux sont complexes.

Les superordinateurs ont utilisé en premier le transfert parallèle (par
exemple à l'EPFL dès 1986 : Cray 1 - COS, par logiciel, puis par hardware -
contrôleur - avec les DS40). Cette méthode souffre d'un défaut majeur : la
fiabilité de l'ensemble décroît avec le nombre de disques utilisés en
parallèle pour un file system. (MTBF - mean time between failure
- d'un ensemble = {MTBF d'un disque} / {nombre de disques de l'ensemble})
D'où l'ajout de disque(s) permettant une meilleure disponibilité par contrôle
de la parité avec correction, donc la poursuite du traitement en cas d'erreur
avec l'un (des) disques, sa (leur) réparation en production, et la
reconstruction des données ultérieurement, le tout de manière presque
transparente (diminution des performances).


Niveaux RAID (RAID Levels) en résumé

Les divers niveaux décrits dans le document Berkeley
(L1 - L5)
répondent à différentes contraintes et suivent une logique dans l'évolution de
leur architecture:

Berkeley:



Les niveaux 2 et 4 sont très peu utilisés; les niveaux 0 et 6 ont été ajoutés
après coup à l'étude Berkeley.
Les niveaux 1, 3 et 5 sont les plus utilisés, particulièrement 3 et 5 pour des
raisons économiques.


Problème de base


Traitement en cas d'erreur


Caractéristiques détaillées

Pour les explications qui suivent :

Les caractéristiques décrites ci-après sont générales et peuvent différer
selon l'implémentation retenue (type, coût, performance des disques de
l'ensemble, fiabilité-MTBF, nombre, type et performance des contrôleurs et des
drivers, présence et taille d'un cache dans le contrôleur...); il s'agit donc
de caractéristiques moyennes.

Il faut également tenir compte d'autres éléments de la chaîne (alimentation,
contrôleur, liaisons...) pour disposer d'un sous-système I/O redondant
assurant une disponibilité maximale: doublement des alimentations, des
contrôleurs, des chemins d'accès (canaux), accès croisés...

Niveau 0, L0


Ajouté après coup par l'industrie; n'est pas formellement de type RAID, car il
n'y a pas de redondance ! De fait: AID. Donc pas d'overhead pour la gestion de
la redondance !
Uniquement du striping, qui permet des taux de transfert élevés, si la taille
des enregistrements est assez grande: les tranches de fichier A, B, C... sont
lues/écrites simultanément en parallèle sur les disques. Selon les
implémentations, le taux de transactions est élevé si les enregistrements sont
très petits (zone en grisé), un seul disque étant accédé par transaction, ce
qui permet des transferts indépendants en parallèle. La capacité des disques
est utilisée à 100 %.




Niveau 1, L1


Décrit dans le document de Berkeley. Correspond au mirroring ou shadowing
(écriture simultanée de la même information sur 2 disques).
La capacité des disques est utilisée à 50 %, c'est donc une solution coûteuse.
Bonne performance en taux d'I/O (petite taille) particulièrement en lecture
(accès indépendant possible sur les 2 disques), performance normale, à moins
de faire aussi du striping simultanément, pour des grandes tailles, ce qui
donne alors les mêmes performances que L0.



Niveau 2, L2


Solution très similaire à L3, si ce n'est qu'il y a plus d'un disque pour la
«parité» (code Hamming), ce qui permet - indépendamment du contrôleur - de
déterminer quel est le disque fautif en plus de corriger la faute; nécessite
un interleaving au niveau du bit ou du byte (dimension des tranches); le
calcul de la parité utilise une technique similaire à celle utilisée pour la
mémoire DRAM, SECDED (correction d'une erreur, détection de deux erreurs). La
solution est donc relativement coûteuse (utilisation des disques à 67%), et
s'utilise très peu, puisque les contrôleurs permettent généralement de
déterminer le disque fautif en cas d'erreur.




Niveau 3, L3


Décrit dans le document de Berkeley. Dans l'exemple ci-après, l'utilisation
des disques est de 80 %.
Cette solution permet de hauts taux de transfert, mais un taux limité en
nombre d'I/O (tous les disques sont actifs simultanément et de manière
synchrone; il n'y a donc qu'un accès logique simultané). Le dernier disque, le
5e ici, contient dans sa position i la «parité» des positions i des disques de
données (a, b... sont ici aussi très petits, de l'ordre du bit ou du byte). En
cas de panne (déterminée au niveau d'un contrôleur) d'un disque «donnée»,
l'information est reconstruite à partir des autres disques, y compris celui de
parité; après réparation (ou pendant, si un disque réserve existe), le contenu
du disque erroné est reconstruit.
Indisponibilité en cas de panne simultanée de 2 disques.

Très efficace pour des I/O séquentiels de gros fichiers, peu efficace pour des
petits I/O aléatoires (transaction).



Niveau 4, L4


Solution intérmédiaire entre L3 et L5 : idem à L3, sauf que l'interleaving ne
se fait pas au niveau du bit ou de byte, mais à celui du secteur (bloc).
Identique à L5, sauf que la «parité» n'est pas répartie, mais se trouve sur un
disque dédié (comme L3). En conséquence, ce disque de parité est un bottleneck
en écriture (pas d'écritures simultanées possibles, tout devant passer par ce
disque de parité). Ne s'utilise pas, puisque la performance est moindre que
celle de L5.

Niveau 5, L5


Décrit dans le document de Berkeley. Dans le cas présent, l'utilisation des
disques est de 80 %.
La redondance est traitée de manière similaire à L3, mais la «parité» est
répartie sur l'ensemble des disques. Contrairement à L3, les tranches sont ici
de taille importante ; les disques peuvent donc être accédés simultanément de
manière indépendante pour des petites requêtes différentes (en grisé), ce qui
permet de bon taux d'I/O (pas d'accès synchrone comme L3). Le fait que la
«parité» est répartie ne génère pas de bottleneck systématique en cas
d'écriture ou de lecture avec correction (ce qui est le cas de L4).

Indisponibilité en cas de panne simultanée de 2 disques. Mais la ré-écriture
d'un petit enregistrement (grisé) implique la lecture de l'ancienne valeur
(bloc) et de la parité pour remise à jour de cette parité (lecture puis
écriture sur 2 disques, d'où perte de performance). En cas de panne d'un
disque, il est toujours nécessaire de lire tous les blocs i sur tous les
disques restants pour reconstruire l'information perdue.
La solution est bien adaptée à de nombreuses transactions de taille faible,
surtout en lecture (rapport écriture/lecture faible).



Niveau 6, L6


Non défini par Berkeley, mais ajouté par l'industrie (du moins par certains
constructeurs, dont la définition peut différer). Par exemple: proche de L5,
mais 2 fonctions «parité» sont calculées (code Reed-Solomon), d'où la
nécessité de 2 disques de parité et un traitement complexe. Les informations
de «parité» sont aussi réparties sur l'ensemble des disques. L'utilisation des
disques est donc moindre que pour L3 ou L5, mais la redondance est assurée,
même en cas de panne de 2 disques de l'ensemble.

Pour le reste, les remarques relatives à L5 s'appliquent.


Résumé




article paru du 20 décembre 1994