【24h】

ConSeq: Detecting Concurrency Bugs through Sequential Errors

机译:ConSeq:通过顺序错误检测并发错误

获取原文
获取原文并翻译 | 示例

摘要

Concurrency bugs are caused by non-deterministic interleavings between shared memory accesses. Their effects propagate through data and control dependences until they cause software to crash, hang, produce incorrect output, etc. The lifecycle of a bug thus consists of three phases: (1) triggering, (2) propagation, and (3) failure. Traditional techniques for detecting concurrency bugs mostly focus on phase (1)-i.e., on finding certain structural patterns of interleavings that are common triggers of concurrency bugs, such as data races. This paper explores a consequence-oriented approach to improving the accuracy and coverage of state-space search and bug detection. The proposed approach first statically identifies potential failure sites in a program binary (i.e., it first considers a phase (3) issue). It then uses static slicing to identify critical read instructions that are highly likely to affect potential failure sites through control and data dependences (phase (2)). Finally, it monitors a single (correct) execution of a concurrent program and identifies suspicious interleavings that could cause an incorrect state to arise at a critical read and then lead to a software failure (phase (1)). ConSeq's backwards approach, (3)→(2)→(1), provides advantages in bug-detection coverage and accuracy but is challenging to carry out. ConSeq makes it feasible by exploiting the empirical observation that phases (2) and (3) usually are short and occur within one thread. Our evaluation on large, real-world C/C++ applications shows that ConSeq detects more bugs than traditional approaches and has a much lower false-positive rate.
机译:并发错误是由共享内存访问之间不确定的交错引起的。它们的影响通过数据和控制相关性传播,直到导致软件崩溃,挂起,产生不正确的输出等为止。因此,错误的生命周期包括三个阶段:(1)触发,(2)传播和(3)故障。用于检测并发错误的传统技术主要集中在阶段(1)-即寻找交织的某些结构模式,这些结构是并发错误的常见触发因素,例如数据竞争。本文探索一种面向结果的方法,以提高状态空间搜索和错误检测的准确性和覆盖范围。所提出的方法首先静态地标识程序二进制文件中的潜在故障位置(即,它首先考虑了阶段(3)问题)。然后,它使用静态切片来识别关键读指令,这些关键读指令极有可能通过控制和数据依赖性来影响潜在的故障站点(阶段(2))。最后,它监视并发程序的单个(正确)执行,并识别可疑的交错,这些交错可能导致在关键读取时出现不正确的状态,然后导致软件故障(阶段(1))。 ConSeq的向后方法(3)→(2)→(1)在错误检测的覆盖范围和准确性方面具有优势,但执行起来很困难。通过利用经验观察,ConSeq使阶段(2)和(3)通常较短并且发生在一个线程中成为可能。我们对大型现实C / C ++应用程序的评估表明,与传统方法相比,ConSeq检测到更多的错误,并且假阳性率低得多。

著录项

相似文献

  • 外文文献
  • 中文文献
  • 专利
获取原文

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号