The Persistent Memory Development Kit (PMDK) is a collection of libraries and tools for System Administrators and Application Developers to simplify managing and accessing persistent memory devices. For more information, see https://pmem.io.
To install PMDK libraries please clone the tree and build it yourself. Specific installation instructions are outlined below.
Pre-built packages can be found in popular Linux distribution package repositories but we do not keep them anymore up to date because of the limited resources.
Bugs and feature requests for this repo are tracked in our GitHub Issues Database.
- Libraries and Utilities
- Getting Started
- Version Conventions
- Building and installing
- Experimental Supports
- Archived and deprecated libraries
- Contact Us
All PMDK related libraries are described in detail on pmem.io/pmdk.
Libraries available in this repository:
- libpmem: provides low-level persistent memory support.
- libpmem2: provides low-level persistent memory support, is a new version of libpmem.
- libpmemobj: provides a transactional object store, providing memory allocation, transactions, and general facilities for persistent memory programming.
- libpmempool: provides support for off-line pool management and diagnostics.
Utilities available in this repository:
- pmempool: allows managing and analyzing persistent memory pools.
- pmemcheck: a Valgrind tool for persistent memory error detection.
Currently, these libraries and utilities only work on 64-bit Linux.
See our LICENSE file for information on how these libraries are licensed.
Getting Started with Persistent Memory Programming is a tutorial series created by Intel architect, Andy Rudoff. In this tutorial, you will be introduced to persistent memory programming and learn how to apply it to your applications.
- Part 1: What is Persistent Memory?
- Part 2: Describing The SNIA Programming Model
- Part 3: Introduction to PMDK Libraries
- Part 4: Thinking Transactionally
Additionally, we recommend reading Introduction to Programming with Persistent Memory from Intel
- Release Candidates have a '-rc{version}' tag, e.g.
0.2-rc3
, meaning Release Candidate 3 for version 0.2 - Stable Releases use a major.minor tag like
0.2
Install a few dependencies and then build and install PMDK in the system.
# get the source code
git clone https://github.com/pmem/pmdk
cd pmdk
# build
make -j
# install (optionally)
sudo make install
If experience any issues or looking for additional options, check out the INSTALL.md file or contact us.
There is initial support for 64-bit ARM and RISC-V processors provided. It is currently not validated nor maintained. Thus, these architectures should not be used in a production environment.
There is initial support for ppc64le processors provided. It is currently not validated nor maintained. Thus, this architecture should not be used in a production environment.
The on-media pool layout is tightly attached to the page size of 64KiB used by default on ppc64le, so it is not interchangeable with different page sizes, includes those on other architectures. For more information on this port, contact Rajalakshmi Srinivasaraghavan (rajis@linux.ibm.com) or Lucas Magalhães (lucmaga@gmail.com).
- libpmemblk: supports arrays of pmem-resident blocks, all the same size, that are atomically updated. The final release was 1.13.1.
- libpmemlog: provides a pmem-resident log file. The final release was 1.13.1.
- libpmemset: provides support for persistent file I/O operations, runtime mapping concatenation and multi-part support across poolsets. The final release was 1.12.1.
- librpmem: provides low-level support for remote access to persistent memory utilizing RDMA-capable RNICs. The final release was 1.12.1. If you are interested in remote persistent memory support you might be also interested in the librpma library.
- libvmem: 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. It has been moved to a separate repository.
- libvmemalloc: transparently converts all the dynamic memory allocations into persistent memory allocations. This allows the use of persistent memory as volatile memory without modifying the target application. It has been moved to a separate repository.
For more information on this library, contact Tomasz Gromadzki (tomasz.gromadzki@intel.com), Jan Michalski (jan.michalski@intel.com), Oksana Sałyk (oksana.salyk@intel.com), Piotr Balcer (piotr.balcer@intel.com), Andy Rudoff (andy.rudoff@intel.com), or post to the Persistent Memory Programming Google group.