编译消除竞态检测开销
编程语言
2025-12-08 v1 操作系统
软件工程
摘要
动态数据竞争检测器是标志软件并发错误不可或缺的工具,但其高运行时开销限制了其采纳。这种开销主要源于对内存访问的普遍插入 Instrumentation——其中相当大一部分是冗余的。我们通过一种静态、编译器集成的方法识别并消除冗余的 Instrumentation,从而大幅降低动态数据竞争检测器的运行成本。我们引入一套对内存访问模式、同步和线程创建进行间过程静态分析的工具,以消除可被证明无竞争的访问的 Instrumentation,并证明数据竞争检测器的完备性属性得以保持。我们进一步观察到,许多插入的检查在同一内存位置上若要标记为竞争,仅当前一个检查已标记为等价竞争时才会如此——尽管可能在不同的访问位置。我们对这种等价性概念进行了表征,并表明在限制报告至少一个代表每个等价类的竞争时,进一步可消除一类冗余检查。我们通过一种新颖的支配关系消除分析来识别此类访问。基于这两个洞见,我们在 LLVM 中实现了五个静态分析,并与竞争检测器 ThreadSanitizer 的 Instrumentation 通道集成。我们对 diverse 实际应用的实验评估表明,我们的方法显著降低了竞争检测开销,在几何平均数下实现 1.34 倍加速,最高加速可达 2.5 倍(在高线程争用情况下)。这种性能通过编译时间的微小增加实现,而且由于完全自动化,不会给开发者带来额外负担。我们的优化已被 ThreadSanitizer 维护者采纳,正在上游集成。
引用
@article{arxiv.2512.05555,
title = {Compiling Away the Overhead of Race Detection},
author = {Alexey Paznikov and Andrey Kogutenko and Yaroslav Osipov and Michael Schwarz and Umang Mathur},
journal= {arXiv preprint arXiv:2512.05555},
year = {2025}
}
备注
35 pages