TDT09 Topic 4


Avoiding memory loss - persistent main memories

Current main memories are mostly based on DRAM (dynamic random-access memory) or SRAM (static RAM) technologies, which store information as charge in capacitors or transistors. These memories are volatile, i.e. they only keep their contents as long as power is applied to the memory. Persistent (non-volatile) storage, such as flash memory, today is rather expensive and suffers from restrictions such as a very limited amount of write cycles, slow access speed, and the requirement to write information in blocks instead of single bytes.

Recent developments have created persistent main memory semiconductors which have a very large number of write cycles, provide byte-wide access and which have a read/write access speed on the same order of magnitude as normal RAM memories. In addition, they can be significantly cheaper than RAM. Examples are FRAMs in some MSP430 microcontrollers by Texas Instruments [1] and intel XPoint memory modules for server applications [2].

However, these new memories also come with a number of challenges, many of which are to be handled on the operating system and programming language side. Persistence as a high-level concept can already be found in early Lisp and Smalltalk [3] systems. An overview of early challenges of persistence in operating systems can be found in [4] with a more recent overview in [5]. One problem of these new memories is actually their persistence. In systems with volatile main memory, you can restart the system to obtain a clean state with empty memory. Persistent memory systems retain their contents, so e.g. it is more difficult to get rid of malware that managed to copy itself to the main memory of a system [6]. Another problem is that After the restart of a system, existing pointers may no longer be valid [7].

Persistent memory is an important topic on the hardware/software interface, since persistent main memories change the properties of a system's memory hierarchy. Future memory hierarchies will include volatile (registers, caches, scratch-pad memories) as well as non-volatile byte-accessible components. Operating systems and languages will have to be able to differentiate between memory types and handle allocations in novel ways. One approach for this can be found in [8].

References

  1. Texas Instruments. MSP430 FRAM Technology - How To and Best Practices. TI Application Report SLAA628A, 2014 pdf
  2. J. Liu and S. Chen, Initial Experience with 3D XPoint Main Memory, 2019 IEEE 35th International Conference on Data Engineering Workshops (ICDEW), Macao, Macao, 2019, pp. 300-305 link
  3. Andrew Straw, Fred Mellender and Steve Riegel. Object management in a persistent smalltalk system. Software Practice and Experience, Volume19, Issue8 link
  4. Alan Dearle and David Hulse. Operating system support for persistent systems: past, present and future. Software: Practice and Experience Volume 30 Issue 4, 2000 link
  5. Subramanya R. Dulloor, Sanjay Kumar, Anil Keshavamurthy, Philip Lantz, Dheeraj Reddy, Rajesh Sankaran, and Jeff Jackson. 2014. System software for persistent memory. In Proceedings of the Ninth European Conference on Computer Systems (EuroSys '14 link
  6. Pengfei Zuo, Yu Hua, and Yuan Xie. 2019. SuperMem: Enabling Application-transparent Secure Persistent Memory with Low Overheads. In Proceedings of MICRO '52 link
  7. Daniel Bittman, Peter Alvaro, and Ethan L. Miller. 2019. A Persistent Problem: Managing Pointers in NVM. In Proceedings of PLOS'19 link
  8. Marcel Köppen, Jana Traue, Christoph Borchert, Jörg Nolte, and Olaf Spinczyk. 2019. Cache-Line Transactions: Building Blocks for Persistent Kernel Data Structures Enabled by AspectC++. In Proceedings of PLOS'19 link