一句话:提出 XFDetector,通过向故障前执行注入故障并检查故障后恢复,检测持久内存程序中的跨故障竞态与语义缺陷。
持久内存(PM)允许程序直接以字节粒度访问持久数据,但要求数据在崩溃后保持一致,即崩溃一致性保证。作者指出,能否一致恢复不仅取决于故障前的执行,也取决于故障后的恢复与续行,二者合称跨故障执行阶段。论文据此把崩溃一致性缺陷分为两类:故障后阶段读取在故障前所有访问交错中都未被保证持久化的位置(跨故障竞态),以及读取故障前遗留的语义不一致数据(如过期日志、未提交数据,即跨故障语义缺陷)。XFDetector 自动向故障前执行注入故障,在故障后续行中检测这两类缺陷,并在 PMDK 示例、PM 优化的 Redis 及 PMDK 库函数中发现 4 个新缺陷。
Persistent memory (PM) technologies, such as Intel's Optane memory, deliver high performance, byte-addressability, and persistence, allowing programs to directly manipulate persistent data in memory without any OS intermediaries. An important requirement of these programs is that persistent data must remain consistent across a failure, which we refer to as the crash consistency guarantee. However, maintaining crash consistency is not trivial. We identify that a consistent recovery critically depends not only on the execution before the failure, but also on the recovery and resumption after failure. We refer to these stages as the pre- and post-failure execution stages. In order to holistically detect crash consistency bugs, we categorize the underlying causes behind inconsistent recovery due to incorrect interactions between the pre- and post-failure execution. First, a program is not crash-consistent if the post-failure stage reads from locations that are not guaranteed to be persisted in all possible access interleavings during the pre-failure stage -- a type of programming error that leads to a race that we refer to as a cross-failure race. Second, a program is not crash-consistent if the post-failure stage reads persistent data that has been left semantically inconsistent during the pre-failure stage, such as a stale log or uncommitted data. We refer to this type of bugs as a cross-failure semantic bug. Together, they form the cross-failure bugs in PM programs. In this work, we provide XFDetector, a tool that detects cross-failure bugs by automatically injecting failures into the pre-failure execution, and checking for cross-failure races and semantic bugs in the post-failure continuation. XFDetector has detected four new bugs in three pieces of PM software: one of PMDK's examples, a PM-optimized Redis database, and a PMDK library function.
DOI 原文 ·
@inproceedings{paperbot5461,
title = {Cross-Failure Bug Detection in Persistent Memory Programs},
author = {Sihang Liu and Korakit Seemakhupt and Yizhou Wei and Thomas Wenisch and Aasheesh Kolli and Samira Khan},
booktitle = {ASPLOS},
year = {2020},
doi = {10.1145/3373376.3378452}
}