570 likes | 680 Views
What Can Be Implemented Anonymously ?. Paper by Rachid Guerraui and Eric Ruppert. Presentation by Amir Anter. Talk outline. What is anonymously ? Motivation Anonymously implementation Counter Snapshot Consensus Summary. Talk outline. What is anonymously ?
E N D
What Can Be Implemented Anonymously ? Paper by RachidGuerraui and Eric Ruppert Presentation by Amir Anter
Talk outline • What is anonymously ? • Motivation • Anonymously implementation • Counter • Snapshot • Consensus • Summary
Talk outline • What is anonymously ? • Anonymously implementation • Counter • Snapshot • Consensus • Summary
What is anonymously ? • There is no unique identifiers for the processes.
Leader election in rings p0 1 2 1 2 p2 p1 2 1 • Each process has to decide whether it is a leader or not • Termination states are partitioned to elected and not-elected. • In every execution, exactly one process enters an elected state, all others enter a non-elected state. • We assume rings are oriented.
Leader election in anonymous rings p0 1 2 1 2 p2 p1 2 1 • A ring algorithm is anonymous if processes don’t have an ID they can use in the algorithm (all perform the same code) An anonymous leader election algorithm is… Impossible!!
Motivation • Sensor networks – Might not have id’s • Privacy: • Web servers • Peer-to-peer sharing systems
Talk outline • What is anonymously? • Anonymously implementation • Weak Counter • Snapshot • Consensus • Summary
Anonymously Implementation • Number of processes is know – n. • Shared memory – multi-reader, multi-writer. • Using registers • Crash failures may occur • Deterministic • Asynchronous
Wait freedom Definition: An algorithm is wait-free if a process invoking it will finish after a finite number of steps
Talk outline • What is anonymously? • Anonymously implementation • Weak Counter • Snapshot • Consensus • Summary
Fetch-and-add(w, d) do atomically prev:=w w:= prev+d return prev Atomic Counter Read-Modify-Write operation:
Atomic Counter Example: the sequential spec of a counter H0: H1: c.f&i() c:0H2: c.f&i() c:0 c.f&i() c:1 H3: c.f&i() c:0 c.f&i() c:1 c.f&i() c:2H4: c.f&i() c:0 c.f&i() c:1 c.f&i() c:2 c.f&i() c:3 ...
Atomic Counter It has been shown by Herlihy that fetch& increment object has no wait-free implementation from registers, even for the non anonymous case.
Anonymous Counter So how can we implement a counter only from registers and also anonymously ?!
Weak Counters • Single operation: GetTimestamp • Returns an integer • Properties: • Let GetTimestamp(t) = x, GetTimestamp(t’)=x’, If t≥t’ then x ≥x’. • If GetTimestamp was invoked n times then each of those invocation returned a value x ≤n. • Weaker version of fetch&increment. • Strong enough for our purposes.
Weak Counters Example: the sequential spec of a weak counter H0: H1: c.f&i() c:0H2: c.f&i() c:0 c.f&i() c:1 H3: c.f&i() c:0 c.f&i() c:1 c.f&i() c:1H4: c.f&i() c:0 c.f&i() c:1 c.f&i() c:1 c.f&i() c:2 ...
Weak Counters • Array A[1,2,…] of binary registers. • Initially each register A[i]=0. • Invariant: • If A[k]=1, then all entries A[1..k]=1. 1 2 3 4 A 1 1 1 0 0 0
Weak Counters 1 2 3 4 A 0 0 0 0 0 0
Weak Counters • a • Last location returned by the process’s previous GetTimestamp operation.
Weak Counters • L • Shared register initialized to 0. • When process change some A[b] to 1, it also writes b to L.
Weak Counters • j • Local variable • The number of times the process has seen L changes.
Weak Counters • t • Local variable • The largest value the process has seen in L.
Weak Counters 1 2 3 4 • Line 3, iteration # 1: a=1 , b=2 , l=2 • A[2]=1 A 1 1 0 0 0 0
Weak Counters 1 2 3 4 • Line 3, iteration # 2: a=1 , b=4 , l=2 • A[4]=0 A 1 1 0 0 0 0
Weak Counters 1 2 3 4 • Line 11, iteration # 1: a=1 , b=4 • mid=2 • A[2]=1 a=3 A 1 1 0 0 0 0
Weak Counters 1 2 3 4 • Line 11, iteration # 2: a=3 , b=4 • mid=3 • A[3]=0 b=3 A 1 1 0 0 0 0
Weak Counters 1 2 3 4 • Line 11, iteration # 3 • a=3=b A[3]=1 , L=3 A 1 1 1 0 0 0
Weak Counters • Wait freedom • The second loop stops – binary search. • The first loop stops • If j≥n then return t • In any finite execution in which k GetTimestamp operations are invoked: • O(k) registers are accessed. • Any operation takes O(log k).
Talk outline • What is anonymously? • Anonymously implementation • Weak Counter • Snapshot • Consensus • Summary
Snapshot object • R[1…n] registers • Operations • Scan • Returns a vector V, where V is an n-element vector called a view (with a value for each segment). • Update(d) • Process i writes d to R[i] V[i] must return the value of the latest Updatei operation (or the initial value if there were none) Scan returns a snapshot of the segments array that existed at some point during the execution!
A wait-free simulation of atomic snapshot Initially segment[i].ts=0, segment[i].data=vi, segment[i].view=<v0, …, vn-1> • Updatei(S, d) • view:=scan() • Segment[i]=<segment[i].ts+1, d, view> • Scani(S) • for all j <> i c[j]=Segment[j] • while true do • for all j a[j] = Segment[j] • for all j b[j] = Segment[j] • if, for all j a[j]=b[j] ; Comparison includes timestamp! • return <b[0].data, …, b[n-1].data> ; Direct scan • else if, for some j ≠ i, b[j].ts - c[j].ts≥ 2 • return b[j].view ; Indirect scan
Anonymous snapshot object • R[1…m] registers • Operations • Scan • Returns a vector V, where V is an m-element vector called a view (with a value for each segment). • Update(i,x) • Writes x to R[i]
Anonymous snapshot object • The algorithm is anonymous and wait-free. • The average number of steps per operation in any finite execution is
Talk outline • What is anonymously? • Anonymously implementation • Weak Counter • Snapshot • Consensus • Summary
Formally: Consensus Object • Supports a single operation: decide • Each process pi calls decide with some input vi from some domain. decide returns a value from the same domain. • The following requirements must be met: • Agreement: In any execution E, all decide operations must return the same value. • Validity: The values returned by the operations must equal one of the inputs.
FIFO queue + registers can implement 2-process consensus Initially Q=<0> and Prefer[i]=null, i=0,1 • Decide(v) ; code for pi, i=0,1 • Prefer[i]:=v • qval=Q.deq() • if (qval = 0) then return v • else return Prefer[1-i] There is a proof that wait-free consensus for 2 or more processes cannot be solved by registers.
Anonymous Consensus So how can we implement it only from registers and also anonymously ?!
Obstruction freedom • Obstruction-freedom guarantees that a process will complete its algorithm whenever it has an opportunity to take enough steps without interruption by other processes.
Consensus • The algorithm is using 8n+2 registers. • Anonymous • Uses anonymous snapshot object. • Obstruction free • Correct
Consensus - Obstruction freedom • Let’s see that if process is running by itself it eventually halts.
Consensus - Obstruction freedom • Let C be any configuration. • m is the maximum value of R in C. • P run by itself forever from C.
Consensus - Obstruction freedom • lap increases at least once every iterations • Eventually and • Now P will write values larger than m to in the next iterations.
Consensus - correctness • Let P’ be a process that decides 0 (without loss of generality). • Let T be the time P’ last scans R and S’ that scan. • We shall show that every other process that terminates also decides 0.
Consensus - correctness • Let m be the minimum value in • All values in are less than m.
Consensus - correctness • Claim 1: After T, at most n UPDATES write smaller value than m to R.