AVPredictor: Comprehensive prediction and detection of atomicity violations

AVPredictor: Comprehensive prediction and detection of atomicity violations
复制标题

DOI:
10.1002/cpe.5160
复制
发表时间:
2019-02
期刊:
Concurrency and Computation: Practice and Experience
影响因子:
--
通讯作者:
Pengfei Wang;J. Krinke;Xu Zhou;Kai Lu
Pengfei Wang;J. Krinke;Xu Zhou;Kai Lu
中科院分区:
其他
文献类型:
--
作者:
Pengfei Wang;J. Krinke;Xu Zhou;Kai Lu

文献摘要

被引文献

相似文献

由于线程调度的不确定性,并发错误(如原子性违反错误)很难检测。当一个原子性违反bug可能被不同的bug交织触发时,进行彻底的bug修复特别困难。本文提出了一种基于预测的方法来全面检测原子性违反错误。当开发人员不能拥有所有的错误交织时,错误修复可能是不完整的。基于候选交织,该方法可以从非错误执行中预测未表现的原子性违反错误,并全面显示同一错误的所有错误交织,以帮助彻底修复。我们使用一个监视的执行记录执行跟踪和预测潜在的错误交织的基础上,从跟踪识别的候选交织。然后,我们使用受控执行来通过控制线程调度来验证预测的错误交织。我们实现了一个名为AVPredictor的原型工具,并通过真实的世界测试对其进行了评估。实验表明,AVPredictor可以有效地发现所有已知的原子性违反错误,以及以前未知的错误,以及每个错误的所有错误交织。运行时开销对于监视执行是13倍,对于受控执行是18倍。
Concurrency bugs, such as atomicity‐violation bugs, are difficult to detect due to the uncertainty of thread‐scheduling. It is particularly difficult to conduct a thorough bug fix when an atomicity‐violation bug can be triggered by different buggy interleavings. This paper proposes a prediction‐based approach to comprehensively detect atomicity‐violation bugs. A bug fix can be incomplete when the developer cannot have all the buggy interleavings. Based on the candidate interleavings, this approach can predict unmanifested atomicity‐violation bugs from a non‐buggy execution and comprehensively display all the buggy interleavings for the same bug to assist a thorough fix. We use a monitored execution to record execution traces and predict potential buggy interleavings based on the candidate interleavings identified from the trace. Then, we use controlled executions to verify the predicted buggy interleavings by controlling the thread‐scheduling. We implemented a prototype tool called AVPredictor and evaluated it with real‐world tests. Experiments show that AVPredictor can effectively find all the known atomicity‐violation bugs as well as a previously unknown bug together with all the buggy interleavings for each bug. The runtime overhead is 13x for the monitored execution and 18x for the controlled execution.