Descripción e implementación de una memoria persistente

Se aplica a: Azure Stack HCI, versiones 22H2 y 21H2; Windows Server 2022, Windows Server 2019, Windows Server 2016, Windows 10

La memoria persistente (o PMem) es un nuevo tipo de tecnología de memoria que conserva su contenido en los apagados y se puede usar como almacenamiento de nivel superior, por lo que es posible que se haga referencia a PMem como "memoria de clase de almacenamiento" o SCM. En este artículo se proporciona información general sobre la memoria persistente y se explica la manera de implementarla como el nivel de almacenamiento superior en Azure Stack HCI y Windows Server.

¿Qué es la memoria persistente?

La memoria persistente es un tipo de medio no volátil que se ajusta en una ranura de DIMM (memoria) estándar. Es más lento que DRAM, pero proporciona un mayor rendimiento que SSD y NVMe. En comparación con DRAM, los módulos de memoria persistente tienen capacidades mucho mayores y son menos costosos por GB, pero siguen siendo más caros que NVMe. El contenido de la memoria permanece incluso cuando se apaga la alimentación del sistema en caso de una pérdida de energía inesperada, un apagado iniciado por el usuario o un bloqueo del sistema. Esto significa que puede usar módulos de memoria persistente como almacenamiento persistente ultrarrápido.

Azure Stack HCI y Windows Server 2019 admiten el uso de memoria persistente como caché o una unidad de capacidad. Sin embargo, dado el modelo de precios, la memoria persistente proporciona el máximo valor como caché o como una pequeña cantidad de almacenamiento dedicado para los datos de asignación de memoria. En la mayoría de los casos, las unidades de memoria persistentes se usarán automáticamente como unidades de caché y lo que sea más lento se usará como unidad de capacidad. Para más información sobre cómo configurar la caché y las unidades de capacidad, consulte Descripción de la caché de un bloque de almacenamiento y Planificación de volúmenes.

Conceptos de memoria persistente

En esta sección se describen los conceptos básicos que debe comprender para implementar la memoria persistente en entornos de Windows Server y Azure Stack HCI para reducir los cuellos de botella de E/S y mejorar el rendimiento.

Métodos de acceso

Hay dos métodos para acceder a la memoria persistente. Son las siguientes:

  • Acceso a bloques, que funciona como almacenamiento para la compatibilidad de aplicaciones. En esta configuración, los datos fluyen a través del sistema de archivos y las pilas de almacenamiento de la forma habitual. Puede usar esta configuración en combinación con NTFS y ReFS, y se recomienda para la mayoría de los casos de uso.
  • Acceso directo (DAX) , que funciona como memoria para obtener la latencia más baja. Solo puede usar DAX en combinación con NTFS. Si no usa DAX correctamente, es posible que se pierdan datos. Se recomienda encarecidamente usar DAX con la tabla de traslación de bloques (BTT) activada para mitigar el riesgo de escrituras incompletas. Para más información, consulte Información y configuración de DAX.

Advertencia

DAX no se admite en entornos de Azure Stack HCI. Azure Stack HCI solo admite el acceso a bloques, con la BTT activada.

Regions

Una región es un conjunto de uno o varios módulos de memoria persistente. A menudo, las regiones se crean como conjuntos intercalados en los que varios módulos de memoria persistente aparecen como un único espacio de direcciones virtuales lógico para aumentar el rendimiento. Para aumentar el ancho de banda disponible, las direcciones virtuales adyacentes se reparten entre varios módulos de memoria persistente. Normalmente, las regiones se pueden crear en el BIOS de una plataforma de servidor.

PmemDisks

Para usar la memoria persistente como almacenamiento, debe definir al menos una instancia de PmemDisk, que es un disco duro virtual (VHD) en el host que se indica como PmemDisk dentro de una máquina virtual (VM). PmemDisk es un intervalo de direcciones contiguas de memoria no volátil que se puede considerar como una partición de disco duro o LUN. Puede crear varios PmemDisk mediante cmdlets de Windows PowerShell para dividir la capacidad sin formato disponible. Cada módulo de memoria persistente contiene un área de almacenamiento de etiquetas (LSA) que almacena los metadatos de configuración.

Tabla de traslación de bloques

A diferencia de las unidades de estado sólido, los módulos de memoria persistente no disponen de protección frente a las "escrituras incompletas" que pueden producirse en caso de un error de alimentación o una interrupción del sistema, que ponen en riesgo los datos. BTT mitiga este riesgo ya que proporciona semántica de actualización del sector atómico para dispositivos de memoria persistente, lo que básicamente permite escrituras de sector similares a bloques para que las aplicaciones puedan evitar mezclar datos antiguos y nuevos en un escenario de error. Se recomienda encarecidamente activar BTT en casi todos los casos. Dado que BTT es una propiedad de PmemDisk, debe activarse al crear el PmemDisk.

