430 likes | 618 Views
A Mile-High View of Concurrent Algorithms. Hagit Attiya Technion. A Simplistic View of Concurrent Systems. A collection of processes Each a sequential thread of execution Communicating through shared data structures. Alternative Routes for Developing Concurrent Algorithms.
E N D
A Mile-High View of Concurrent Algorithms Hagit AttiyaTechnion
A Simplistic View of Concurrent Systems A collection of processes Each a sequential thread of execution Communicating through shared data structures Concurrent algorithms @ COVA
Alternative Routes for Developing Concurrent Algorithms Refinement: Implementing high-level ADT from lower-level ADTs • Safety conditions, liveness properties • Hierarchical Transactional: Support for running sequential applications concurrently • Safety conditions, liveness properties Concurrent algorithms @ COVA
Abstract Data Types (ADT) Cover most concurrent applications At least encapsulate their data needs An object-oriented programming point of view Abstract representation of data& set of methods (operations) for accessing it Signature Specification data Concurrent algorithms @ COVA
Implementing High-Level ADT data data Concurrent algorithms @ COVA
Implementing High-Level ADT data data Using lower-level ADTs & procedures ------------------ ------------------- ------------------ ---------------- ---------------- --------------- ------------------ ------------------- Concurrent algorithms @ COVA
Lower-Level Operations High-level operations translate into primitives on base objects Obvious: read, write (restrictions?) Common: compare&swap (CAS) LL/SC, Double-CAS (2CAS, DCAS), kCAS, … Generic: read-modify-write (RMW), kRMW Low-level operations are often implemented from more primitive operations A hierarchy of implementations Concurrent algorithms @ COVA
Executing Operations invocation response P1 P2 P3 Concurrent algorithms @ COVA
Interleaving Operations Concurrent execution Concurrent algorithms @ COVA
Interleaving Operations (External) behavior Concurrent algorithms @ COVA
Interleaving Operations, or Not Sequential execution Concurrent algorithms @ COVA
Interleaving Operations, or Not Sequential behavior: invocations & response alternate and match (on process & object) Sequential specification: All the legal sequential behaviors, satisfying the semantics of the ADT E.g., for a (LIFO) stack: pop returns the last item pushed Concurrent algorithms @ COVA
Correctness: Sequential consistency [Lamport, 1979] For every concurrent execution there is a sequential execution that Contains the same operations Is legal (obeys the sequential specification) Preserves the order of operations by the same process Concurrent algorithms @ COVA
Sequential Consistency: Examples push(4) pop():4 push(7) push(4) pop():4 push(7) Concurrent (LIFO) stack First Out Last In Concurrent algorithms @ COVA
Sequential Consistency: Examples push(4) pop():7 push(7) Concurrent (LIFO) stack First Out Last In Concurrent algorithms @ COVA
Example 1: Multi-Writer Registers Add logical time (Lamport timestamps) to values Write(v) read TS1,...,read TSn TSi = max TSj +1 write v,TSi Read only own value Read() read v,TSi return v Once in a while read TS1,...,read TSn write max TSjto TSi ~[Attiya, Welch TOCS 1994] Using (multi-reader) single-writer registers Need to ensure writes are eventually visible Concurrent algorithms @ COVA
Multi-Writer Registers: Proof Write(v,X) read TS1,...,read TSn TSi = max TSj +1 write v,TSi Read(X) read v,TSi return v Once in a while read TS1,...,read TSn write max TSjto TSi • Create sequential execution: • Place writes in timestamp order • Insert reads after the appropriate write Concurrent algorithms @ COVA
Multi-Writer Registers: Proof • Create sequential execution: • Place writes in timestamp order • Insert reads after the appropriate write • Legality is immediate • Per-process order is preserved since a read returns a value (with timestamp) larger than the preceding write by the same process Concurrent algorithms @ COVA
Sequential Consistency is not Composable enq(Q1,X) enq(Q2,X) deq(Q1,Y) enq(Q2,Y) enq(Q1,Y) deq(Q2,X) The execution is not sequentially consistent Concurrent algorithms @ COVA
Sequential Consistency is not Composable enq(Q1,X) deq(Q1,Y) enq(Q1,Y) enq(Q2,X) enq(Q2,Y) deq(Q2,X) Bad news for verification! The execution projected on each object is sequentially consistent Concurrent algorithms @ COVA
Correctness: Linearizability [Herlihy & Wing, 1990] For every concurrent execution there is a sequential execution that Contains the same operations Is legal (obeys the specification of the ADTs) Preserves the real-time order of non-overlapping operations Each operation appears to takes effect instantaneously at some point between its invocation and its response (atomicity) Concurrent algorithms @ COVA
Linearizable Multi-Writer Registers Add logical time to values Write(v,X) read TS1,...,read TSn TSi = max TSj +1 write v,TSi Read(X) read TS1,...,read TSn return value with max TS [Vitanyi & Awerbuch, 1987] Using (multi-reader) single-writer registers Concurrent algorithms @ COVA
Multi-writer registers: Linearization order Write(v,X) read TS1,...,read TSn TSi = max TSj +1 write v,TSi • Create linearization: • Place writes in timestamp order • Insert each read after the appropriate write Read(X) read TS1,...,read TSn return value with max TS Concurrent algorithms @ COVA
Multi-Writer Registers: Proof • Create linearization: • Place writes in timestamp order • Insert each read after the appropriate write • Legality is immediate • Real-time order is preserved since a read returns a value (with timestamp) larger than all preceding operations Concurrent algorithms @ COVA
Linearizability is Composable The whole system is linearizable each object is linearizable Allows to implement and verify each object separately Good news for verification! Concurrent algorithms @ COVA
Example 3: Atomic Snapshot m components Update a single component Scan all the components “at once” (atomically) Provides an instantaneous view of the whole memory update scan v1,…,vm ok Concurrent algorithms @ COVA
Atomic Snapshots: Algorithm [Afek, Attiya, Dolev, Gafni, Merritt, Shavit, JACM 1993] double collect Update(v,k) A[k] = v,seqi,i • Scan() • repeat • read A[1],…,A[m] • read A[1],…,A[m] • if equal • return A[1,…,m] • Linearize: • Updates with their writes • Scans inside the double collects Concurrent algorithms @ COVA
read A[1],…,A[m] read A[1],…,A[m] write A[j] Atomic Snapshot: Linearizability Double collect (read a set of values twice) If equal, there is no write between the collects • Assuming each write has a new value (seq#) Creates a “safe zone”, where the scan can be linearized Concurrent algorithms @ COVA
Liveness Conditions (Eventual) • Wait-free: every operation completes within a finite number of (its own) steps • no starvation for mutex • Nonblocking: some operation completes within a finite number of (some other process) steps • deadlock-freedom for mutex • Obstruction-free: an operation (eventually) running solo completes within a finite number of (its own) steps • Also called solo termination wait-free nonblocking obstruction-free Concurrent algorithms @ COVA
Liveness Conditions (Bounded) • Wait-free: every operation completes within a bounded number of (its own) steps • no starvation for mutex • Nonblocking: some operation completes within a bounded number of (some other process) steps • deadlock-freedom for mutex • Obstruction-free: an operation (eventually) running solo completes within a bounded number of (its own) steps • Also called solo termination Bounded wait-free bounded nonblocking bounded obstruction-free Concurrent algorithms @ COVA
Wait-free Atomic Snapshot [Afek, Attiya, Dolev, Gafni, Merritt, Shavit, JACM 1993] • Embed a scan within the Update. Update(v,k) V = scan A[k] = v,seqi,i,V • Scan() • repeat • read A[1],…,A[m] • read A[1],…,A[m] • if equal • return A[1,…,m] • else record diff • if twice pj • return Vj direct scan • Linearize: • Updates with their writes • Direct scans as before • Borrowed scans with source borrowedscan Concurrent algorithms @ COVA
embedded scan read A[j] read A[j] read A[j] read A[j] … … … … … … … … write A[j] write A[j] Atomic Snapshot: Borrowed Scans Interference by process pj And another one… • pj does a scan inbeteween Linearizing with the borrowed scan is OK. Concurrent algorithms @ COVA
Alternative Routes for Developing Concurrent Algorithms Refinement: Implementing high-level ADT from lower-level ADTs • Safety conditions, liveness properties • Hierarchical Transactional: Support for running sequential applications concurrently • Safety conditions, liveness properties Concurrent algorithms @ COVA
The Transactional Approach [Herlihy, Moss, ISCA 1993] Systematic approach for implementing concurrent data structures Program sequentially But run concurrently Should appear to execute sequentially No high-level signature / semantics The sequential program is the specification Concurrent algorithms @ COVA
Transactional Synchronization A transaction aggregates a sequence of resource accesses to be executed atomically A sequence of atomic actions Like in database systems A transaction ends either by committing all its updates take effect or by aborting no update is effective Read X Write X Read Z Read Y Concurrent algorithms @ COVA
Safety: Serializability [Papadimitriou 79][Weikum, Vossen, 2002, Chapter 3] An analogue of sequential consistency Any interleaving of the transactions yields a result that could be achieved in a sequential execution of the same set of transactions (a serialization) Just the committed transactions?(Aborted transactions have no effect.) Final state serializability Concurrent algorithms @ COVA
Safety: View Serializability [Yannakakis 1984] What about intermediate values read? Could be “corrected” later But still cause harm, e.g., division by 0 Any interleaving of the transactions has an equivalent sequential execution of the same transactions Where all reads return the same value Makes no sense in the context of implementing a high-level ADT Where the internals are not exposed Concurrent algorithms @ COVA
Safety: Strict Serializability [Papadimitriou 79][Bernstein, Shipman & Wong, 1979] The serialization must preserve the real-time order of (non-overlapping) transactions An analogue of linearizability Called ordered serializabililty in W&V Strict view serializability Concurrent algorithms @ COVA
Opacity [Guerraoui & Kapalka, PPoPP 08] Essentially, strict view serializability Applied to all transactions (not only committed or completed ones) Generalized to arbitrary object types (not just reads and writes) Concurrent algorithms @ COVA
Liveness Properties • As in high-level implementations • But restricted to successful completions (commit) E.g., wait-freedom every transaction eventually commits,obsruction-freedom every transaction (eventually) running solo terminates Concurrent algorithms @ COVA
A Shift in Terminology < 2003 ≥ 2003 Lock-free Nonblocking Obstruction-free Obstruction-free Nonblocking Lock-free Wait-free Wait-free Concurrent algorithms @ COVA
Where’s the Confusion? [Herlihy & Wing, TOPLAS 1990] [Herlihy, TOPLAS 1991] [Herlihy, Luchangco, Moir, ICDCS 2003] Concurrent algorithms @ COVA
The Road Ahead • Concurrent algorithms pose a great challenge • It is “easy” to write • Correct algorithms and let efficiency take care of itself • Efficient algorithms and let correctness take care of itself • But very hard to write correct & efficient algorithms Systematically… Concurrent algorithms @ COVA