Programmers can utilize the upcoming non-volatile memory (NVM) technology in various ways. One appealing way is to directly store critical application data structures in NVM instead of serializing them to block-storage. Changing legacy code to achieve this, however, is laborious and prone to bugs. We present NVMOVE, a tool that simplifies this transition by analyzing the source code and automatically identifying persistent types, types that are serialized and persisted. Aided by this tool, programmers can modify their applications to allocate such persistent types on the non-volatile memory heap. Upon analyzing Redis, a key-value store with 122 struct types, NVMOVE identifies 25 types as persistent, with no false negatives and 11 false positives. We evaluate the benefits of NVMOVE by moving the identified persistent types in Redis onto a non-volatile memory heap. Redis modified in this manner offers full persistence of data, and performs within 78% of Redis with no persistence, achieving more than 2× the performance of Redis that performs logging on SSDs.








4th Workshop on Interactions of NVM/Flash with Operating Systems and Workloads (INFLOW 16)