Programación de memoria persistente en Windows: integración de NVML
La tecnología de memoria persistente (PM) proporciona acceso de nivel de bytes a medios no volátiles, a la vez que reduce la latencia de almacenar o recuperar datos significativamente. Crea un nuevo nivel entre la memoria de un sistema y el almacenamiento tradicional. Cualquier programa que dependa o escale con escrituras rápidas en un medio persistente puede beneficiarse de PM.
El propósito de este artículo es describir cómo se puede integrar la biblioteca de memoria no volátil (NVML) en un proyecto de Visual Studio para facilitar su uso.
Nota
La memoria persistente a veces también se conoce como memoria de clase de almacenamiento (SCM).
PM y NVML
La primera compatibilidad con la memoria persistente se introdujo en Windows Server 2016 y la actualización de aniversario de Windows 10 (1607). Para obtener información general rápida, consulte estos dos vídeos de Channel9:
- Uso de memoria no volátil (NVDIMM-N) como almacenamiento en bloques en Windows Server 2016
- Uso de memoria no volátil (NVDIMM N) como almacenamiento direccionable por bytes en Windows Server 2016
Para ayudar a los desarrolladores a aprovechar las ventajas de las ofertas de memoria persistente, Microsoft también ha contribuido a los esfuerzos de llevar la biblioteca de memoria no volátil (NVML) a Windows. Esta biblioteca proporciona varias herramientas para que las aplicaciones sean compatibles con la memoria persistente. Por ejemplo, contiene código que permite crear fácilmente un almacén de clave-valor compatible con PM para búsquedas y almacenes extremadamente rápidos. Puede encontrar más información sobre NVML, incluidos ejemplos, en nvM Library.
Integración de NVML en un proyecto de Visual Studio
- Descarga de archivos y encabezados de la biblioteca NVML
- NVML se mantiene en GitHub. Puede compilar el origen usted mismo o simplemente descargar archivos binarios compilados directamente desde aquí: NVML versión 1.2 : Windows Technical Preview.
Coloque los archivos y encabezados de biblioteca en un directorio de su elección, por ejemplo: "C:\NVML\lib" y "C:\NVML\inc", respectivamente.
Configure el proyecto de la siguiente manera:
- Abra el proyecto de Visual Studio y, en el botón derecho "Explorador de soluciones", haga clic con el botón derecho en el nombre del proyecto.
- Abra el panel de configuración del proyecto en la parte inferior del elemento emergente resultante.
- Vaya a "Propiedades de configuración -> C/C++" y agregue la carpeta en la que almacenó el encabezado (C:\NVML\inc) en el campo "Directorios de inclusión adicionales".
- A continuación, vaya a "Propiedades de configuración -> Enlazador" y agregue la carpeta en la que almacenó la biblioteca (C:\NVML\lib) en el campo "Directorios de biblioteca adicionales".
- A continuación, asegúrese de que tiene como destino el proyecto para Windows Server 2016 o Windows 10 Actualización de aniversario:
- Vaya a "Propiedades de configuración -> General" y establezca el campo "Versión de la plataforma de destino" en "10.0.14393.0" y
- Vaya a "Propiedades de configuración -> C/C++" y agregue "NTDDI_VERSION=NTDDI_WIN10_RS1;" al campo "Preprocesador".
- Incluir los encabezados en el código y vincular a las bibliotecas necesarias
- En este punto, puede incluir simplemente los archivos de encabezado que desea usar en el código como cualquier otro archivo de encabezado. Por ejemplo, para usar libpmem:
- agregue "#include <libpmem.h>" y
- agregue "libpmem.lib" a "Propiedades de configuración - Enlazador ->> Entrada -> Dependencias adicionales"
En este momento está listo para llamar directamente a las funciones de la biblioteca en el código y aprovecharlas.