J-NVM: Off-heap Persistent Objects in Java

This paper presents J-NVM, a framework to access efficiently Non-Volatile Main Memory (NVMM) in Java. J-NVM offers a fully-fledged interface to persist plain Java objects using failure-atomic blocks. This interface relies internally on proxy objects that intermediate direct off-heap access to NVMM. The framework also provides a library of highly-optimized persistent data types that resist reboots and power failures. We evaluate J-NVM by implementing a persistent backend for the Infinispan data store. Our experimental results, obtained with a TPC-B like benchmark and YCSB, show that J-NVM is consistently faster than other approaches at accessing NVMM in Java.

[1]  Steven Swanson,et al.  Pronto: Easy and Fast Persistence for Volatile Data Structures , 2020, ASPLOS.

[2]  Perry Cheng,et al.  Demystifying magic: high-level low-level programming , 2009, VEE '09.

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

[4]  Robert C. Daley,et al.  The Multics virtual memory , 1972, Commun. ACM.

[5]  Haibo Chen,et al.  Espresso: Brewing Java For More Non-Volatility with Non-volatile Memory , 2017, ASPLOS.

[6]  Barbara Liskov,et al.  Distributed programming in Argus , 1988, CACM.

[7]  Malcolm P. Atkinson,et al.  Orthogonal Persistence for Java? - A Mid-term Report , 1998, POS/PJW.

[8]  Vinod Kumar Vavilapalli,et al.  Apache Hadoop YARN: Moving beyond MapReduce and Batch Processing with Apache Hadoop 2 , 2014 .

[9]  Michael M. Swift,et al.  MOD: Minimally Ordered Durable Datastructures for Persistent Memory , 2019, ASPLOS.

[10]  Michael L. Scott,et al.  Linearizability of Persistent Memory Objects Under a Full-System-Crash Failure Model , 2016, DISC.

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

[12]  Taesoo Kim,et al.  SplitFS: reducing software overhead in file systems for persistent memory , 2019, SOSP.

[13]  Guy L. Steele,et al.  The Java Language Specification , 1996 .

[14]  Komal Shringare,et al.  Apache Hadoop Goes Realtime at Facebook , 2015 .

[15]  Adel Taweel,et al.  Open Source In-Memory Data Grid Systems: Benchmarking Hazelcast and Infinispan , 2017, ICPE.

[16]  Onur Mutlu,et al.  Panthera: holistic memory management for big data processing over hybrid memories , 2019, PLDI.

[17]  Viktor Vafeiadis,et al.  Persistency semantics of the Intel-x86 architecture , 2019, Proc. ACM Program. Lang..

[18]  Erez Petrank,et al.  Efficient lock-free durable sets , 2019, Proc. ACM Program. Lang..

[19]  Elliott I. Organick,et al.  The multics system: an examination of its structure , 1972 .

[20]  Samira Manabi Khan,et al.  PMFuzz: test case generation for persistent memory programs , 2021, ASPLOS.

[21]  Jian Xu,et al.  NOVA-Fortis: A Fault-Tolerant Non-Volatile Main Memory File System , 2017, SOSP.

[22]  Thomas E. Anderson,et al.  Strata: A Cross Media File System , 2017, SOSP.

[23]  Guy E. Blelloch,et al.  Delay-Free Concurrency on Faulty Persistent Memory , 2018, SPAA.

[24]  Hans-Juergen Boehm,et al.  Makalu: fast recoverable allocation of non-volatile memory , 2016, OOPSLA.

[25]  Miguel Castro,et al.  Safe and efficient sharing of persistent objects in Thor , 1996, SIGMOD '96.

[26]  Jim Webber,et al.  A programmatic introduction to Neo4j , 2018, SPLASH '12.

[27]  Michael Coughlan Direct Access Files , 2014 .

[28]  Adam Silberstein,et al.  Benchmarking cloud serving systems with YCSB , 2010, SoCC '10.

[29]  Werner Vogels,et al.  Dynamo: amazon's highly available key-value store , 2007, SOSP.

[30]  Viktor Vafeiadis,et al.  Weak persistency semantics from the ground up: formalising the persistency semantics of ARMv8 and transactional models , 2019, Proc. ACM Program. Lang..

[31]  Pedro Ramalhete,et al.  Persistent memory and the rise of universal constructions , 2020, EuroSys.

[32]  Josep Torrellas,et al.  AutoPersist: an easy-to-use Java NVM framework based on reachability , 2019, PLDI.

[33]  Prashant Malik,et al.  Cassandra: a decentralized structured storage system , 2010, OPSR.

[34]  Michael Wu,et al.  eNVy: a non-volatile, main memory storage system , 1994, ASPLOS VI.

[35]  Xiao Liu,et al.  Basic Performance Measurements of the Intel Optane DC Persistent Memory Module , 2019, ArXiv.

[36]  Richard E. Jones,et al.  The Garbage Collection Handbook: The art of automatic memory management , 2011, Chapman and Hall / CRC Applied Algorithms and Data Structures Series.

[37]  Maurice Herlihy,et al.  A persistent lock-free queue for non-volatile memory , 2018, PPoPP.

[38]  Samuel B. Williams,et al.  ASSOCIATION FOR COMPUTING MACHINERY , 2000 .

[39]  Pascal Felber,et al.  Romulus: Efficient Algorithms for Persistent Transactional Memory , 2018, SPAA.

[40]  Hagar Meir,et al.  Oak: a scalable off-heap allocated key-value map , 2020, PPoPP.

[41]  Mohit Verma,et al.  go-pmem: Native Support for Programming Persistent Memory in Go , 2020, USENIX Annual Technical Conference.

[42]  Thierry Coupaye,et al.  ASM: a code manipulation tool to implement adaptable systems , 2002 .

[43]  Jan Vitek,et al.  Schism: fragmentation-tolerant real-time garbage collection , 2010, PLDI '10.

[44]  Leslie Lamport,et al.  On-the-fly garbage collection: an exercise in cooperation , 1975, CACM.

[45]  Reynold Xin,et al.  Apache Spark , 2016 .

[46]  Irene Zhang,et al.  Persistent State Machines for Recoverable In-memory Storage Systems with NVRam , 2020, OSDI.

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

[48]  Jian Huang,et al.  QuickCheck: using speculation to reduce the overhead of checks in NVM frameworks , 2019, VEE.

[49]  Ronald Morrison,et al.  Orthogonally persistent object systems , 1995, The VLDB Journal.

[50]  David Detlefs,et al.  Garbage-first garbage collection , 2004, ISMM '04.

[51]  Taesoo Kim,et al.  Recipe: converting concurrent DRAM indexes to persistent-memory indexes , 2019, SOSP.