Comprendre et déployer la mémoire persistante

S’applique à : Azure Stack HCI version 20H2, Windows Server 2019, Windows Server 2016, Windows 10

La mémoire persistante (ou PMem) est un nouveau type de technologie de mémoire qui conserve son contenu au fil des cycles d’alimentation, et peut être utilisée en tant que stockage de niveau supérieur. C’est pourquoi la PMem est parfois appelée « mémoire de classe de stockage » ou SCM. Cet article fournit des informations générales sur la mémoire persistante, et explique comment la déployer en tant que niveau de stockage supérieur dans Azure Stack HCI et Windows Server.

Qu’est-ce que la mémoire persistante ?

La mémoire persistante est un type de support de sauvegarde non volatil qui tient dans un emplacement DIMM (mémoire) standard. Elle est plus lente que la DRAM, mais offre un débit plus élevé que les technologies SSD et NVMe. Par rapport à la DRAM, les modules de mémoire persistante offrent des capacités beaucoup plus importantes et sont moins onéreux par Go, mais sont plus coûteux que la technologie NVMe. Le contenu de la mémoire subsiste même en cas de coupure de courant du système suite à perte d’alimentation inattendue, à un arrêt déclenché par l’utilisateur ou à une panne du système. Cela signifie que vous pouvez utiliser des modules de mémoire persistante en guise de stockage ultra-rapide et persistant.

Azure Stack HCI et Windows Server 2019 prennent en charge l’utilisation de la mémoire persistante en tant que cache ou lecteur de capacité. Toutefois, étant donné le modèle de tarification, une mémoire persistante offre un maximum de valeur en tant que cache ou petit stockage dédié pour des données de mappage de mémoire. Le plus souvent, les lecteurs de mémoire persistante sont utilisés automatiquement en tant que lecteurs de cache, et tout ce qui est plus lent est utilisé en guise de lecteurs de capacité. Pour plus d’informations sur la configuration des lecteurs de cache et de capacité, consultez Compréhension du cache de pool de stockage et Planifier des volumes.

Concepts de mémoire persistante

Cette section décrit les concepts de base que vous devez comprendre pour déployer une mémoire persistante dans des environnements Windows Server et Azure Stack HCI afin de réduire les goulots d’étranglement d’E/S et d’améliorer les performances.

Méthodes d’accès

Il existe deux méthodes d’accès à la mémoire persistante. Il s'agit des éléments suivants :

  • La méthode Accès au bloc fait office de stockage pour la compatibilité des applications. Dans cette configuration, les données circulent de manière normale dans le système de fichiers et les piles de stockage. Vous pouvez utiliser cette configuration en association avec les technologies NTFS et ReFS, et elle est recommandée dans la plupart des cas d’usage.
  • La méthode Accès direct (DAX) fait office de mémoire pour obtenir la latence la plus faible. Vous ne pouvez utiliser la méthode DAX qu’en association avec la technologie NTFS. Si vous n’utilisez pas la méthode DAX correctement, vous vous exposez à des pertes de données. Nous vous recommandons vivement d’utiliser la méthode DAX avec une table des traductions de bloc (BTT) afin de réduire le risque d’erreurs d’écriture. Pour plus d’informations, consultez Comprendre et configurer DAX.

Avertissement

La méthode DAX n’est pas prise en charge dans des environnements Azure Stack HCI. Azure Stack HCI ne prend en charge que la méthode d’accès au bloc, avec une BTT activée.

Régions

Une région est un ensemble d’un ou de plusieurs modules de mémoire persistante. Des régions sont souvent créées sous la forme d’ensembles entrelacés dans lesquels plusieurs modules de mémoire persistante apparaissent comme un espace d’adressage virtuel logique unique pour augmenter le débit. Pour augmenter la bande passante disponible, les adresses virtuelles adjacentes sont réparties entre plusieurs modules de mémoire persistante. Il est généralement possible de créer des régions dans le BIOS d’une plateforme serveur.

PmemDisks

Pour utiliser une mémoire persistante en guise de stockage, vous devez définir au moins un PmemDisk, à savoir un disque dur virtuel (VHD) sur l’ordinateur hôte, qui est énuméré en tant que PmemDisk à l’intérieur d’une machine virtuelle. Un PmemDisk est une plage d’adresses contiguës de mémoire non volatile que vous pouvez considérer comme une partition de disque dur ou LUN. Vous pouvez créer plusieurs PmemDisks à l’aide de cmdlets Windows PowerShell pour répartir la capacité brute disponible. Chaque module de mémoire persistante contient une zone de stockage d’étiquette (LSA) qui stocke les métadonnées de configuration.

Table des traductions de bloc

