paperbot · PL 论文追踪

全部论文 待读 收藏

P2 Cross-Failure Bug Detection in Persistent Memory Programs

持久内存程序中的跨故障缺陷检测
ASPLOS Proceedings of the Twenty-Fifth International Conference on Architectural Support for Programming Languages and Operating Systems2020匹配度 1/10 · 论文聚焦持久内存程序的崩溃一致性缺陷检测,属于测试/调试与并发内存模型方向,与用户关注的静态分析、浮点程序分析、贝叶斯程序分析以及 LLM/Agent 与程序分析的交叉均无直接关联。引用 60 inbox
Sihang Liu, Korakit Seemakhupt, Yizhou Wei, Thomas Wenisch, Aasheesh Kolli, Samira Khan
crossref: 2026-09-12

AI 速览

一句话:提出 XFDetector,通过向故障前执行注入故障并检查故障后恢复,检测持久内存程序中的跨故障竞态与语义缺陷。

持久内存(PM)允许程序直接以字节粒度访问持久数据,但要求数据在崩溃后保持一致,即崩溃一致性保证。作者指出,能否一致恢复不仅取决于故障前的执行,也取决于故障后的恢复与续行,二者合称跨故障执行阶段。论文据此把崩溃一致性缺陷分为两类:故障后阶段读取在故障前所有访问交错中都未被保证持久化的位置(跨故障竞态),以及读取故障前遗留的语义不一致数据(如过期日志、未提交数据,即跨故障语义缺陷)。XFDetector 自动向故障前执行注入故障,在故障后续行中检测这两类缺陷,并在 PMDK 示例、PM 优化的 Redis 及 PMDK 库函数中发现 4 个新缺陷。

问题
持久内存程序必须在崩溃后一致恢复,而一致性不仅依赖故障前的执行,也依赖故障后的恢复,二者之间错误的交互会造成难以察觉的崩溃一致性缺陷。
方法
把跨故障缺陷区分为跨故障竞态与跨故障语义缺陷,并实现 XFDetector:自动向故障前执行注入故障,在故障后的续行中检查这两类缺陷。
评估
在三款 PM 软件(PMDK 示例、PM 优化的 Redis 数据库、PMDK 库函数)上评估,共检测出 4 个此前未知的缺陷。
原文摘要(Abstract)

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 原文 ·

BibTeX
@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}
}