一句话:提出将无锁数据结构验证与内存回收解耦的静态分析方法,实现 Michael&Scott 和 DGLM 队列的全自动线性一致性验证。
并发数据结构的验证是软件验证中最具挑战性的任务之一。无垃圾回收时,无锁内存管理(如 hazard pointers、epoch-based reclamation)与数据结构本身交织,使自动化验证难以适用。本文提出将并发数据结构与其内存管理的验证解耦:第一个验证任务对内存管理的回收行为建立过近似;第二个任务利用该过近似验证数据结构,而无需考虑内存管理的具体实现。作者进一步证明,为实现自动化验证,只需考虑单个内存位置被重用的执行。该方法已实现,并成功全自动验证了 Michael&Scott 队列和 DGLM 队列在 hazard pointers 与 epoch-based reclamation 下的线性一致性;据作者所知,这是首次实现此类实现的完全自动验证。
Verification of concurrent data structures is one of the most challenging tasks in software verification. The topic has received considerable attention over the course of the last decade. Nevertheless, human-driven techniques remain cumbersome and notoriously difficult while automated approaches suffer from limited applicability. The main obstacle for automation is the complexity of concurrent data structures. This is particularly true in the absence of garbage collection. The intricacy of lock-free memory management paired with the complexity of concurrent data structures makes automated verification prohibitive. In this work we present a method for verifying concurrent data structures and their memory management separately. We suggest two simpler verification tasks that imply the correctness of the data structure. The first task establishes an over-approximation of the reclamation behavior of the memory management. The second task exploits this over-approximation to verify the data structure without the need to consider the implementation of the memory management itself. To make the resulting verification tasks tractable for automated techniques, we establish a second result. We show that a verification tool needs to consider only executions where a single memory location is reused. We implemented our approach and were able to verify linearizability of Michael&Scott's queue and the DGLM queue for both hazard pointers and epoch-based reclamation. To the best of our knowledge, we are the first to verify such implementations fully automatically.
@article{paperbot671,
title = {Decoupling lock-free data structures from memory reclamation for static analysis},
author = {Roland Meyer and Sebastian Wolff},
journal = {Proceedings of the ACM on Programming Languages},
volume = {3},
number = {POPL},
year = {2019},
doi = {10.1145/3290371}
}