1 / 69

Program analysis & Synthesis

Lecture 09 – Synthesis of Synchronization. Program analysis & Synthesis. Eran Yahav. Previously . Predicate abstraction Abstraction refinement at a high level. Today. Synthesis of Synchronization. Verification Challenge. ?. P  S. With abstraction . ?. P   S. Now what?.

brad
Télécharger la présentation

Program analysis & Synthesis

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Lecture 09 – Synthesis of Synchronization Program analysis & Synthesis EranYahav

  2. Previously • Predicate abstraction • Abstraction refinement • at a high level

  3. Today • Synthesis of Synchronization

  4. Verification Challenge ? P  S

  5. With abstraction  ? P  S

  6. Now what? P  S P ’ S abstraction refinement

  7. A Standard Approach: Abstraction Refinement program Valid specification Abstract counterexample Verify abstraction Abstract counterexample  AbstractionRefinement Change the abstraction to match the program

  8. Alternatively… P  S P’ S program modification

  9. Abstraction-Guided Synthesis [VYY-POPL’10] program  P’ ProgramRestriction Implement specification Abstractcounterexample Verify abstraction Abstract counterexample  AbstractionRefinement Change the program to match the abstraction

  10. Alternatively… P  S P S’ change specification (but to what?)

  11. Focus on Program Modification • Given a program P, specification S, and an abstraction  such that P  S • find a modified program P’ such that P’  S • how do you find such a program? • very hard in general • there is some hope when considering equivalent programs or restricted programs • changing a program to add new legal behaviors is hard • program restriction natural in concurrent programs • reducing permitted schedules

  12. Example int x, y, sign; x = ?; if (x<0) { sign = -1; } else { sign = 1; } y = x/sign; x  [-,], sign   x  [-,-1], sign  [-1, -1] x  [0, ], sign  [1, 1] 0[-1,1] division by zero seems possible P  S x  [-, ], sign  [-1, 1] Specification S: no division by zero. Abstract domain : intervals Example from “The Trace Partitioning Abstract Domain” Rival&Mauborgne

  13. Now what? • Can use a more refined abstract domain • Disjunctive completion • abstract value = set (disjunction) of intervals int x, y, sign; x = ?; if (x<0) { sign = -1; } else { sign = 1; } y = x/sign; x  {[-,]}, sign   0 [-1, -1] and 0[1,1] division by zero impossible P ’S x  {[-,-1]}, sign  {[-1, -1]} x  {[0, ]}, sign  {[1, 1]} x  {[-, -1],[0, ]}, sign  {[-1, -1],[1,1]} Specification S: no division by zero. Abstract domain ’: set of intervals

  14. Are we done? • Exponential cost ! • Can we do better? • Idea: track relationship between x and sign x < 0  sign = -1 x >= 0  sign = 1 • Problem: again, expensive • Which relationships should I track? • Domains such as polyhedra won’t help (convex)

  15. Trace partitioning abstract domain • refine abstraction by adding some control history • won’t get into that • further reading • Rival and Mauborgne. The trace partitioning abstract domain. TOPLAS’07. • Holley and Rosen. Qualified data flow problems. POPL'80

  16. We can also change the program int x, y, sign; x = ?; if (x<0) { sign = -1; } else { sign = 1; } y = x/sign; int x, y, sign; x = ?; if (x<0) { sign = -1; y = x/sign; } else { sign = 1; y = x/sign; } P’ P

  17. Modified Program int x, y, sign; x = ?; if (x<0) { sign = -1; y = x/sign; } else { sign = 1; y = x/sign; } x  [-,], sign   0 [-1, -1] division by zero impossible x  [-,-1], sign  [-1, -1] x  [0, ], sign  [1, 1] 0 [1, 1] division by zero impossible x  [-, ], sign  [-1, 1] Specification S: no division by zero. Abstract domain : intervals

  18. Another Example while(e) { s; } … if (e) { s; while(e) { s; } } … P’ P

  19. Challenge: Correct and Efficient Synchronization Process 1 Process 2 Process 3 • Shared memory concurrent program • No synchronization: often incorrect (but “efficient”) • Coarse-grained synchronization: easy to reason about, often inefficient • Fine-grained synchronization: hard to reason about, programmer often gets this wrong

  20. Challenge: Correct and Efficient Synchronization Process 1 Process 2 Process 3 • Shared memory concurrent program • No synchronization: often incorrect (but “efficient”) • Coarse-grained synchronization: easy to reason about, often inefficient • Fine-grained synchronization: hard to reason about, programmer often gets this wrong

  21. Challenge: Correct and Efficient Synchronization Process 1 Process 2 Process 3 • Shared memory concurrent program • No synchronization: often incorrect (but “efficient”) • Coarse-grained synchronization: easy to reason about, often inefficient • Fine-grained synchronization: hard to reason about, programmer often gets this wrong

  22. Challenge Process 1 Process 2 Process 3 How to synchronize processes to achieve correctnessand efficiency?

  23. Synchronization Primitives • Atomic sections • Conditional critical region (CCR) • Memory barriers (fences) • CAS • Semaphores • Monitors • Locks • ....

  24. Example: Correct and Efficient Synchronization with Atomic Sections P1() P2() P3() { …………………………… ……………………. … } { ……………… …… …………………. ……………………. ………………………… } { ………………….. …… ……………………. ……………… …………………… } atomic atomic atomic Safety Specification: S

  25. Example: Correct and Efficient Synchronization with Atomic Sections P1() P2() P3() { …………………………… ……………………. … } Assist the programmer by automatically inferring correct and efficient synchronization { ……………… …… …………………. ……………………. ………………………… } { ………………….. …… ……………………. ……………… …………………… } Safety Specification: S

  26. Challenge • Find minimal synchronization that makes the program satisfy the specification • Avoid all bad interleavings while permitting as many good interleavings as possible • Assumption: we can prove that serial executions satisfy the specification • Interested in bad behaviors due to concurrency • Handle infinite-state programs

  27. Abstraction-Guided Synthesis of Synchronization • Synthesis of synchronization via abstract interpretation • Compute over-approximation of all possible program executions • Add minimal synchronization to avoid (over-approximation of) bad interleavings • Interplay between abstraction and synchronization • Finer abstraction may enable finer synchronization • Coarse synchronization may enable coarser abstraction

  28. Abstraction-Guided Synthesis program  P’ ProgramRestriction Implement specification Abstractcounterexample Verify abstraction Abstract counterexample  AbstractionRefinement Change the program to match the abstraction

  29. AGS Algorithm – High Level • Input: Program P, Specification S, Abstraction  • Output: Program P’ satisfying S under   = true while(true) { BadTraces = { |   (P ) and  S } if (BadTraces is empty) return implement(P,) select   BadTraces if (?) {  = avoid() if (  false)  =    else abort } else { ’ = refine(, ) if (’ )  = ’ else abort } }

  30. Avoid and Implement • Desired output – program satisfying the spec • Implementability guides the choice of constraint language • Examples • Atomic sections [POPL’10] • Conditional critical regions (CCRs) [TACAS’09] • Memory fences (for weak memory models) [FMCAD’10 + abstractions in progress] • …

  31. Avoiding an interleavingwith atomic sections • Adding atomicity constraints • Atomicity predicate [l1,l2] – no context switch allowed between execution of statements at l1 and l2 • avoid() • A disjunction of all possible atomicity predicates that would prevent  Thread A A1 A2 Thread B B1 B2  = A1B1A2B2 avoid() = [A1,A2]  [B1,B2]

  32. Avoid and abstraction •  = avoid() • Enforcing  avoids any abstract trace ’ such that ’   • Potentially avoiding “good traces” • Abstraction may affect our ability to avoid a smaller set of traces

  33. Example T1 1: x += z 2: x += z T2 1: z++ 2: z++ T3 1: y1 = f(x) 2: y2 = x 3: assert(y1 != y2) f(x) { if (x == 1) return 3 else if (x == 2) return 6 else return 5 }

  34. Example: Concrete Values y1 6 x += z; x += z; z++;z++;y1=f(x);y2=x;assert y1=5,y2=0 5 4 3 z++; x+=z; y1=f(x); z++; x+=z; y2=x;assert y1=3,y2=3 2 1 … y2 0 1 2 3 4 Concrete values T1 1: x += z 2: x += z T2 1: z++ 2: z++ T3 1: y1 = f(x) 2: y2 = x 3: assert(y1 != y2) f(x) { if (x == 1) return 3 else if (x == 2) return 6 else return 5 }

  35. Example: Parity Abstraction y1 6 5 4 y1 6 3 5 2 4 1 3 y2 0 1 2 3 4 2 1 Concrete values Parity abstraction (even/odd) y2 0 1 2 3 4 x += z; x += z; z++;z++;y1=f(x);y2=x;assert y1=Odd,y2=Even T1 1: x += z 2: x += z T2 1: z++ 2: z++ T3 1: y1 = f(x) 2: y2 = x 3: assert(y1 != y2) f(x) { if (x == 1) return 3 else if (x == 2) return 6 else return 5 }

  36. Example: Avoiding Bad Interleavings  = true while(true) { BadTraces={|(P ) and  S } if (BadTraces is empty) return implement(P,) select   BadTraces if (?) {  =   avoid() } else {  = refine(, ) } } avoid(1) = [z++,z++]  = [z++,z++]  = true

  37. Example: Avoiding Bad Interleavings  = true while(true) { BadTraces={|(P ) and  S } if (BadTraces is empty) return implement(P,) select   BadTraces if (?) {  =   avoid() } else {  = refine(, ) } } avoid(2) =[x+=z,x+=z]  = [z++,z++]  = [z++,z++][x+=z,x+=z]

  38. Example: Avoiding Bad Interleavings T1 1: x += z 2: x += z  = true while(true) { BadTraces={|(P ) and  S } if (BadTraces is empty) return implement(P,) select   BadTraces if (?) {  =   avoid() } else {  = refine(, ) } } T2 1: z++ 2: z++ T3 1: y1 = f(x) 2: y2 = x 3: assert(y1 != y2)  = [z++,z++][x+=z,x+=z]

  39. 6 Example: Avoiding Bad Interleavings T1 T1 T1 x+=z; x+=z x+=z; x+=z x+=z; x+=z 5 4 z++; z++; z++; z++; z++; z++; T2 T2 T2 3 T3 T3 T3 y1=f(x) y2=x assert y1!= y2 y1=f(x) y2=x assert y1!= y2 y1=f(x) y2=x assert y1!= y2 2 1 0 1 2 3 4 y1    parity parity parity 6 6 5 5 4 4 3 3 2 2 1 1 y2 0 1 2 3 4 0 1 2 3 4 But we can also refine the abstraction…

  40.   parity parity parity 6 6 T1 T1 T1 T1 T1 T1 T1 5 x+=z; x+=z x+=z; x+=z x+=z; x+=z x+=z; x+=z x+=z; x+=z x+=z; x+=z x+=z; x+=z 5 4 4 z++; z++; z++; z++; z++; z++; z++; z++; z++; z++; z++; z++; z++; z++; T2 T2 T2 T2 T2 T2 T2 3 3 2 T3 T3 T3 T3 T3 T3 T3 y1=f(x) y2=x assert y1!= y2 y1=f(x) y2=x assert y1!= y2 y1=f(x) y2=x assert y1!= y2 y1=f(x) y2=x assert y1!= y2 y1=f(x) y2=x assert y1!= y2 y1=f(x) y2=x assert y1!= y2 y1=f(x) y2=x assert y1!= y2 2 1 1 0 1 2 3 4 0 1 2 3 4 (a) (b) (c) interval interval   y1 6 6 6 5 5 5 4 4 4 3 3 3 2 2 2 1 1 1 0 1 2 3 4 y2 (d) (e) 0 1 2 3 4 0 1 2 3 4   octagon octagon 6 5 6 4 5 3 4 2 3 1 2 1 0 1 2 3 4 (f) (g) 0 1 2 3 4

  41. Multiple Solutions • Performance: smallest atomic sections • Interval abstraction for our example produces the atomicity constraint:([x+=z,x+=z] ∨ [z++,z++])∧ ([y1=f(x),y2=x] ∨ [x+=z,x+=z] ∨ [z++,z++]) • Minimal satisfying assignments • 1 = [z++,z++] • 2 = [x+=z,x+=z]

  42. AGS Algorithm – More Details Forward Abstract Interpretation, taking  into account for pruning infeasible interleavings • Input: Program P, Specification S, Abstraction  • Output: Program P’ satisfying S under   = true while(true) { BadTraces = { |   (P ) and  S } if (BadTraces is empty) return implement(P,) select   BadTraces if (?) {  = avoid() if (  false)  =    else abort } else { ’ = refine(, ) if (’ )  = ’ else abort } } Order of selection matters • Choosing between abstraction refinement and program restriction • not always possible to refine/avoid • may try and backtrack Backward exploration of invalid Interleavings using  to prune infeasible interleavings. Up to this point did not commit to a synchronization mechanism

  43. Choosing a trace to avoid 0,00,0 0,0E,E y=2 y=2 if (y==0) if (y==0) 0,1E,E 0,10,2 2,00,0 2,0E,E y=2 if (y==0) if (y==0) 1,10,2 1,1E,E 2,10,2 y=2 x++ x++ x+=1 2,21,2 2,1T,E 2,11,2 T1 0: if (y==0) goto L 1: x++ 2: L: T2 0: y=2 1: x+=1 2: assert x !=y x+=1 x+=1 x+=1 2,2T,E 2,22,2 legend pc1,pc2x,y

  44. Implementability • Separation between schedule constraints and how they are realized • Can realize in program: atomic sections, locks,… • Can realize in scheduler: benevolent scheduler • No program transformations (e.g., loop unrolling) • Memoryless strategy T1 1: while(*) { 2: x++ 3: x++ 4: } T2 1: assert (x != 1)

  45. Atomic sections results • If we can show disjoint access wecan avoid synchronization • Requires abstractions rich enough to capture access pattern to shared data Parity Intervals

  46. AGS with guarded commands • Implementation mechanism: conditional critical region (CCR) • Constraint language: Boolean combinations of equalities over variables (x == c) • Abstraction: what variables a guard can observe guard  stmt

  47. Avoiding a transition using a guard s1 x=1, y=1, z=0 • Add guard to z = y+1to prevent execution from state s1 • Guard for s1 : (x  1  y  1  z  0) • Can affect other transitions where z = y+1is executed y=x+1 z=y+1 s2 s3 x=1, y=2, z=0 x=1, y=1, z=2

  48. Example: full observability T1 1: x = z + 1 T2 1: y = x + 1 T3 1: z = y + 1 Specification: • (y = 2  z = 1) • No Stuck States Abstraction: { x, y, z }

  49. Build Transition System PC2 PC1 PC3 1,1,10,0,0 Z Y X 1,1,10,0,0 legend z=y+1 y=x+1 x=z+1 e,1,11,0,0 1,e,10,1,0 1,1,e0,0,1 y=x+1 z=y+1 z=y+1 y=x+1 x=z+1 x=z+1 e,e,11,2,0 e,1,e1,0,1 e,e,11,1,0 1,e,e0,1,2 e,1,e2,0,1 1,e,e0,1,1 y=x+1 y=x+1 z=y+1 x=z+1 x=z+1 z=y+1 e,e,e1,2,3 e,e,e1,2,1 e,e,e1,1,2 e,e,e3,1,2 e,e,e,2,3,1 e,e,e2,1,1

  50. Avoid transition 1,1,10,0,0 z=y+1 y=x+1 x=z+1 e,1,11,0,0 1,e,10,1,0 1,1,e0,0,1 y=x+1 z=y+1 z=y+1 y=x+1 x=z+1 x=z+1 e,e,11,2,0 e,1,e1,0,1 e,e,11,1,0 1,e,e0,1,2 e,1,e2,0,1 1,e,e0,1,1 y=x+1 y=x+1 z=y+1 x=z+1 x=z+1 z=y+1 e,e,e1,2,3 e,e,e1,2,1 e,e,e1,1,2 e,e,e3,1,2 e,e,e,2,3,1 e,e,e2,1,1

More Related