Contrairement aux disques SSD, les modules de mémoire persistante ne prémunissent pas contre les « erreurs d’écriture » susceptibles de se produire en cas de coupure de courant ou de panne système pouvant constituer un risque pour les données. La BTT atténue ce risque en fournissant une sémantique de mise à jour de secteur atomique pour les périphériques mémoire persistants, et en activant essentiellement les écritures de secteur de type bloc de sorte que les applications puissent éviter de mélanger des données anciennes et nouvelles en cas de défaillance. Nous vous recommandons vivement d’activer la BTT dans presque tous les cas. Étant donné que la BTT est une propriété de PmemDisk, elle doit être activée lors de la création du PmemDisk.

Dans le mode d’accès au bloc, nous vous recommandons d’utiliser la BTT, car toutes les données utilisent une sémantique de bloc. La BTT est également utile en mode DAX, car les opérations de métadonnées continuent d’utiliser une sémantique de bloc, même si les opérations de données de l’application ne le font pas. Même si toutes les opérations d’application utilisent des fichiers mappés en mémoire avec une sémantique de DAX, des erreurs d’écriture peuvent se produire pour les opérations de métadonnées. L’activation de la BTT est donc toujours précieuse.

Matériel pris en charge

Le tableau suivant indique le matériel de mémoire persistante pris en charge pour Azure Stack HCI et Windows Server. Windows Server 2019 prend entièrement en charge la mémoire persistante, y compris dans les espaces de stockage direct.

Technologie de mémoire persistante Windows Server 2016 Azure Stack HCI v20H2/Windows Server 2019
NVDIMM-N en mode persistant Pris en charge Pris en charge
Mémoire persistante DC Intel Optane™ en mode Direct d’application Non pris en charge Prise en charge
Mémoire persistante DC Intel Optane™ en mode Mémoire Pris en charge Pris en charge

La mémoire persistante DC Intel Optane prend en charge les modes de fonctionnement Mémoire (volatil) et Direct d’application (persistant). Pour utiliser des modules de mémoire persistante en guise de stockage, ce qui constitue le cas d’usage principal pour les charges de travail de serveur, vous devez utiliser le mode Direct d’application. Le mode Mémoire utilise essentiellement la mémoire persistante en tant que RAM plus lente, qui ne remplit généralement pas les exigences de performances des charges de travail de serveur. Le mode Mémoire diffère du DAX, qui est un volume de stockage persistant accessible à l’aide d’une sémantique de type mémoire.

Le mode de fonctionnement est souvent préconfiguré par le fabricant de l’appareil d’origine.

Notes

Quand vous redémarrez un système contenant plusieurs modules de mémoire persistante Intel® Optane™ en mode Direct d’application qui sont divisés en plusieurs PmemDisks, vous risquez de perdre l’accès à certains ou à tous les disques de stockage logiques associés. Ce problème se produit sur les versions de Windows Server 2019 antérieures à la version 1903.

Cette perte d’accès se produit parce qu’un module de mémoire persistante n’est pas formé ou est défaillant lors du démarrage du système. Dans ce cas, tous les PmemDisks sur un module de mémoire persistante sur le système échouent, y compris ceux qui ne sont pas physiquement mappés au module défaillant.

Pour restaurer l’accès à tous les PmemDisks, remplacez le module défaillant.

Si un module échoue sur Windows Server 2019 version 1903 ou plus récente, vous perdez uniquement l’accès aux PmemDisks physiquement mappés au module affecté. Les autres ne sont pas affectés.

Configurer la mémoire persistante

Si vous utilisez une mémoire persistante Intel Optane, suivez ces instructions. Si vous utilisez des modules de mémoire persistante d’un autre fournisseur, consultez leur documentation.

Pour créer un PmemDisk qui prend en charge la BTT, utilisez la cmdlet New-VHD :

New-VHD E:\pmemtest.vhdpmem -Fixed -SizeBytes 1GB -AddressAbstractionType BTT

L’extension de disque dur virtuel doit être « vhdpmem ».

Vous pouvez également convertir un disque dur virtuel ne prenant pas en charge la BTT en disque dur virtuel prenant en charge la BTT à l’aide de la cmdlet Convert-VHD :

Convert-VHD .\pmemtest_nobtt.vhdpmem -AddressAbstractionType BTT -DestinationPath pmemtest_btt.vhdpmem

Après conversion, le nouveau disque dur virtuel aura le même GUID d’espace de noms que le disque d’origine. Cela peut occasionner des problèmes, en particulier si les deux disques sont attachés à la même machine virtuelle. Pour créer un nouvel UUID d’espace de noms pour le disque dur virtuel converti, utilisez la cmdlet Set-VHD :

Set-VHD -ResetDiskIdentifier .\pmemtest_btt.vhdpmem

