Automated Verification of Linearization Policies

We present a novel framework for automated verification of linearizability for concurrent data structures that implement sets, stacks, and queues. The framework requires the user to provide a linearization policy, which describes how linearization point placement in different concurrent threads affect each other; such linearization policies are often provided informally together with descriptions of new algorithms. We present a specification formalism for linearization policies which allows the user to specify, in a simple and concise manner, complex patterns including non-fixed linearization points. To automate verification, we extend thread-modular reasoning to bound the number of considered threads, and use a novel symbolic representation for unbounded heap structures that store data from an unbounded domain. We have implemented our framework in a tool and successfully used it to prove linearizability for a wide range of algorithms, including all implementations of concurrent sets, stacks, and queues based on singly-linked lists that are known to us from the literature.

[1]  Constantin Enea,et al.  Verifying Concurrent Programs against Sequential Specifications , 2013, ESOP.

[2]  Mark Moir,et al.  Using elimination to implement scalable and lock-free FIFO queues , 2005, SPAA '05.

[3]  Viktor Vafeiadis,et al.  Shape-Value Abstraction for Verifying Linearizability , 2008, VMCAI.

[4]  Maurice Herlihy,et al.  The art of multiprocessor programming , 2020, PODC '06.

[5]  Constantin Enea,et al.  On Reducing Linearizability to State Reachability , 2015, ICALP.

[6]  John Derrick,et al.  A Sound and Complete Proof Technique for Linearizability of Concurrent Data Structures , 2014, TOCL.

[7]  Maged M. Michael,et al.  High performance dynamic lock-free hash tables and list-based sets , 2002, SPAA '02.

[8]  Timothy L. Harris,et al.  A Pragmatic Implementation of Non-blocking Linked-Lists , 2001, DISC.

[9]  Parosh Aziz Abdulla,et al.  Correction to: An integrated specification and verification technique for highly concurrent data structures , 2013, TACAS.

[10]  Eran Yahav,et al.  Deriving linearizable fine-grained concurrent objects , 2008, PLDI '08.

[11]  Lars Birkedal,et al.  Logical relations for fine-grained concurrency , 2013, POPL.

[12]  Mark Moir,et al.  Formal Verification of a Lazy Concurrent List-Based Set Algorithm , 2006, CAV.

[13]  Xinyu Feng,et al.  Modular verification of linearizability with non-fixed linearization points , 2013, PLDI 2013.

[14]  Thomas A. Henzinger,et al.  Aspect-Oriented Linearizability Proofs , 2013, CONCUR.

[15]  Viktor Vafeiadis Automatically Proving Linearizability , 2010, CAV.

[16]  John Derrick,et al.  How to Prove Algorithms Linearisable , 2012, CAV.

[17]  Maged M. Michael,et al.  Simple, fast, and practical non-blocking and blocking concurrent queue algorithms , 1996, PODC '96.

[18]  Keir Fraser,et al.  A Practical Multi-word Compare-and-Swap Operation , 2002, DISC.

[19]  Eran Yahav,et al.  Verifying linearizability with hindsight , 2010, PODC.

[20]  Mark Moir,et al.  DCAS is not a silver bullet for nonblocking algorithm design , 2004, SPAA '04.

[21]  Maurice Herlihy,et al.  Linearizability: a correctness condition for concurrent objects , 1990, TOPL.

[22]  Swarat Chaudhuri,et al.  Model Checking of Linearizability of Concurrent List Implementations , 2010, CAV.

[23]  Maurice Herlihy,et al.  A Lazy Concurrent List-Based Set Algorithm , 2005, OPODIS.

[24]  Thomas A. Henzinger,et al.  Automatic Linearizability Proofs of Concurrent Objects with Cooperating Updates , 2013, CAV.

[25]  Mark Moir,et al.  Formal Verification of a Practical Lock-Free Queue Algorithm , 2004, FORTE.

[26]  John Derrick,et al.  Quiescent Consistency: Defining and Verifying Relaxed Linearizability , 2014, FM.

[27]  Roman Manevich,et al.  Thread Quantification for Concurrent Shape Analysis , 2008, CAV.

[28]  Eran Yahav,et al.  Predicate Abstraction and Canonical Abstraction for Singly-Linked Lists , 2005, VMCAI.

[29]  Viktor Vafeiadis,et al.  Modular fine-grained concurrency verification , 2008 .

[30]  Eran Yahav,et al.  Comparison Under Abstraction for Verifying Linearizability , 2007, CAV.

[31]  Yujie Liu,et al.  Practical Non-blocking Unordered Lists , 2013, DISC.

[32]  Suresh Jagannathan,et al.  Poling: SMT Aided Linearizability Proofs , 2015, CAV.

[33]  Eran Yahav,et al.  Experience with Model Checking Linearizability , 2009, SPIN.

[34]  Maged M. Michael,et al.  Correction of a Memory Management Method for Lock-Free Data Structures , 1995 .

[35]  Nir Shavit,et al.  A scalable lock-free stack algorithm , 2010, J. Parallel Distributed Comput..