Mnemosyne: Lightweight Persistent Memory A memory is what is left when something happens and does not completely unhappen. Edward de Bono Haris Volos1 , Andres Jaan Tack2 , Michael M. Swift1 Computer Sciences Department, University of Wisconsin Madison 2 Skype Limited 1 {hvolos, swift}@cs.wisc.edu, 2 andres.jaan.tack@skype.net Abstract New storage-class memory (SCM) technologies, such as phasechange memory, STT-RAM, and memristors, promise user-level access to non-volatile storage through regular memory instructions. These memory devices enable fast user-mode access to persistence, allowing regular in-memory data structures to survive system crashes. In this paper, we present Mnemosyne, 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. In Mnemosyne, programmers declare global persistent data with the keyword pstatic or allocate it dynamically. Mnemosyne provides primitives for directly modifying persistent variables and supports consistent updates through a lightweight transaction mechanism. Compared to past work on disk-based persistent memory, Mnemosyne reduces latency to storage by writing data directly
/lp/association-for-computing-machinery/mnemosyne-lightweight-persistent-memory-Qu8mJyc3GK