Comprendre les ensembles entrelacés

Il est généralement possible de créer des ensembles entrelacés dans le BIOS d’une plateforme serveur afin de faire apparaître plusieurs périphériques mémoire persistants en tant que disque unique pour le système d’exploitation hôte, ce qui permet d’augmenter le débit de ce disque.

Notes

Windows Server 2016 ne prend pas en charge les ensembles entrelacés de modules de mémoire persistante.

Rappelez-vous qu’un module de mémoire persistante réside dans un emplacement DIMM (mémoire) standard, ce qui rapproche les données du processeur. Cette configuration réduit la latence et améliore les performances de récupération. Pour augmenter le débit, au moins deux modules de mémoire persistante créent un ensemble entrelacé bidirectionnel pour effectuer les opérations de lecture/écriture. Les configurations les plus courantes sont un entrelacement bidirectionnel ou quadridirectionnel.

Vous pouvez utiliser la cmdlet PowerShell Get-PmemDisk pour vérifier la configuration de tels disques logiques, comme suit :

Get-PmemDisk

DiskNumber Size   HealthStatus AtomicityType CanBeRemoved PhysicalDeviceIds UnsafeShutdownCount
---------- ----   ------------ ------------- ------------ ----------------- -------------------
2          252 GB Healthy      None          True         {20, 120}         0
3          252 GB Healthy      None          True         {1020, 1120}      0

Nous pouvons voir que le disque logique PMem 2 utilise les périphériques physiques Id20 et Id120, et que le disque logique PMem 3 utilise les périphériques physiques Id1020 et Id1120.

Pour récupérer des informations supplémentaires sur l’ensemble entrelacé qu’un lecteur logique utilise, exécutez la cmdlet Get-PmemPhysicalDevice :

(Get-PmemDisk)[0] | Get-PmemPhysicalDevice

DeviceId DeviceType           HealthStatus OperationalStatus PhysicalLocation FirmwareRevision Persistent memory size Volatile memory size
-------- ----------           ------------ ----------------- ---------------- ---------------- ---------------------- --------------------
20       Intel INVDIMM device Healthy      {Ok}              CPU1_DIMM_C1     102005310        126 GB                 0 GB
120      Intel INVDIMM device Healthy      {Ok}              CPU1_DIMM_F1     102005310        126 GB                 0 GB

Configurer des ensembles entrelacés

Pour configurer un ensemble entrelacé, exécutez la cmdlet Get-PmemUnusedRegion afin d’examiner toutes les régions de mémoire persistante qui ne sont pas attribuées à un disque de mémoire persistante logique sur le système :

Get-PmemUnusedRegion

RegionId TotalSizeInBytes DeviceId
-------- ---------------- --------
       1     270582939648 {20, 120}
       3     270582939648 {1020, 1120}

Pour afficher toutes les informations du périphérique PMem dans le système, dont son type, son emplacement, son intégrité, son état opérationnel, et autres, exécutez la cmdlet Get-PmemPhysicalDevice :

Get-PmemPhysicalDevice

DeviceId DeviceType           HealthStatus OperationalStatus PhysicalLocation FirmwareRevision Persistent memory size Volatile
                                                                                                                      memory size
-------- ----------           ------------ ----------------- ---------------- ---------------- ---------------------- --------------
1020     Intel INVDIMM device Healthy      {Ok}              CPU2_DIMM_C1     102005310        126 GB                 0 GB
1120     Intel INVDIMM device Healthy      {Ok}              CPU2_DIMM_F1     102005310        126 GB                 0 GB
120      Intel INVDIMM device Healthy      {Ok}              CPU1_DIMM_F1     102005310        126 GB                 0 GB
20       Intel INVDIMM device Healthy      {Ok}              CPU1_DIMM_C1     102005310        126 GB                 0 GB

Étant donné que nous disposons d’une région PMem non utilisée, nous pouvons créer des disques de mémoire persistante. Nous pouvons utiliser la région inutilisée pour créer plusieurs disques de mémoire persistante en exécutant les cmdlets suivantes :

Get-PmemUnusedRegion | New-PmemDisk
Creating new persistent memory disk. This may take a few moments.

Une fois cette opération effectuée, nous pouvons voir les résultats en exécutant la cmdlet suivante :

Get-PmemDisk

DiskNumber Size   HealthStatus AtomicityType CanBeRemoved PhysicalDeviceIds UnsafeShutdownCount
---------- ----   ------------ ------------- ------------ ----------------- -------------------
2          252 GB Healthy      None          True         {20, 120}         0
3          252 GB Healthy      None          True         {1020, 1120}      0

