La version 2.0 de la spécification NVM Express a été publiée, maintenant la cadence d’environ deux ans pour l’interface de stockage qui a maintenant dix ans. Comme les autres mises à jour des spécifications NVMe, la version 2.0 est livrée avec une variété de nouvelles fonctionnalités et fonctionnalités à mettre en œuvre pour les lecteurs (généralement en tant que fonctionnalités facultatives). Mais le changement le plus important – et la raison pour laquelle cela s’appelle la version 2.0 au lieu de 1.5 – est que la spécification a été radicalement réorganisée pour mieux s’adapter au large éventail de fonctionnalités que NVMe englobe désormais. Depuis ses humbles débuts en tant que protocole de stockage par blocs fonctionnant sur PCI Express, NVMe est devenu également l’un des protocoles de stockage en réseau les plus importants, et prend désormais également en charge des paradigmes de stockage qui sont entièrement différents de l’abstraction de stockage de blocs de type disque dur fournie à l’origine. par NVMe.

Au lieu d’une spécification de base pour les SSD PCIe typiques et d’une spécification NVMe over Fabrics distincte, la version 2.0 est conçue pour être une spécification plus modulaire et a été divisée en plusieurs documents. La spécification de base couvre désormais à la fois les périphériques connectés localement et NVMeoF, mais de manière plus abstraite, suffisamment a été retiré de la spécification de base pour qu’il ne soit plus suffisant de définir toutes les fonctionnalités nécessaires pour implémenter un simple SSD. Les appareils réels devront également se référer à au moins une spécification de transport et au moins une spécification de jeu de commandes. Pour les SSD grand public typiques, cela signifie utiliser la spécification de transport PCIe et le jeu de commandes de stockage de bloc. D’autres options de transport incluent actuellement NVMe sur Fabrics en réseau utilisant TCP ou RDMA. Les autres options de jeu de commandes incluent les jeux de commandes Espace de noms zoné et Valeur-clé. Nous avons déjà couvert les espaces de noms zonés en profondeur lorsqu’il a été approuvé pour inclusion l’année dernière. Les trois ensembles de commandes standardisés (bloc, zoné, valeur-clé) couvrent différents points du spectre, des simples SSD avec de fines abstractions sur le flash sous-jacent, aux disques intelligents relativement compliqués qui prennent en charge certaines des tâches de gestion du stockage qui auraient traditionnellement été géré par un logiciel sur le système hôte.

La plupart des nouvelles fonctionnalités de NVMe 2.0 sont des extensions mineures des fonctionnalités existantes, rendant ces fonctionnalités plus utiles et plus largement utilisables. Par exemple, le partitionnement du stockage d’un périphérique en ensembles NVM et en groupes d’endurance a été introduit dans NVMe 1.4, mais la spécification n’indiquait pas comment ces divisions seraient créées ; cette configuration devrait soit être codée en dur par le micrologiciel du lecteur, soit gérée avec des commandes spécifiques au fournisseur. NVMe 2.0 ajoute un mécanisme de gestion de capacité standard pour les groupes d’endurance et les ensembles NVM à allouer, et ajoute également une autre couche de partitionnement (domaines) pour les appareils de stockage NVMeoF massifs qui avaient besoin de plus d’outils pour découper leur pool de stockage disponible, ou isoler les impacts sur les performances des différents utilisateurs sur les disques ou les baies partagés.

La spécification NVMe prévoyait à l’origine la possibilité de plusieurs ensembles de commandes au-delà de l’ensemble de commandes de stockage de blocs de base. Mais le mécanisme d’origine inclus pour prendre en charge plusieurs jeux de commandes n’est pas adapté aux cas d’utilisation actuels : une poignée de bits réservés dans la structure de données des capacités du contrôleur ne suffisent pas pour englober toutes les possibilités de ce que les SSD d’aujourd’hui pourraient implémenter. En particulier, le nouveau système de gestion de plusieurs jeux de commandes permet désormais à différents espaces de noms derrière le même contrôleur de prendre en charge différents jeux de commandes, plutôt que d’exiger que tous les espaces de noms prennent en charge tous les jeux de commandes pris en charge par leur contrôleur parent.

