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' cs.wisc.edu
Computer Sciences Department
University of Wisconsin--Madison
haris.volos 'at' hp.com
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.
- Non-volatile memory technologies: 15 minutes
This portion presents an overview of candidate NVM technologies and their properties, indicating what considerations software has.
- 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.
- 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.
- 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
- Mnemosyne: Lightweight Persistent Memory. Haris Volos, Andres Jaan
Tack, Michael M. Swift . ASPLOS '11: Proceedings of the 16th
International Conference on Architectural Support for Programming
Languages and Operating Systems, March 2011.
Better I/O Through Byte-Addressable, Persistent Memory. Jeremy Condit,
Edmund B. Nightingale, Christopher Frost, Engin Ipek, Doug Burger,
Benjamin Lee, and Derrick Coetzee Proceedings of the 22nd Symposium on
Operating Systems Principles (SOSP 2009).
persistency. Steven Pelley, Peter M. Chen and Thomas F. Wenisch.
ISCA '14 Proceeding of the 41st annual international symposium on
Computer architecuture Pages 265-276
Consistency for persistent memory. Y Lu, J Shu, L Sun, O
Mutlu. IEEE International Conference on Computer Design (ICCD). 2014.
Closing the Performance Gap Between Systems With and Without
Persistence Support. Jishen Zhao, Sheng Li, Doe Hyun Yoon, Yuan
Xie, and Norman P. Jouppi. In Proceedings of the International
Symposium on Microarchitecture (MICRO), 2013
- WrAP: Managing
Byte-Addressable Persistent Memory. Ellis Giles, Kshitij Doshi,
Peter Varman, ACM Computing Frontiers, May 2013.
- Consistent and
Durable Data Structures for Non-Volatile Byte-Addressable
Memory. Shivaram Venkataraman, Niraj Tolia, Parthasarathy
Ranganathan and Roy H. Campbell. 9th USENIX Conference on File and
Storage Technologies, San Jose, CA, USA, February 15-17, 2011.
Software for Persistent Memory. Subramanya R Dulloor, Sanjay K
Kumar (Intel Labs), Anil Keshavamurthy (Intel Corp), Philip Lantz,
Dheeraj Subbareddy, Rajesh Sankaran, Jeff Jackson (Intel
Labs). EuroSys 2014. (Intel's paper on PMFS).
- Intel Architecture IInstruction Set Extensions Programming
Reference. Chapter 11 has new instructions for persistence.
Atlas: leveraging locks for non-volatile memory consistency Dhruva Chakrabarti, Hans-J. Boehm and Kumud Bhandari. OOPSLA 2014.
- Moneta: A High-Performance Storage Array Architecture for Next-Generation, Non-volatile Memories. Adrian M. Caulfield, Arup De, Joel Coburn, Todor I. Mollov, Rajesh K. Gupta, and Steven Swanson Proceedings of the 2010 43rd Annual IEEE/ACM International Symposium on Microarchitecture, 2010.
- Providing Safe, User Space Access to Fast, Solid State Disks . Adrian M. Caulfield, Todor I. Mollov, Louis Eisner, Arup De, Joel Coburn, and Steven Swanson Proceeding of the 17th international conference on Architectural support for programming languages and operating systems, 2012.
- Programming Models for Emerging Non-Volatile Memory Technologies. Andy Rudoff, ;login: June 2013, Volume 38, Number 3
- NV-Heaps: Making Persistent Objects Fast and Safe With Next-Generation, Non-Volatile Memories. Joel Coburn, Adrian M. Caulfield, Ameen Akel, Laura M. Grupp, Rajesh K. Gupta, Ranjit Jhala, and Steven Swanson Proceedings of the sixteenth international conference on Architectural support for programming languages and operating systems, 2011.
- Using Managed Runtime Systems to Tolerate Holes in Wearable Memories. T. Gao, K. Strauss, S. M. Blackburn, K. S. McKinley, D. Burger, and J. Larus. in PLDI ‘13: Proceedings of the 34th ACM SIGPLAN conference on Programming Language Design and Implementation, Seattle, WA, USA, June, 2013.
Persistent Memory Software Packages
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 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 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.
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.
- NVM Technology
- Programming models for NVM
- Hardware support for NVM programming
- Getting started on NVM with available software