Persistent Memory Documentation
HomePMDKNDCTLBlog
  • Persistent Memory Documentation
  • Getting Started Guide
    • Introduction
    • PMDK Introduction
    • NDCTL Introduction
    • System Requirements
    • Creating Development Environments
      • Linux Environments
        • Using the memmap Kernel Option
        • Advanced Topics
          • Partitioning Namespaces
          • I/O Alignment Considerations
      • Windows Environments
      • Virtualization
        • Windows Server Hyper-V
        • Using QEMU Virtualization
        • VMware VSphere/ESXi
      • Cloud Environments
        • Microsoft Azure Cloud
        • Google Cloud Platform (GCP)
    • Installing NDCTL
    • Installing PMDK
      • PMDK Directory Structure
      • Installing PMDK using Linux Packages
      • Installing PMDK from Source on Linux
      • Installing PMDK on Windows
  • IPMCTL User Guide
  • NDCTL User Guide
Powered by GitBook
On this page
  1. Getting Started Guide

PMDK Introduction

PreviousIntroductionNextNDCTL Introduction

Last updated 6 years ago

With persistent memory, applications have a new tier available for data placement as shown in Figure 1. In addition to the memory and storage tiers, the persistent memory tier offers greater capacity than DRAM and significantly faster performance than storage. Applications can access persistent memory resident data structures in-place, like they do with traditional memory, eliminating the need to page blocks of data back and forth between memory and storage.

To get this low-latency direct access, a new software architecture is required that allows applications to access ranges of persistent memory.

The is a collection of libraries and tools for System Administrators and Application Developers to simplify managing and accessing persistent memory devices. Tuned and validated on both Linux and Windows, the libraries build on the Direct Access (DAX) feature which allows applications to directly access persistent memory as memory-mapped files. This is described in detail in the . Figure 2 shows the model which describes how applications can access persistent memory devices (NVDIMMs) using traditional POSIX standard APIs such as read, write, pread, and pwrite, or load/store operations such as memcpy when the data is memory mapped to the application. The 'Persistent Memory' area describes the fastest possible access because the application I/O bypasses existing filesystem page caches and goes directly to/from the persistent memory media.

Directly accessing the physical media introduces new programming challenges and paradigms. The PMDK offers application developers many libraries and features highlighted below to solve some of the more difficult programming issues:

Available Libraries:

Available Utilities:

Supporting Documents

Supporting Videos

  • Get Started with Persistent Memory Programming (Series):

    The non-volatile memory library (NVML) is now called the Persistent Memory Development Kit (PMDK). In these videos, its architect, Andy Rudoff, introduces you to persistent memory programming and shows you how to apply it to your application.

: provides low-level persistent memory support

: provides a transactional object store, providing memory allocation, transactions, and general facilities for persistent memory programming.

: supports arrays of pmem-resident blocks, all the same size, that are atomically updated.

: provides a pmem-resident log file.

[deprecated]: turns a pool of persistent memory into a volatile memory pool, similar to the system heap but kept separate and with its own malloc-style API. Since persistent memory support has been integrated into , that library is the recommended choice for any volatile implementations. combines support for multiple types of volatile memory into a single, convenient API.

: library transparently converts all the dynamic memory allocations into persistent memory allocations.

: provides support for off-line pool management and diagnostics.

: provides low-level support for remote access to persistent memory utilizing RDMA-capable RNICs.

: is an embeddable and lightweight in-memory caching solution. It's designed to fully take advantage of large capacity memory, such as Persistent Memory with DAX, through memory mapping in an efficient and scalable way.

: Manage and analyze persistent memory pools with this stand-alone utility

: Use dynamic runtime analysis with an enhanced version of Valgrind for use with persistent memory.

Introduction to Programming with Persistent Memory from Intel:

Part 1:

Part 2:

Part 3:

Part 4:

Part 5:

libpmem
libpmemobj
libpmemblk
libpmemlog
libvmem
libmemkind
Libmemkind
libvmmalloc
libpmempool
librmem
libvmemcache
pmempool
pmemcheck
https://software.intel.com/en-us/articles/introduction-to-programming-with-persistent-memory-from-intel
What is Persistent Memory?
Describing The SNIA Programming Model
Introduction to PMDK Libraries
Thinking Transactionally
A C++ Example
Persistent Memory Development Kit (PMDK)
Storage Network Industry Association (SNIA) NVM Programming Model
Figure 1: Memory-Storage Hierarchy with Persistent Memory Tier
Fig 2: SNIA Programming Model