Programming and Usage Models for Non-Volatile Memory

When: March 14, 2015 (1:30pm-5:00pm)
Where: Istanbul, TURKEY

Non-volatile memory (NVM) technologies, such as phase-change memory, memristors, spin-transfer torque MRAM, and others promise high-bandwidth, low-latency persistent storage through the standard memory interface. However, making memory persistent poses a number of challenges, including how to ensure data is durable in the presence of processor caches, and how to ensure consistency of updates. This tutorial will briefly survey NVM technologies, and then cover (i) usage models, such as file systems and persistent memory (ii), programming models, such as NV-Heaps and Mnemosyne's persistent heaps, and (iii) consistency and durability mechanisms.


  • Michael M. Swift
    swift 'at'
    Computer Sciences Department
    University of Wisconsin--Madison
  • Haris Volos
    haris.volos 'at'
    HP Labs

Scope and Objectives

The primary scope of this tutorial is software abstract of non-volatile memory technologies. Thus, it will cover a bit of background on non-volatile memory itself (various candidate technologies and their properties, such as wear-out, latency, bandwidth, and connection technology). The focus, though, is on software use: how can systems expose non-volatile memory to programs for their use.

The objectives for this tutorial are that attendees understand current proposals on how to use non-volatile memory, what programming frameworks exist to use non-volatile memory today, what hardware exists/has been proposed to support non-volatile memory use.

Possible Topics

  1. Non-volatile memory technologies: 15 minutes
    This portion presents an overview of candidate NVM technologies and their properties, indicating what considerations software has.
  2. Non-volatile memory programming models: 1.5 hour
    This portion covers different programming models for using NVM, such as high-speed SSDs, file systems, persistent heaps, special-purpose persistent data structures, and how to incorporate NVM into databases.
  3. Hardware support for persistent memory: 45 minutes
    This portion describes proposed hardware that optimizes the implementation of NVM software. These efforts have largely focused on better support for consistency and durability.
  4. How to get started with available software: 40 minutes
    This portion describes available software packages from prior research projects, with the goal of letting researchers bootstrap their projects. We will discuss both programming systems and available workloads. We will go through the development cycle of writing, compiling, and running a simple persistent hash table (key-value store) as an illustrative example of using persistent memory.

Persistent Memory Reading List

Persistent Memory Software Packages

  • Mnemosyne. Mnemosyne provides a simple interface for programming with persistent memory. Mnemosyne addresses two challenges: how to create and manage such memory, and how to ensure consistency in the presence of failures. Without additional mechanisms, a system failure may leave data structures in SCM in an invalid state, crashing the program the next time it starts. Mnemosyne provides primitives for directly modifying persistent variables and supports consistent updates through a lightweight transaction mechanism.
  • NVM Library. The NVM Library is a library for using memory-mapped persistence, optimized specifically for persistent memory.
  • PMFS. PMFS is a file system for persistent memory. The file system is optimized to be lightweight and efficient in providing access to persistent memory that is directly accessible via CPU load/store instructions.
  • BPFS. BPFS is a file system designed for byte-addressable, persistent memory technologies (in particular, phase change memory). It uses these mediums and careful file system design to provide dramatically stronger durability and consistency guarantees to applications: BPFS commits each file system operation synchronously and atomically.
  • PCMSIM. A block device driver for Linux that simulates the presence of a Phase Change Memory (PCM), a type of a non-volatile (persistent) byte-addressable memory (NVBM), in the system installed in one of the DIMM slots on the motherboard. The simulator is implemented as a kernel module for Linux that creates /dev/pcm0 when it is loaded - a ramdisk-backed block devices with latencies that of PCM.


  1. Introduction
  2. NVM Technology
  3. Programming models for NVM
  4. Hardware support for NVM programming
  5. Getting started on NVM with available software