En el modo de acceso a bloques, se recomienda usar BTT porque todos los datos usarán semántica de bloques. BTT también es útil en el modo DAX porque las operaciones de metadatos siguen usando la semántica de bloques, aunque las operaciones de datos de la aplicación no la usen. Incluso si todas las operaciones de la aplicación usan archivos asignados a memoria con semántica DAX, podrían seguir produciéndose escrituras incompletas en las operaciones de metadatos; por lo tanto, la activación de BTT sigue siendo valiosa.

Hardware admitido

En la tabla siguiente se muestra el hardware de memoria persistente admitido para Azure Stack HCI y Windows Server. La memoria persistente es totalmente compatible con Windows Server 2019, incluida la característica Espacios de almacenamiento directo.

Tecnología de memoria persistente Windows Server 2016 Azure Stack HCI v20H2/Windows Server 2019
NVDIMM-N en modo persistente Compatible Compatible
Intel Optane DC Persistent Memory en modo directo de la aplicación No compatible Compatible
Intel Optane DC Persistent Memory en modo memoria Compatible Compatible

Intel Optane DC Persistent Memory admite los modos de funcionamiento Memory (Memoria) (volátil) y App Direct (Directo de la aplicación) (persistente). Para usar módulos de memoria persistente como almacenamiento, que es el caso de uso principal para las cargas de trabajo de servidor, debe usar el modo directo de la aplicación. Básicamente, el modo de memoria usa la memoria persistente como RAM más lenta, que normalmente no cumple los requisitos de rendimiento de las cargas de trabajo de servidor. El modo de memoria es distinto de DAX, que es un volumen de almacenamiento persistente al que se puede acceder mediante semántica similar a la memoria.

El modo de funcionamiento suele estar preconfigurado por el fabricante del dispositivo original.

Nota:

Al reiniciar un sistema que tiene varios módulos de memoria persistente Intel® Optane™ en modo directo de la aplicación que están divididos en varios PmemDisks, es posible que pierda el acceso a algunos o todos los discos de almacenamiento lógico relacionados. Este problema se produce en las versiones de Windows Server 2019 anteriores a la versión 1903.

Esta pérdida de acceso se produce porque un módulo de memoria persistente no está entrenado o porque se produce un error cuando se inicia el sistema. En tal caso, se producirá un error en todos los PmemDisks de cualquier módulo de memoria persistente del sistema, incluidos los que no están asignados físicamente al módulo con errores.

Para restaurar el acceso a todos los PmemDisks, reemplace el módulo con errores.

Si se produce un error en un módulo en Windows Server 2019 versión 1903 o versiones más recientes, perderá el acceso solo a los PmemDisks asignados físicamente al módulo afectado; los demás no se verán afectados.

Configuración de la memoria persistente

Si usa la memoria persistente de Intel Optane, siga las instrucciones que se indican aquí. Si usa módulos de memoria persistente de otro proveedor, consulte su documentación.

Para crear un PmemDisk que admita BTT, use el cmdlet New-VHD:

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

La extensión VHD debe ser "vhdpmem".

También puede convertir un VHD que no tenga habilitada la BTT en uno que sí que la tenga (y viceversa) mediante el cmdlet Convert-VHD:

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

Después de la conversión, el nuevo VHD tendrá el mismo GUID de espacio de nombres que el original. Esto puede provocar problemas, especialmente si ambos están conectados a la misma máquina virtual. Para crear un nuevo UUID de espacio de nombres para el VHD convertido, use el cmdlet Set-VHD:

Set-VHD -ResetDiskIdentifier .\pmemtest_btt.vhdpmem

Descripción de los conjuntos intercalados

Normalmente, se pueden crear conjuntos intercalados en el BIOS de una plataforma de servidor para que varios dispositivos de memoria persistente aparezcan como un único disco en el sistema operativo host, lo que aumenta el rendimiento de ese disco.

Nota:

Windows Server 2016 no admite conjuntos intercalados de módulos de memoria persistente.

Recuerde que un módulo de memoria persistente reside en una ranura DIMM (memoria) estándar, que coloca los datos más cerca del procesador. Esta configuración reduce la latencia y mejora el rendimiento de la captura. Para aumentar aún más el rendimiento, dos o más módulos de memoria persistente crean un conjunto intercalado de n vías para las operaciones de lectura y escritura de bandas. Las configuraciones más comunes son la intercalación de dos o cuatro vías.

Puede usar el cmdlet Get-PmemDisk de PowerShell para revisar la configuración de estos discos lógicos, como se muestra a continuación:

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

Podemos ver que el disco PMem lógico 2 usa los dispositivos físicos Id20 e Id120, y el disco PMem lógico 3 usa los dispositivos físicos Id1020 e Id1120.

