pmem Repositories

Here is a list of all the repositories in the pmem organization in GitHub under

PMDK Repositories

The Persistent Memory Development Kit is a collection of libraries and tools. The source is spread across many repositories. Components are separated like this to help with the logistics of parallel development and asynchronous delivery.

Components Focused on Persistence:

Repo Name Description
pmdk PMDK Core C libraries and tools:
  • libpmem
  • libpmem2
  • libpmemobj
  • libpmemblk
  • libpmemlog
  • librpmem
  • libpmempool
  • libpmemset (in development)
  • pmempool utility
  • Core PMDK C examples
  • Web content for (in gh-pages branch)
libpmemobj-cpp C++ bindings & containers for libpmemobj
llpl Low-Level Persistence Library for Java
libpmemobj-js JavaScript bindings for libpmemobj
pmemkv Transactional Key-Value Store: Top-Level C & C++ API
pmemkv-bench Benchmarks for pmemkv
pmemkv-python Python bindings for pmemkv
pmemkv-nodejs NodeJS bindings for pmemkv
pmemkv-ruby Ruby bindings for pmemkv
pmemkv-java Java bindings for pmemkv
pmdk-convert Conversion tool for PMDK pools
valgrind Enhanced Valgrind containing the pmemcheck plugin
pmdk-tests Extended PMDK tests
rpma C library to simplify accessing persistent memory (PMem) on remote hosts over Remote Direct Memory Access (RDMA)

Components Focused on Volatile Usages of pmem:
Repo Name Description
memkind General-purpose malloc/free-style library
(Actually lives outside the pmem GitHub org
since it has a life outside of pmem as well)
vmemcache A buffer based LRU cache
vmem libvmem, the predecessor to libmemkind.
Maintenance-only -- use libmemkind for all new development.

Experimental PMDK components (not yet ready for production use):
Repo Name Description
pcj Persistent Collections for Java
pmemfile Userspace implementation of file APIs using pmem
syscall_intercept Syscall intercepting library used by libpmemfile
vltrace Tool for tracing syscalls
pynvm Experimental prototype Python bindings for libpmemobj

Repo Name Description
dev-utils-kit Tools used for development of projects under pmem organization (WIP)
autoflushtest Basic data integrity test for platforms with flush-on-fail CPU caches

ndctl is the Linux utility for managing persistent memory.

Repo Name Description
ndctl ndctl, daxctl, and related libraries
Web Content

The website is implemented as static content on GitHub using Jekyll, GitHub-flavored MarkDown, and some tool-generated HTML here and there. Some sub-areas of the website live in the gh-pages branch of the corresponding repo (for example, pmdk and ndctl).

Repo Name Description
docs Persistent Memory Docbook repo containing the website (including blogs)
pmdk-examples PMDK examples and tutorials
book Examples used in the pmem Programming Book
knowledge-base Knowledge Base for
pmem-aware Software

These repos contain experimental versions of software modified to leverage persistent memory. Typically, when the features are mature and tested they become part of the upstream repo.

Repo Name Description
pelikan Working tree for development of pmem-related features for Twitter's Pelikan
pmem-rocksdb RocksDB modified to use pmem
pmem-redis Redis, enhanced to use pmem
pmse MongoDB pmem Storage Engine Prototype
kvdk Reference code of key/value store design for pmem

These repos are no longer under active development or use. We archive them here for reference.

Repo Name Description
linux-examples original ideas
redis Initial pmem enhancements to Redis
rocksdb Initial pmem enhancements to RocksDB
libcxx Experimental pmem-aware libcxx
mpi-pmem-ext MPI Extensions for pmem
issues Archive of some old issues. No longer in-use.
pmemkv-jni Java bindings via JNI for pmemkv