Integrating non-volatile main memories (NVMMs) into the storage/memory hierarchy make data integrity a critical design consideration. Protecting data in NVMM is a complex problem: media errors and software bugs can corrupt data and the reliability of each memory cell degrades as it is used, potentially leading to premature failure. Hardware and software both have a role to play, but trying to solve problems in the wrong place can needlessly complicate the system, leave the system open to data corruption, and/or sacrifice performance.Read more
For decades, memory systems have relied on DRAM for capacity, SRAMs for speed and then turned programmers loose with malloc(), free(), and pthreads to build an amazing array of useful, carefully tuned, composable, and remarkably useful data structures. However, these data structures have been transient — swept away by the next reboot or system crash. To build something that lasts, programmers have worked with clunkier interfaces — open(), close(), read(), write() — to access glacially slow spinning or, lately, solid-state disks.