Title: Comparison Under Abstraction for Verifying Linearizability
1Comparison Under Abstractionfor Verifying
Linearizability
Daphna Amit Noam Rinetzky Mooly Sagiv
Tom Reps
Eran Yahav
Tel Aviv University
University of Wisconsin
IBM T.J. Watson Research Center
2Verification Challenge
T2
T1
Tn
...
concurrent data structure
- Unbounded dynamically-allocated concurrent data
structure
- Non blocking stack Treiber, '86
- Non blocking queue Michael and Scott, PODC96
-
- Challenge automatically prove linearizability
3Linearizability Herlihy and Wing, TOPLAS'90
- Linearizable data structure
- Sequential specification defines legal sequential
executions
- Concurrent operations allowed to be interleaved
- Operations appear to execute atomically
- External observer gets the illusion that each
operation takes effect instantaneously at some
point between its invocation and its response
First Out
Last In
4Main Contributions
- A conservative automatic algorithm for verifying
linearizability
- Unbounded linked concurrent data structures
- Fixed (arbitrary) number of threads
- Implementation and experimental results
- A novel shape abstraction that allows comparison
between mutable linked data structures
5Our Approach
- Construct for every concurrent execution an
equivalent sequential execution
- Simultaneously manipulate 2 data structures
- Concurrent data structure (manipulated by
interleaved operations)
- Sequential data structure (manipulated by atomic
operations)
- Executable sequential specification
6Our Approach
- Construct for every concurrent execution an
equivalent sequential execution
- Compare results of matching operations
7Why Is It Challenging?
Main Observation
Show that the observable behavior along every
concurrent execution trace is equivalent to that
of a corresponding sequential execution trace
8Outline
- How to construct the sequential executions?
- How to compare unbounded heaps under
abstraction?
9Outline
- How to construct the sequential execution?
- Inspired by Flanagan, SPIN04
- How to compare unbounded heaps under
abstraction?
10Fixed Linearization Points
- Every operation has a (user-specified) fixed
linearization point
- A statement at which the operation appears to
take effect
- Show that these linearization points are correct
for every concurrent execution
- User may specify
- Several (alternative) linearization points
- Certain types of conditional linearization
points
11Verification of Fixed Linearization Points
- Compare each concurrent execution to a specific
sequential execution
- Show that every (terminating) concurrent
operation returns the same result as its
sequential counterpart
linearizationpoint
Concurrent Execution
...
linearizationpoint
compare results
Conjoined Execution
compare results
Sequential Execution
12Treiber's Non-Blocking Stack
3
1
4
Top
13Push Operation
void push (Stack ?S, data_type v)
Node ?x alloc(sizeof(Node))
x?d v do Node
?t S?Top x?n t w
hile ( ! CAS(S?Top, t, x
) )
3
1
4
if (S?Top t) S?Top x evaluate to true
else evaluate to false
14Pop Operation
data_type pop (Stack ?S) do
Node ?t S?Top
if (t NULL)
return EMPTY
Node ?s t?n
while ( !
CAS(S?Top, t, s) )
data_type r t?d re
turn r
3
1
4
7
return 7
15Example Conjoined Execution (1)
T1
T2
3
3
B push(7)
A push(4)
t
1
Top
Top
1
t
4
7
4
Top
Top
x
x
x
Linearization Point
ConcurrentStack
SequentialStack
16Example Conjoined Execution (2)
T1
T2
3
3
B push(7)
A push(4)
1
1
t
4
7
4
Top
Top
failed CAS
t
x
7
7
Top
Top
x
x
Linearization Point
ConcurrentStack
SequentialStack
17Example Conjoined Execution (3)
T1
T2
3
3
B push(7)
A push(4)
A pop()
1
1
4
4
Top
Top
s
s
7
7
Top
Top
t
t
matching return values
Linearization Point
ConcurrentStack
SequentialStack
18Conjoined Execution
3
3
3
3
linearization point
1
1
Top
Top
1
1
Top
Top
Throughout conjoined execution, two stacks remain
almost isomorphic
4
4
ConcurrentStack
SequentialStack
3
3
3
3
3
3
Top
1
1
1
Top
1
1
1
4
4
4
4
4
Top
Top
Top
Top
Atomic Operation
19Outline
- How to construct the sequential execution?
- How to compare unbounded heaps under
abstraction?
- Delta Abstraction
20Starting Point Canonical Abstraction SRW'02
n
n
n
1
3
4
7
x
21Concretization
22Comparison of Responses Under Abstraction
- Abstract Domain
- Separate abstractions will not do
Concrete Domain
?
?
?
Top
Top
ConcurrentStack
SequentialStack
ConcurrentStack
SequentialStack
23Main Idea
3
3
Isomorphic Sub-graphs
abstract away
1
1
4
4
Top
t
track precisely
7
Top
x
ConcurrentStack
SequentialStack
24Recording Isomorphism Using Correlation Relation
3
3
1
1
4
4
7
7
Top
Top
- All nodes are correlated
- Correlated nodes are similar (successors also
correlated or both null)
- Nodes pointed-to by Top are correlated
25Isomorphism Under Delta Abstraction
similar
3
3
similar
1
1
duo-object
similar
4
4
similar
7
7
Top
Top
26Isomorphism Under Delta Abstraction
Isomorphism Under Bounded Delta Abstraction
27Constructing the Correlation Relation
- Incrementally constructed during execution
- Nodes allocated by matching push operations are
correlated
- Correlated nodes have equal data values
- Show that matching pops return data values of
correlated nodes
28Conjoined Execution Under Abstraction (1)
T1
T2
B push(7)
A push(4)
t
Top
Top
t
similar
Top
Top
x
x
x
Linearization Point
ConcurrentStack
SequentialStack
29Conjoined Execution Under Abstraction (2)
T1
T2
B push(7)
A push(4)
t
similar
Top
Top
failed CAS
t
x
similar
Top
Top
x
x
Linearization Point
ConcurrentStack
SequentialStack
30Conjoined Execution Under Abstraction (3)
T1
T2
Partial isomorphism can be maintained under
abstraction since the difference between the
memory layouts is bounded
B push(7)
A push(4)
A pop()
Bounded difference may be at an unbounded
distance from the root
similar
Top
Top
matching return values
ConcurrentStack
SequentialStack
31Experimental Results
16,000
250,000
2
2
2
4
3
2
2
4
3
2
20,000
250
3 Doherty et al., FORTE'04 4 Vafeiadis et a
l., PPoPP'06
1 Treiber, '86 2 Michael and Scott, PODC96
32Related Methods
- Manual
- Rely-guarantee reasoning Vafeiadis et al.,
PPoPP'06
-
- Semi-automatic
- Proving simulation relation between I/O Automata
using PVSDoherty et al., FORTE'04
- Automatic
- Proving atomicity of procedures Wang and
Stoller, PPoPP'05
- ? More general
33Limitations
Future Work
- User-specified guess of fixed linearization
points
- User-specified fixed correlation rule
- Fixed number of threads
- Arbitrary in theory
- Small in practice (scalability)
- Assuming memory is garbage collected
34Summary
- A conservative automatic algorithm for verifying
linearizability of unbounded linked concurrent
data structures
- Sequential specification
- Conjoined executions
- Delta abstraction A novel heap abstraction
- Maintains an isomorphism between mutable linked
data structures under abstraction
- Implementation and experimental results
- Non blocking stack Treiber, '86
- Non blocking queue Michael and Scott, PODC96
Doherty et al., FORTE'04
- 2 lock queue Michael and Scott, PODC96
- Set with fine grained locking Vafeiadis et al.,
PPoPP'06
35Main Observation
36The End
MSc Thesis www.cs.tau.ac.il/amitdaph
37(No Transcript)
38Stack's Most-General Client
void client (Stack ?S) do if (?
) push(S, rand()) else pop(S)
while ( 1 )