Para recuperar más información sobre el conjunto intercalado que una unidad lógica usa, ejecute el 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

Configuración de conjuntos intercalados

Para configurar un conjunto intercalado, ejecute el cmdlet Get-PmemUnusedRegion para revisar todas las regiones de memoria persistente que no están asignadas a un disco de memoria persistente lógico en el sistema:

Get-PmemUnusedRegion

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

Para ver toda la información del dispositivo PMem en el sistema, incluidos el tipo de dispositivo, la ubicación, el estado de mantenimiento y operativo, etc., ejecute el 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

Dado que tenemos una región de PMem sin usar disponible, podemos crear nuevos discos de memoria persistente. Podemos usar la región sin utilizar para crear varios discos de memoria persistente mediante la ejecución de los siguientes cmdlets:

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

Una vez hecho esto, podemos ver los resultados mediante la ejecución de lo siguiente:

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

Merece la pena tener en cuenta que podemos ejecutar Get-PhysicalDisk | Where MediaType -eq SCM en lugar de Get-PmemDisk para obtener los mismos resultados. El disco de memoria persistente recién creado tiene una correspondencia uno a uno con las unidades que aparecen en PowerShell y en Windows Admin Center.

Reemplazo de la memoria persistente

Si tiene que reemplazar un módulo con errores, tendrá que volver a aprovisionar el disco PMem (consulte los pasos descritos anteriormente).

Al solucionar problemas, es posible que tenga que usar Remove-PmemDisk. Este cmdlet quita un disco de memoria persistente específico. Podemos quitar todos los discos de memoria persistente actuales mediante la ejecución de los siguientes cmdlets:

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.

Importante

La eliminación de un disco de memoria persistente provoca la pérdida de datos en ese disco.

Otro cmdlet que puede necesitar es Initialize-PmemPhysicalDevice. Este cmdlet inicializa las áreas de almacenamiento de etiquetas en los dispositivos físicos de memoria persistente y puede borrar la información dañada de almacenamiento de etiquetas en los dispositivos.

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.

Importante

Initialize-PmemPhysicalDevice provoca la pérdida de datos en la memoria persistente. Solo debe usarse como último recurso para corregir problemas relacionados con la memoria persistente.

Memoria persistente en acción en Microsoft Ignite 2018

Para ver algunas de las ventajas de la memoria persistente, echemos un vistazo a este vídeo de Microsoft Ignite 2018.

Cualquier sistema de almacenamiento que proporciona tolerancia a errores realiza necesariamente copias distribuidas de escrituras. Estas operaciones deben atravesar la red y ampliar el tráfico de escritura de back-end. Por este motivo, normalmente los números de puntos de referencia IOPS mayores absolutos se consiguen midiendo solo las lecturas, especialmente si el sistema de almacenamiento contiene optimizaciones de sentido común para leer la copia local siempre que sea posible. La característica Espacios de almacenamiento directo está optimizada para ello.

Cuando se mide mediante operaciones de solo lectura, el clúster entregó 13 798 674 IOPS.

Si mira el vídeo atentamente, observará que lo más increíble es la latencia. Incluso con más de 13,7 millones de IOPS, el sistema de archivos de Windows informa de una latencia que es constantemente inferior a 40 μs. (Ese es el símbolo de microsegundos, una millonésima parte de un segundo). Esta velocidad es un orden de magnitud más rápido de lo que todos los proveedores de flash anuncian actualmente con orgullo.

Juntos, Espacios de almacenamiento directo en Windows Server 2019 y la memoria persistente Intel® Optane™ DC ofrecieron un rendimiento novedoso. Este punto de referencia de HCI de más de 13,7 millones de IOPS, acompañado de una latencia predecible y extremadamente baja, es más del doble que nuestro anterior punto de referencia líder del sector de 6,7 millones de IOPS. Además, esta vez solo necesitamos 12 nodos de servidor, un 25 % menos que antes.

El hardware de prueba era un clúster de 12 servidores configurado para usar volúmenes ReFS delimitados y de creación de reflejo de tres vías, 12 x Intel® S2600WFT, 384 GiB de memoria, 2 x 28 núcleos "CascadeLake", 1,5 TB de memoria persistente Intel® Optane™ DC como caché, NVMe de 32 TB (4 x 8 TB Intel® DC P4510) como capacidad, 2 x Mellanox ConnectX-4 de 25 Gbps.

En la tabla siguiente se muestran los números de rendimiento completos.

Prueba comparativa Rendimiento
Lectura aleatoria del 100 % de 4 K 13,8 millones de IOPS
Lectura/escritura aleatoria del 90/10 % de 4 K 9,45 millones de IOPS
Lectura secuencial de 2 MB Rendimiento de 549 GB/s

Pasos siguientes

Para obtener información relacionada, consulte: