NVL-C: Programming NVM as Persistent, High-Performance Main Memory

Motivation

  • Non-Volatile Memory (NVM) is any solid-state memory technology whose data is persistent across power loss. The primary NVM technology used today is flash in the form of solid-state disks (SSDs). Future technologies include PCM, STT-RAM, and ReRAM.
  • NVM main memory hierarchies are playing an increasingly significant role in most computing systems, such as mobile, enterprise, and HPC architectures. Much of this trend is because NVM devices offer advantages over DRAM memory or magnetic hard disk drives (HDDs) in terms of power, density, performance, or cost.
  • Initially, NVM devices have been integrated into existing systems in ways that hide the complexity from higher levels of software and applications: replacing an HDD with an SSD. However, as NVM technologies continue to improve, they become more credible for integration at other levels of the storage and memory hierarchy, such as either a peer or replacement for DRAM.
  • New memory systems will need to be exposed to applications as first-class language constructs with full support from the software development tools (e.g., compilers, libraries) to employ them efficiently, correctly, and portably.

NVL-C

  • NVL-C is a novel programming system that extends C with intuitive, language-level support for programming NVM as persistent, high-performance main memory.
  • NVL-C is designed to enable language features, compiler analyses, and run-time checks that guard against both software failures and hardware failures that can corrupt persistent data stored in NVM. For example, to enable recovery of data across failures, NVL-C includes a flexible directive for specifying NVM transactions.
  • NVL-C is a superset of C, so NVM features can be combined directly with traditional C memory model features for DRAM and HDD.
  • The NVL-C compiler front end is an extension of the OpenARC compiler framework.
  • So that the NVL-C compiler implementation might be extended to other compiler front ends and languages, the majority of the compiler analyses are implemented as an extension of the popular LLVM compiler infrastructure.
  • NVL-C's runtime currently uses Intel’s pmem library for low-level NVM memory management and transactions. However, the interface of the runtime is encapsulated so that pmem can easily be replaced by alternate runtime implementations in the future without adjusting the compiler.

Publications

Related Links

Contact

  • Joel E. Denny (Email: dennyje AT ornl DOT gov)