Morteza and Yi’s ASPLOS papers will appear at ASPLOS 2021! Morteza’s paper is the first to use static checks to enforce persistent memory safety properties and Yi’s developed a novel approach to replay in NVM transaction systems. Well done!
Fast, byte-addressable, persistent main memory (PM) makes it possible to build complex data structures that can survive system failures. PM offers numerous potential benefits including improved memory system capacity, lower-latency, and higher-bandwidth storage, and a unified programming model for persistent and volatile program state. However, it also poses a host of novel challenges. The challenges of programming correctly with PM are among the largest potential obstacles to the wide-spread adoption of PM and our ability to fully exploit its capabilities. If programmers cannot reliably write and modify code that correctly and safely modifies persistent data structures, PM will be hobbled as a storage technology.
Yi’s Clobber-NVM system is a failure-atomicity library that ensures data consistency by re-execution. Clobber-NVM’s novel logging strategy, clobber logging, records only those transaction inputs that are overwritten during transaction execution. Then, after a failure, it recovers to a consistent state by restoring overwritten inputs and re-executing any interrupted transactions. Clobber-NVM utilizes a clobber logging compiler pass for identifying the minimal set of writes that need to be logged. Based on our experiments, classical undo logging logs up to 41.5x more bytes than Clobber-NVM, and requires 2x to 6.7x more expensive ordering instructions. Less logging leads to better performance: Relative to prior art, Clobber-NVM provides up to 2.2x performance improvement over Mnemosyne, 2.7x over Intel’s PMDK, and up to 6.2x over HP’s Atlas. Clobber-NVM is a collaboration with the University of Colorado, Boulder Professor and former NVSL post-doc, Joe Izraelevitz.
Corundum is a full-featured persistent memory (PM) programming library for Rust. Corundum enforces several key PM safety invariants statically at compilation time. It lets programmers develop persistent data structures using familiar Rust constructs and have confidence that they will be free of the common PM-related bugs. The principled design of Rust’s type system allows us to nicely leverage permission-based reasoning approaches (e.g. separation logic and implicit dynamic frames logic) to provide PM safety. Our experiments show that Corundum’s performance is as good or better than Intel’s widely-used PMDK library while, unlike other PM libraries, safety is guaranteed.