Il est à noter que nous pouvons obtenir les mêmes résultats en exécutant la cmdlet Get-PhysicalDisk | Where MediaType -eq SCM au lieu de la cmdlet Get-PmemDisk. Le disque de mémoire persistante nouvellement créé correspond à un des lecteurs qui s’affichent dans PowerShell et dans Windows Admin Center.

Remplacer la mémoire persistante

Si vous devez remplacer un module défaillant, vous devez ré-approvisionner le disque PMem (vois les étapes décrites précédemment).

Lorsque de la résolution de problèmes, il se peut que vous deviez utiliser la cmdlet Remove-PmemDisk. Cette cmdlet supprime un disque de mémoire persistante spécifique. Nous pouvons supprimer tous les disques mémoire persistante actuels en exécutant les cmdlets suivantes :

Get-PmemDisk | Remove-PmemDisk

cmdlet Remove-PmemDisk at command pipeline position 1
Supply values for the following parameters:
DiskNumber: 2

This will remove the persistent memory disk(s) from the system and will result in data loss.
Remove the persistent memory disk(s)?
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "Y"): Y
Removing the persistent memory disk. This may take a few moments.

Important

La suppression d’un disque de mémoire persistante entraîne une perte de données sur ce disque.

Il se peut que vous deviez également exécuter la cmdlet Initialize-PmemPhysicalDevice . Cette cmdlet initialise les zones de stockage d’étiquette sur les périphériques physiques de mémoire persistante, et peut effacer des informations de stockage d’étiquette endommagées sur ceux-ci.

Get-PmemPhysicalDevice | Initialize-PmemPhysicalDevice

This will initialize the label storage area on the physical persistent memory device(s) and will result in data loss.
Initializes the physical persistent memory device(s)?
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "Y"): A
Initializing the physical persistent memory device. This may take a few moments.
Initializing the physical persistent memory device. This may take a few moments.
Initializing the physical persistent memory device. This may take a few moments.
Initializing the physical persistent memory device. This may take a few moments.

Important

La cmdlet Initialize-PmemPhysicalDevice entraîne une perte de données dans la mémoire persistante. Ne l’utilisez qu’en dernier recours pour résoudre des problèmes liés à la mémoire persistante.

Mémoire persistante en action à Microsoft Ignite 2018

Pour voir certains des avantages de la mémoire persistante, regardons cette vidéo de Microsoft Ignite 2018.

Tout système de stockage offrant une tolérance de panne effectue nécessairement des copies distribuées d’écritures. Ces opérations doivent traverser le réseau et amplifier le trafic d’écriture principal. Pour cette raison, les chiffres absolus de référence d’IOPS les plus élevés sont généralement obtenus en mesurant uniquement les lectures, en particulier si le système de stockage dispose d’optimisations de bon sens pour lire à partir de la copie locale autant que possible. Les espaces de stockage direct sont optimisés pour ce faire.

Mesuré en utilisant uniquement des opérations de lecture, le cluster a produit 13 798 674 IOPS.

Si vous regardez la vidéo de près, vous remarquerez que la latence est plus étonnante encore. Même à plus de 13,7 millions d’IOPS, le système de fichiers dans Windows signale une latence constamment inférieure à 40 μs (symbole de microseconde, soit un millionième de seconde). Cette vitesse est un sensiblement plus rapide que celles qu’annoncent fournisseurs les fournisseurs classiques de mémoire flash.

Ensemble, les espaces de stockage direct dans Windows Server 2019 et la mémoire persistante DC Intel® Optane™ offrent des performances exceptionnelles. Ce point de référence de HCI supérieur à 13,7 millions d’IOPS, associé à une latence prévisible et extrêmement faible, offre des performances deux fois supérieures à celles de notre premier point de référence, de 6,7 millions d’IOPS. Qui plus est, cette fois, nous n’avons besoin que de 12 nœuds serveurs, soit 25 % en moins que précédemment.

Le matériel de test était un cluster de 12 serveurs configuré pour utiliser une mise en miroir tridimensionnelle et des volumes ReFS délimités, 12 x Intel® S2600WFT, 384 Gio de mémoire, 2 x 28-core "CascadeLake," 1,5 To de mémoire persistante DC Intel® Optane™ en tant que cache, 32 To NVMe (4 x 8 TB Intel® DC P4510) en tant que capacité, 2 x Mellanox ConnectX-4 25 Gbit/s.

Le tableau suivant présente tous les chiffres de performances.

Référence Performances
Lecture aléatoire à 100 % de 4 Ko 13,8 millions d’IOPS
Lecture/écriture aléatoires à 90/10 % de 4 Ko 9,45 millions d’IOPS
Lecture séquentielle de 2 Mo Débit de 549 Go/s

Étapes suivantes

Pour consulter des informations connexes, reportez-vous également à :