Pourquoi les SSD NVMe sont-ils plus performants ?
Les SSD NVMe ont le potentiel de communiquer à 32 Go/s avec leur machine hôte contre 0,7 ou 1,4 Go/s pour les modèles classiques en SATA ou en SAS. Cet article explique pourquoi.
Le protocole NVMe devient la norme de communication entre une machine et ses disques SSD. Il permet aux SSD d’être bien plus performants que lorsqu’ils sont reliés en SAS ou en SATA. Dans le principe, le protocole NVMe permet au système d’exploitation de la machine hôte de communiquer avec ses SSD via des registres mémoire, plutôt que via des commandes interprétées par des pilotes.
Ce fonctionnement direct est possible, car les SSD sont par nature un assemblage de composants mémoires. Le fait de ne plus s’encombrer de toute la logique nécessaire au déplacement des têtes ou à la gestion des surfaces magnétiques, qui n’a pas lieu d’être sur un SSD, mais qui est le fondement des protocoles SAS et SATA, permet ainsi d’augmenter significativement le nombre d’accès par seconde (IOPS) et de réduire les temps de latence qui les précèdent.
NVMe en détail
La spécification NVM Express (forme allongée de NVMe) définit à la fois un protocole de stockage et une interface de contrôle qui ne fonctionnent qu’avec des SSD reliés au bus d’extensions PCIe de la machine hôte. NVMe ne fonctionne pas avec des disques durs mécaniques.
Le bus PCIe autorise des latences plus faibles et des taux de transfert plus élevés que ses prédécesseurs, en l’occurrence les bus PCI et PCI Extended (PCI-X). Sur un bus PCIe, chaque slot dispose de sa propre connexion dédiée, de sorte qu’ils n’ont pas à se concurrencer pour utiliser la bande passante. De plus, chaque slot PCIe véhicule un à trente-deux canaux de communications ; les configurations les plus répandues sont des slots avec un, quatre, huit, douze, seize ou trente-deux canaux. Plus il y a de canaux, plus les performances du slot sont élevées. Et plus les coûts le sont aussi.
La spécification NVMe définit également trois formats physiques pour les SSD : une carte d’extension PCIe ordinaire, une barrette dite M.2, ou encore un boîtier rectangulaire 2,5 pouces classique dit U.2. En version U.2, le SSD utilise un connecteur SFF-8639 qui reprend la forme physique des connecteurs SATA et SAS, mais avec des broches en plus. L’intérêt de ce format est de pouvoir loger indifféremment des disques durs classiques, des SSD SAS/SATA ou des SSD NVMe au même endroit dans un serveur ou un PC de bureau.
Les ajouts et les révisions de NVMe 1.4
En 2019, le groupe de travail NVM Express a publié la spécification NVMe 1.4. Elle améliore la version 1.3 du NVMe, publiée en 2017. Le NVMe 1.4 apporte entre autres la prise en charge du SSD comme une mémoire PCIe non volatile, ainsi que celle d’une latence fixe dont les logiciels pourront se servir afin d’optimiser leurs opérations.
NVMe 1.4 est aussi plus verbeux. Il implémente un système de log et signale les détails des accès asymétriques dans un namespace (volume logique réparti sur plusieurs disques), de sorte que la machine hôte puisse établir une file d’attente d’entrées-sorties optimale. La version 1.4 ajoute une commande de vérification pour contrôler l’intégrité des données et métadonnées stockées. Les informations retournées doivent permettre au contrôleur de choisir la granularité et l’alignement des données lors des écritures et des réallocations d’espace, afin de maximiser la durée de vie des composants Flash.
NVMe 1.4 améliore par ailleurs la gestion d’une mémoire cache sur la machine, le partage des accès en écriture entre plusieurs machines, ou encore les mécanismes de réallocations.
Les performances du NVMe
Le protocole NVMe succède aux protocoles SATA et SAS qui ont été spécifiquement développés pour les disques durs. Le protocole SATA est une déclinaison de la norme ATA qui a été conçue pour brancher des disques durs dans des PC et des serveurs de la manière la plus simple possible, tandis que le SAS repose sur la norme SCSI qui consiste à les brancher avec le plus de fonctions possible.
Bien que le protocole SAS soit généralement considéré comme plus rapide et plus fiable, les deux protocoles gèrent aujourd’hui tout aussi bien l’un que l’autre les accès aux disques. D’ailleurs, si une machine rencontre de nos jours des problèmes de performances au niveau de son stockage, ceux-ci sont généralement liés au disque lui-même et non plus au protocole utilisé.
Les SSD ne contenant que des composants électroniques, ils ne souffrent pas des latences induites par la rotation des disques magnétiques ni par le déplacement mécanique des têtes de lecture. Leurs IOPS possibles sont de fait si élevés qu’ils submergent les anciens protocoles, de sorte que les SSD connectés en SAS ou SATA affichent des performances bridées par rapport à leur potentiel.
Le NVMe a été développé de A à Z spécifiquement pour les SSD, dans le but de débrider leurs débits et leurs IOPS. Débarrassée des étapes propres au stockage mécanique, une même commande d’entrée-sortie demande ainsi au processeur d’exécuter deux fois moins d’instructions en NVMe qu’en SAS ou qu’en SATA.
De plus, le nombre d’IOPS étant forcément limité sur les disques mécaniques, SATA et SAS ne sont pas prévus pour gérer des trains importants de commandes. En SATA, 32 commandes peuvent être envoyées les unes à la suite des autres, avant de repasser par une longue étape de resynchronisation. En SAS, on grimpe à 256 commandes en file indienne. En NVMe, on profite de la vitesse des bus PCIe et de la largeur de leurs canaux de communication : il devient possible d’envoyer simultanément au SSD 65 536 files de 64 000 commandes chacune. Ce mécanisme de commandes en files indiennes parallèles permet de faire un bien meilleur usage des capacités de traitement parallèle d’un SSD, chose impossible avec les autres protocoles.
Enfin, troisième et dernier avantage, le protocole NVMe utilise les capacités de RDMA offertes par les bus PCIe, c’est-à-dire que les échanges entre le SSD et le logiciel qui le pilote se font dans une zone mémoire à laquelle ils accèdent directement tous les deux. Le processeur n’a plus à déplacer les données de zones mémoire en d'autres zones mémoire pour les faire remonter du bus SATA au pilote de son système d’exploitation, au système de fichiers, à l’application.
Les vitesses des SSD NVMe
Les SSD NVMe actuels peuvent théoriquement atteindre un débit de 32 Go/s, du moins s’ils sont connectés sur un slot PCIe 4.0 disposant de 16 canaux de communication. En règle générale, pour des raisons de coût, les SSD NVMe utilisent plutôt 4 canaux, soit un débit d’environ 8 Go/s sur un bus PCIe 4.0, où chaque canal véhicule 2 Go/s.
Le nombre d’IOPS et les temps de latence dépendent de l’électronique interne du SSD. Les IOPS vont ainsi de 200 000 sur les modèles d’entrée de gamme à 10 millions sur les meilleurs appareils du marché. La latence est souvent inférieure à 20 microsecondes, certains modèles descendant en dessous de 10 microsecondes.
Comparativement, les SSD connectés en SATA culminent à 6 Gbit/s (soit environ 720 Mo/s), avec 100 000 IOPS et généralement plus de 100 microsecondes de latence. Les SSD connectés en SAS offrent des performances un peu plus élevées. Ils grimpent jusqu’à 12 Gbit/s (soit environ 1,4 Go/s) et des IOPS se situant en moyenne entre 200 000 et 400 000. Dans de rares cas, leurs temps de latence descendent sous la barrière des 100 microsecondes.
Ces chiffres n’ont qu’une valeur indicative. Le type de charge de travail – plutôt des écritures ou plutôt des lectures, plutôt des accès aléatoires ou plutôt des accès séquentiels – influence énormément les performances. Cela dit, le degré d’accélération obtenu en NVMe, par rapport aux SSD SAS et SATA, ne change pas.
À écouter
Demartek Founder Dennis Martin explique le NVM Express et le NVMe-oF, et pourquoi les administrateurs du stockage des données ont besoin de garder à l'oeil ces protocoles.
L’explosion du NVMe-over-Fabrics
Le protocole NVMe est limité à une machine et aux SSD qui sont rattachés à son bus PCIe. Sur le terrain, les entreprises préfèrent toutefois utiliser des infrastructures SAN qui regroupent les disques de tous les serveurs dans une baie installée en réseau. C’est à cette fin que le groupe NVM Express a développé une seconde spécification : NVMe-over-Fabrics, alias NVMe-oF.
Cette norme, publiée en juin 2016, consiste à pouvoir véhiculer les commandes du protocole NVMe sur des réseaux Ethernet, InfiniBand ou Fibre Channel, de sorte à faire communiquer le bus PCIe d’un serveur avec le bus PCIe d’une baie de stockage. 90 % des commandes NVMe et NVMe-oF sont identiques. Chaque réseau augmente nécessairement la latence de par la présence des différentes couches de son infrastructure, mais les performances brutes des SSD sont exploitées. Ainsi, pour atteindre le nombre d’IOPS dont aurait besoin une application, il est possible d’utiliser des baies de disques avec beaucoup moins de SSD NVMe que le nombre de disques durs qu’elles proposent d’habitude.
La spécification NVMe-oF est générique. Elle est implémentée en diverses spécifications selon trois méthodes de communication. La première à avoir été implémentée est celle qui passe par des cartes réseau capables d’utiliser le RDMA, en l’occurrence les cartes Infiniband ou RDMA-over-Converged Ethernet (RoCE). On parle dans ce cas de NVMe-over-Infiniband ou de NVMe-over-RoCE (abrégé en NVMe/RoCE). La seconde est celle qui passe par les cartes contrôleur Fiber Channel, qui ont leur propre moyen de dialoguer directement en mémoire avec le système hôte. On parle de NVMe-over-FC (NVMe/FC).
La dernière, définie en 2019, est celle qui passe par le protocole TCP du système d’exploitation hôte. NVMe-over-TCP (NVMe/TCP) est l’implémentation la moins performante, car elle n’utilise aucune forme de RDMA, mais elle présente l’avantage de fonctionner avec un réseau Ethernet de base, c’est-à-dire avec un coût minime.