- Main
Checking Robustness for Persistency Memory Programs
- Luo, Weiyu
- Advisor(s): Demsky, Brian
Abstract
Persistent memory (PM) technologies offer performance close to DRAM with persistence. Persistent memory enables programs to directly modify persistent data through normal load and store instructions bypassing heavyweight OS system calls for persistency. However, these stores are not immediately made persistent, developers must manually flush the corresponding cache lines to force the data to be written to persistent memory. While state-of-the-art testing tools can help developers find and fix persistency bugs, a prior study has shown that fixing persistency bugs on average takes a couple of weeks for PM developers. Developers have to manually inspect the execution to identify the root cause of the problem. In addition, most of the existing state-of-the-art testing tools require heavy user annotations to detect bugs without visible symptoms such as segmentation faults.
In this thesis, we present robustness as a sufficient correctness condition to ensure that program executions are free from bugs resulting from missing flushes. We present two approaches to for checking robustness, one dynamic and one static. We develop an algorithm for checking robustness and have implemented this algorithm in the dynamic PSan tool. PSan can help developers both identify silent data corruption bugs and localize bugs in large traces to the problematic memory operations that are missing flush operations. We have evaluated PSan on a set of concurrent indexes, persistent memory libraries, and two popular real-world applications. We found 48 bugs in these benchmarks that 17 of them were not reported before. While dynamic tools can help developers find missing flush instructions, they typically require test cases that reveal the bug. Test cases can be onerous to write and can easily miss covering critical bug revealing executions. Therefore, we also present PMRobust, a static analysis that can ensure that persistent memory code is free from all missing flush bugs. PMRobust does not require any test cases and reports all missing flush bugs. PMRobust’s analysis supports common persistent memory programming patterns and avoids reporting spurious bug reports for these patterns. We have evaluated PMRobust on persistent memory libraries and several persistent memory data structures. We have found a total of 80 bugs in popular PM benchmarks including 15 new bugs.
Main Content
Enter the password to open this PDF file:
-
-
-
-
-
-
-
-
-
-
-
-
-
-