Les ensembles de commandes zonées et clé-valeur étaient déjà sur le radar lorsque NVMe 1.4 a été achevé, et maintenant ces technologies ont été incorporées dans 2.0 avec un statut égal à l’ensemble de commandes de stockage de blocs d’origine. Les futurs ensembles de commandes, tels que les disques de stockage informatique, sont toujours en cours et ne sont pas prêts pour la normalisation, mais la spécification NVMe est désormais capable d’intégrer plus facilement ces nouveaux développements. NVMe pourrait en principe également ajouter un ensemble de commandes Open Channel qui expose la plupart ou tous les détails bruts de la gestion de la mémoire flash NAND (pages, blocs d’effacement, gestion des défauts, etc.), mais le consensus général de l’industrie est que le paradigme de stockage zoné frappe un équilibre plus raisonnable, et l’intérêt pour les SSD Open Channel diminue au profit des espaces de noms zonés.

Pour les cas d’utilisation en entreprise, NVMe a hérité de la prise en charge des informations de protection de SCSI/SAS, en associant des informations supplémentaires à chaque bloc logique, qui sont utilisées pour vérifier l’intégrité des données de bout en bout. NVMe 2.0 étend la prise en charge existante des informations de protection de la prise en charge des CRC 16 bits à la prise en charge également des CRC 32 bits et 64 bits, permettant une protection des données plus robuste pour les systèmes de stockage à grande échelle.

NVMe 2.0 introduit une nouvelle fonctionnalité de sécurité importante : le contrôle de groupe de commandes, configuré à l’aide d’une nouvelle commande de verrouillage. NVMe 1.4 a ajouté une capacité de protection en écriture de l’espace de noms qui permet au système hôte de mettre les espaces de noms en mode de protection en écriture jusqu’à ce qu’ils soient explicitement déverrouillés ou jusqu’à ce que le lecteur soit éteint et redémarré. Le verrouillage de NVMe 2.0 permet un contrôle similaire pour interdire d’autres commandes. Cela peut être utilisé pour mettre un lecteur dans un état où les lectures et les écritures ordinaires sont autorisées, mais diverses commandes d’administration sont verrouillées afin que les autres fonctionnalités du lecteur ne puissent pas être reconfigurées. Comme avec la fonction de protection en écriture précédente, ce contrôle de groupe de commandes prend en charge la définition de ces restrictions jusqu’à ce qu’elles soient explicitement supprimées ou jusqu’à un cycle d’alimentation.

Pour les cas d’utilisation de NVMe over Fabrics, NVMe 2.0 clarifie la manière de gérer les mises à jour du micrologiciel et l’arrêt sécurisé des périphériques dans les scénarios où le stockage partagé est accessible via plusieurs contrôleurs. Il existe également désormais une prise en charge explicite des disques durs. Même s’il est peu probable que les disques durs basculent de sitôt pour utiliser nativement les connexions PCIe au lieu de SAS ou SATA, la prise en charge des supports de rotation signifie que les entreprises peuvent unifier leur réseau de stockage avec NVMe sur Fabrics et abandonner les protocoles plus anciens comme iSCSI.

Dans l’ensemble, NVMe 2.0 n’apporte pas autant de nouvelles fonctionnalités que certaines des mises à jour précédentes. En particulier, rien dans cette mise à jour ne se démarque comme étant pertinent pour les SSD client/consommateur. Mais la réorganisation des spécifications devrait faciliter l’itération et l’expérimentation de nouvelles fonctionnalités, et les prochaines années verront, espérons-le, des mises à jour plus fréquentes avec des modifications plus petites plutôt que de regrouper deux ou trois ans de travail pour de grandes mises à jour des spécifications.

Lecture connexe :