Pour entamer cette nouvelle année, il me semblait
intéressant de m'attarder quelques instants sur la tendance de fond qu'est
l'adoption du full SSD pour les baies de stockage hautes performances.
Comme vous le savez j'ai la chance de pouvoir travaillerdepuis 2 ans avec la machine EMC XtremIO et j'aimerais par ce présent post
répondre avec ma propre compréhension de cette technologie à quelques interrogations que j'entends ici ou là.
Tout d’abord, quand on parle de disque SSD, de quoi parle-t-on ?
Pour faire simple, un disque SSD est un disque ultra rapide composé
d'espaces mémoires électroniques non volatiles (transistors) appelés cellules, aptes à
recevoir des bits de données. Ces cellules sont de deux types : un bit par
cellule pour les disques SSD de type SLC (Single Level Cell) ou 2 à 3 bits par
cellule pour les disques dits MLC. De par le fait qu'une cellule SLC manipulera
moins de données, elle sera plus performante en accès qu'une MLC. La durée de
vie est estimée à 100 000 I/O pour les cellules SLC et environ 20 fois moins
pour les MLC, normal les SLC sont moins sollicités. La durée de vie d’un disque
SSD se mesure donc en nombre d’IO et pas en MTBF comme sur les traditionnels disques
mécaniques.
Et là, les problèmes commencent ...
La taille des blocs usuelle des blocs de 128Ko de données en
mémoire RAM à décharger sur les disques n’étant hélas pas alignée avec la
taille des blocs physiques de 4ko des disques SSD, il s’avère que le moindre
octet changé en ram à écrire sur disque engendrera la réinitialisation de 32
cellules de 4k et pas uniquement de 2. Ce phénomène générant des IO inutiles
est ce qu’on appelle l’amplification d’écriture, générant un overhead d’IO donc
pénalisant pour la durée de vie du disque SSD.
Toujours concernant les aspects inconvénients, le firmware du disque est suffisamment
malin pour ne pas solliciter toujours les mêmes cellules en répartissant
équitablement les cycles d'I/O sur l'ensemble de la surface : on appelle cela
le wear leveling, littéralement le nivellement d’usure. La conséquence est que
l’écriture successive d’un même bloc de données ne se fera jamais au même
endroit et générera une fragmentation de plus en plus importante ainsi qu’une
écriture systématique.
Le garbage collector est
un algorithme interne qui permet la défragmentation des blocs lors des périodes
d’inactivité du disque afin de réaliser un maximum de lectures séquentielles et
de créer des espaces libres contigües pour les futures écritures. Encore
faut-il laisser « respirer » le disque SSD ce qui est loin d’être le
cas avec une baie de stockage disposant d’un faible cache RAM et ça peut être
encore pire si le disque SSD est mis à contribution en tant que cache en
écriture pour des données stockées sur des disques mécaniques !
La commande TRIM permet lors d’une demande d’effacement de blocs
de données d’indiquer dans les descripteurs (index) que le système
d’exploitation peut écraser les données par de nouvelles dans les cellules sans
réinitialiser ces dernières ce qui prolonge la vie du disque SSD. Toutes les
baies n’intègrent pas cette commande : il ne suffit donc pas de substituer
des disques SSD aux disques mécaniques pour faire une baie full flash.
Qu’est-ce qu’une baie XtremIO ?
Une baie XtremIO comprend une à quatre X-Brick interconnectées
en infiniband. Chaque X-brick est composée de deux contrôleurs, d’une DAE (tiroir
de disques) incluant 25 disques SSD MLC de 400Go représentant environ 7To de
capacité utiles, de deux onduleurs capables de piloter le shutdown propre de la
machine en cas de perte d’alimentation électrique.
Quelles sont les optimisations apportées par XtremIO pour
préserver la vie des disques SSD ?
Il y a tout d’abord la déduplication inline intégrée qui
permet de limiter considérablement l’amplification d’écriture : seuls les
nouveaux blocs de données non encore dédupliqués sont écrits. Du coup, plus on enregistre de données, plus
la déduplication est efficace et moins on consomme d’espace. Seules les méta
datas sont mises à jours dans les contrôleurs sans générer d’IO sur les
disques.
Le raid maison XDP (XtremIO Data Protection) est une forme évoluée
de RAID 6 exploitant tous les disques disponibles à ceci près qu’il n’y a pas
deux disques dédiés à la parité, en effet celle-ci est volante. XDP n’impose
pas non plus de disques de Hot Spare.
XDP optimise à la volée la taille des blocs logiques à écrire pour s’aligner avec la
taille du plus grand stripe –les octets répartis sur les disques constituant
les données- disponible à un instant T. Les stripes sont donc de taille
variable et s’équilibrent tout seuls sur l’ensemble de la surface de stockage ce
qui à ma connaissance est unique.
XtremIO ne fait pas appel à un process de garbage collection
visant à recréer de l’espace contigu en réorganisant les stripes ce qui est
pénalisant à la fois pour la bande passante du back-end de la baie et pour la vie des disques
SSD.
XDP autorise jusqu’à la perte de 6 disques par X-Brick en ré-étalant dynamiquement et sous quelques minutes les stripes concernés.
La machine intègre deux contrôleurs chacun avec 256 Go de
ram faisant pour la plupart office de cache, du coup les disques ne sont pas
sollicités en permanence notamment pour l’accès à des données récursives telles que des images VDI.
Au final, EMC et XtremIO ont certes pris leur temps pour
sortir une machine full flash, mais c'est surtout une machine à l’architecture très
aboutie et très optimisée qui contrairement à d'autres, prolonge considérablement la vie des disques SSD point crucial pour une production en entreprise.
Aucun commentaire:
Enregistrer un commentaire