Atlas: leveraging locks for non-volatile memory consistency

Non-volatile main memory, such as memristors or phase change memory, can revolutionize the way programs persist data. In-memory objects can themselves be persistent without the need for a separate persistent data storage format. However, the challenge is to ensure that such data remains consistent if a failure occurs during execution. In this paper, we present our system, called Atlas, which adds durability semantics to lock-based code, typically allowing us to automatically maintain a globally consistent state even in the presence of failures. We identify failure-atomic sections of code based on existing critical sections and describe a log-based implementation that can be used to recover a consistent state after a failure. We discuss several subtle semantic issues and implementation tradeoffs. We confirm the ability to rapidly flush CPU caches as a core implementation bottleneck and suggest partial solutions. Experimental results confirm the practicality of our approach and provide insight into the overheads of such a system.

[1]  Peter Snyder,et al.  tmpfs: A Virtual Memory File System , 1990 .

[2]  Hamid Pirahesh,et al.  ARIES: a transaction recovery method supporting fine-granularity locking and partial rollbacks using write-ahead logging , 1998 .

[3]  Anoop Gupta,et al.  The SPLASH-2 programs: characterization and methodological considerations , 1995, ISCA.

[4]  Malcolm P. Atkinson,et al.  An orthogonally persistent Java , 1996, SGMD.

[5]  Maged M. Michael,et al.  Simple, fast, and practical non-blocking and blocking concurrent queue algorithms , 1996, PODC '96.

[6]  Vijay K. Garg Elements of distributed computing , 2002 .

[7]  Jeremy Manson,et al.  The Java memory model , 2005, POPL '05.

[8]  Milo M. K. Martin,et al.  Deconstructing Transactional Semantics: The Subtleties of Atomicity , 2005 .

[9]  Gene Cooperman,et al.  Transparent User-Level Checkpointing for the Native Posix Thread Library for Linux , 2006, PDPTA.

[10]  Dan Grossman,et al.  What do high-level memory models mean for transactions? , 2006, MSPC '06.

[11]  James R. Larus,et al.  Transactional Memory , 2006, Transactional Memory.

[12]  Suresh Jagannathan,et al.  Modular Checkpointing for Atomicity , 2007, TV@FLoC.

[13]  D. Stewart,et al.  The missing memristor found , 2008, Nature.

[14]  Hans-Juergen Boehm,et al.  Foundations of the C++ concurrency memory model , 2008, PLDI '08.

[15]  Kai Li,et al.  The PARSEC benchmark suite: Characterization and architectural implications , 2008, 2008 International Conference on Parallel Architectures and Compilation Techniques (PACT).

[16]  Adam Welc,et al.  Single global lock semantics in a weakly atomic STM , 2008, SIGP.

[17]  Hans-J. Boehm Transactional memory should be an implementation technique, not a programming interface , 2009 .

[18]  Michael M. Swift,et al.  xCalls: safe I/O in memory transactions , 2009, EuroSys '09.

[19]  Christopher Frost,et al.  Better I/O through byte-addressable, persistent memory , 2009, SOSP '09.

[20]  Onur Mutlu,et al.  Architecting phase change memory as a scalable dram alternative , 2009, ISCA '09.

[21]  Vijayalakshmi Srinivasan,et al.  Scalable high performance main memory system using phase-change memory technology , 2009, ISCA '09.

[22]  Håkan Grahn,et al.  Transactional memory , 2010, J. Parallel Distributed Comput..

[23]  Michael M. Swift,et al.  Mnemosyne: lightweight persistent memory , 2011, ASPLOS XVI.

[24]  Roy H. Campbell,et al.  Consistent and Durable Data Structures for Non-Volatile Byte-Addressable Memory , 2011, FAST.

[25]  Hans-Juergen Boehm,et al.  How to Miscompile Programs with "Benign" Data Races , 2011, HotPar.

[26]  Rajesh K. Gupta,et al.  NV-Heaps: making persistent objects fast and safe with next-generation, non-volatile memories , 2011, ASPLOS XVI.

[27]  Michael M. Swift,et al.  Hathi: durable transactions for memory using flash , 2012, DaMoN '12.

[28]  Hans-Juergen Boehm,et al.  Durability Semantics for Lock-based Multithreaded Programs , 2013, HotPar.

[29]  Thomas F. Wenisch,et al.  Memory persistency , 2014, 2014 ACM/IEEE 41st International Symposium on Computer Architecture (ISCA).

[30]  Sanjay Kumar,et al.  System software for persistent memory , 2014, EuroSys '14.