Defining a high-level programming model for emerging NVRAM technologies

Byte-addressable non-volatile memory is poised to become prevalent in the near future. Thanks to device-level technological advances, hybrid systems of traditional dynamic random-access memory (DRAM) coupled with non-volatile random-access memory (NVRAM) are already present and are expected to be commonplace soon. NVRAM offers orders of magnitude performance improvements over existing storage devices. Due to NVRAM's low overheads, many future applications are expected to leverage the fine-grain durable storage provided by NVRAM. Many frameworks for programming NVRAM have been proposed. Unfortunately, these existing frameworks closely mirror the underlying hardware. This lack of abstraction hurts programmer productivity, makes it easy to write buggy code, and limits the compiler's effectiveness. Furthermore, this low level of abstraction does not match the expectations of managed language users. To rectify this situation, in this paper we describe a new high-level NVRAM programming model amenable to managed languages. Because our model is defined at a high level, it is intuitive, not prone to user bugs, and is flexible enough to allow language implementers to perform many optimizations while still adhering to the model. In addition to proposing this model, we also briefly describe how Java can be extended to support our new model. Finally, we present some initial results on the performance overheads of creating durable applications in NVRAM and describe what future work we intend to complete.

[1]  Patrick Th. Eugster,et al.  NVthreads: Practical Persistence for Multi-threaded Applications , 2017, EuroSys.

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

[3]  Youyou Lu,et al.  Loose-Ordering Consistency for persistent memory , 2014, 2014 IEEE 32nd International Conference on Computer Design (ICCD).

[4]  Shih-Hung Chen,et al.  Phase-change random access memory: A scalable technology , 2008, IBM J. Res. Dev..

[5]  Michael Haupt,et al.  Maxine: An approachable virtual machine for, and in, java , 2013, TACO.

[6]  Hans-Juergen Boehm,et al.  Atlas: leveraging locks for non-volatile memory consistency , 2014, OOPSLA.

[7]  Satish Narayanasamy,et al.  Language-level persistency , 2017, 2017 ACM/IEEE 44th Annual International Symposium on Computer Architecture (ISCA).

[8]  Seyong Lee,et al.  NVL-C: Static Analysis Techniques for Efficient, Correct Programming of Non-Volatile Main Memory Systems , 2016, HPDC.

[9]  Luc Bläser,et al.  Persistent Oberon: A Programming Language with Integrated Persistence , 2007, APLAS.

[10]  Malcolm P. Atkinson,et al.  Orthogonal Persistence for the Java[tm] Platform: Specification and Rationale , 2000 .

[11]  Amer Diwan,et al.  The DaCapo benchmarks: java benchmarking development and analysis , 2006, OOPSLA '06.

[12]  Jun Yang,et al.  Phase-Change Technology and the Future of Main Memory , 2010, IEEE Micro.

[13]  J. Eliot B. Moss,et al.  Working with Persistent Objects: To Swizzle or Not to Swizzle , 1992, IEEE Trans. Software Eng..

[14]  B. Lewis,et al.  Eecient Barriers for Persistent Object Caching in a High-performance Java T M Virtual Machine , 1999 .

[15]  Samira Manabi Khan,et al.  Programming for Non-Volatile Main Memory Is Hard , 2017, APSys.

[16]  Hisashi Shima,et al.  Resistive Random Access Memory (ReRAM) Based on Metal Oxides , 2010, Proceedings of the IEEE.

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

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

[19]  Alonso Marquez,et al.  Implementing Orthogonally Persistent Java , 2000, POS.

[20]  Michael J. Carey,et al.  The design of the E programming language , 1993, TOPL.

[21]  Malcolm P. Atkinson,et al.  PS-algol: an algol with a persistent heap , 1982, SIGP.

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

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

[24]  Brian T. Lewis,et al.  Architecture of the PEVM: A High-Performance Orthogonally Persistent Java Virtual Machine , 2000, POS.

[25]  Antony L. Hosking,et al.  PM3: An Orthogonal Persistent Systems Programming Language - Design, Implementation, Performance , 1999, VLDB.

[26]  Malcolm P. Atkinson,et al.  A review of the rationale and architectures of PJama - a durable, flexible, evolvable and scalable orthogonally persistent programming platform , 2000, SMLI TR.

[27]  Quintin I. Cutts,et al.  Optimizing the Read and Write Barriers for Orthogonal Persistence , 1998, POS/PJW.

[28]  Michael M. Swift,et al.  An Analysis of Persistent Memory Use with WHISPER , 2017, ASPLOS.

[29]  Hans-Juergen Boehm,et al.  Persistence programming models for non-volatile memory , 2016, ISMM.

[30]  Malcolm P. Atkinson,et al.  The Design of a new Persistent Object Store for PJama , 2007 .

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

[32]  Vivek Singhal,et al.  Texas: An Efficient, Portable Persistent Store , 1992, POS.

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

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

[35]  Guy L. Steele,et al.  The Java Language Specification, Java SE 8 Edition , 2013 .