[论文解读] Automatically finding atomic regions for fixing bugs in Concurrent programs
本论文提出AtomicInf,一种通过利用用户提供的断言和验证工具,自动推断最小原子区域以修复并发错误的技术。该方法高效计算出最小的强原子性修复方案及优化的弱原子性扩展,平均比先前方法快1.7倍,同时确保正确性并最大化并发性。
This paper presents a technique for automatically constructing a fix for buggy concurrent programs: given a concurrent program that does not satisfy user-provided assertions, we infer atomic blocks that fix the program. An atomic block protects a piece of code and ensures that it runs without interruption from other threads. Our technique uses a verification tool as a subroutine to find the smallest atomic regions that remove all bugs in a given program. Keeping the atomic regions small allows for maximum concurrency. We have implemented our approach in a tool called AtomicInf. A user of AtomicInf can choose between strong and weak atomicity semantics for the inferred fix. While the former is simpler to find, the latter provides more information about the bugs that got fixed. We ran AtomicInf on several benchmarks and came up with the smallest and the most precise atomic regions in all of them. We implemented an earlier technique to our setting and observed that AtomicInf is 1.7 times faster on an average as compared to an earlier approach.
研究动机与目标
- 解决自动生成有意义、最小化修复方案以修复并发错误的挑战,且不引入新行为。
- 确保修复方案保留所有正确的程序行为,同时仅消除错误的执行交错。
- 最小化原子块的大小,以最大化并发性并避免性能下降。
- 支持强原子性和弱原子性语义,其中弱原子性可提供对错误根本原因的更深层次洞察。
- 开发一种可扩展的、基于验证的方法,避免依赖数据竞争等症状,转而聚焦于用户定义的性质。
提出的方法
- 使用验证工具(例如Poirot)作为子程序,迭代发现并发程序中的错误执行路径。
- 采用两阶段方法:首先使用算法1在强原子性下计算最小修复方案,然后使用算法2和3在弱原子性下进行扩展。
- 对于弱原子性,将搜索范围限制在强原子性修复方案的超集内,以降低计算成本,同时保持最小化特性。
- 通过最小命中集(MHS)计算,识别出能阻断所有错误执行路径的最小程序点集合。
- 支持用户在强原子性和弱原子性语义之间进行选择,其中强原子性确保整个块的隔离性,而弱原子性允许其他弱原子块的并发执行。
- 与现成的验证工具集成,并通过迭代优化减少昂贵的验证查询次数。
实验结果
研究问题
- RQ1我们能否自动推断出修复并发程序中所有断言违规的最小原子区域?
- RQ2如何确保推断出的修复方案保留所有正确的程序行为,且不引入新错误?
- RQ3在修复质量与计算成本之间,使用强原子性与弱原子性语义的权衡是什么?
- RQ4我们能否在不牺牲最小化与精确性修复的前提下,减少昂贵的验证查询次数?
- RQ5与依赖数据竞争或原子性违规启发式方法的先前方法相比,所提出方法在性能和修复质量方面表现如何?
主要发现
- AtomicInf在所有测试基准上均计算出最小且最精确的原子区域,修复质量优于先前方法。
- 平均而言,AtomicInf比早期技术快1.7倍,且算法2显著减少了查询次数和运行时间。
- 在强原子性下,算法1与算法2均收敛到相同的最小修复方案,但算法2平均将查询次数减少20%,运行时间减少74%。
- 将弱原子性搜索限制在强原子性修复方案的超集内,既保持了修复质量,又避免了过度计算,对解集大小影响极小。
- 在所有基准中,计算出的修复方案均经人工验证为正确且最小,未包含任何无关的程序点。
- 在异常值基准BankAccount中,算法1平均查询次数是算法2的两倍,凸显了优化方法在可扩展性上的优势。
更好的研究,从现在开始
从阅读论文到最终审阅,大幅缩短您的研究时间。
无需绑定信用卡
本解读由 AI 生成,并经人工编辑审核。