Programmierung des persistenten Arbeitsspeichers in Windows – NVML-Integration
Die PM-Technologie (Persistent Memory) ermöglicht den Zugriff auf nicht flüchtige Medien auf Byteebene und reduziert gleichzeitig die Latenz beim Speichern oder Abrufen von Daten erheblich. Es erstellt eine neue Ebene zwischen dem Arbeitsspeicher eines Systems und dem herkömmlichen Speicher. Jedes Programm, das von oder skaliert ist, mit schnellen Schreibvorgängen auf ein persistentes Medium kann von PM profitieren.
Der Zweck dieses Artikels besteht darin, zu beschreiben, wie die nichtflüchtige Speicherbibliothek (NVML) zur einfachen Verwendung in ein Visual Studio-Projekt integriert werden kann.
Hinweis
Persistenter Arbeitsspeicher wird manchmal auch als Speicherklassenspeicher (Storage Class Memory, SCM) bezeichnet.
PM und NVML
Die erste Unterstützung für persistenten Arbeitsspeicher wurde in Windows Server 2016 und dem Windows 10 Anniversary Update (1607) eingeführt. Eine kurze Übersicht finden Sie in diesen beiden Channel9-Videos:
- Using Non-volatile Memory (NVDIMM-N) as Block Storage in Windows Server 2016 (Verwenden von permanentem Speicher [NVDIMM-N] als Blockspeicher in Windows Server 2016)
- Using Non-volatile Memory (NVDIMM-N) as Byte-Addressable Storage in Windows Server 2016 (Verwenden von permanentem Speicher [NVDIMM-N] als byteadressierbaren Speicher in Windows Server 2016)
Damit Entwickler die Vorteile des persistenten Arbeitsspeichers nutzen können, hat Microsoft auch dazu beigetragen, die NVML (Non-Volatile Memory Library) auf Windows zu bringen. Diese Bibliothek bietet verschiedene Tools, um Anwendungen für persistenten Arbeitsspeicher zu sensibilieren. Sie enthält beispielsweise Code, mit dem Sie ganz einfach einen PM-fähigen Schlüsselwertspeicher für extrem schnelle Nachschlagen und Speicher erstellen können. Weitere Informationen zu NVML, einschließlich Beispielen, finden Sie unter NVM Library.
Integrieren von NVML in ein Visual Studio-Projekt
- Herunterladen von NVML-Bibliotheksdateien und Headern
- NVML wird auf GitHub verwaltet. Sie können die Quelle entweder selbst kompilieren oder kompilierte Binärdateien direkt von hier herunterladen: NVML Version 1.2 – Windows Technical Preview.
Platzieren Sie die Bibliotheksdateien und Header in einem Verzeichnis Ihrer Wahl, z. B. "C:\NVML\lib" bzw. "C:\NVML\inc".
Konfigurieren Sie Ihr Projekt wie folgt:
- Öffnen Sie Ihr Visual Studio-Projekt, und klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf den Namen Ihres Projekts.
- Öffnen Sie den Einstellungsbereich des Projekts am unteren Rand des resultierenden Popupfensters.
- Navigieren Sie zu "Konfigurationseigenschaften -> C/C++", und fügen Sie dem Feld "Zusätzliche Eingeschlossene Verzeichnisse" den Ordner hinzu, in dem Sie den Header (C:\NVML\inc) gespeichert haben.
- Navigieren Sie als Nächstes zu "Konfigurationseigenschaften –> Linker", und fügen Sie dem Feld "Zusätzliche Bibliotheksverzeichnisse" den Ordner hinzu, in dem Sie die Bibliothek gespeichert haben (C:\NVML\lib).
- Stellen Sie als Nächstes sicher, dass Sie das Projekt auf Windows Server 2016 oder Windows 10 Anniversary Update festlegen:
- Navigieren Sie zu "Konfigurationseigenschaften –> Allgemein", und legen Sie das Feld "Zielplattformversion" auf "10.0.14393.0" fest.
- Navigieren Sie zu "Konfigurationseigenschaften -> C/C++", und fügen Sie dem Feld "Präprozessor" "NTDDI_VERSION=NTDDI_WIN10_RS1;" hinzu.
- Schließen Sie die Header in Ihren Code ein, und verknüpfen Sie sie mit den erforderlichen Bibliotheken.
- An diesem Punkt können Sie einfach die Headerdateien, die Sie verwenden möchten, wie alle anderen Headerdateien in Ihren Code einschließen. Beispiel für die Verwendung von libpmem:
- fügen Sie "#include <libpmem.h>" hinzu und
- Fügen Sie "libpmem.lib" zu "Konfigurationseigenschaften -> Linker -> Eingabe -> Zusätzliche Abhängigkeiten" hinzu.
An diesem Punkt sind Sie bereit, die Funktionen der Bibliothek direkt in Ihrem Code aufzurufen und diese zu nutzen.