vendredi 3 janvier 2014

Pourquoi EMC XtremIO est une réponse pertinente dans le stockage SSD ?

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: