Practical Formal Verification of MPI and Thread Programs

  • Slides: 50
Download presentation
Practical Formal Verification of MPI and Thread Programs Sarvani Vakkalanka Anh Vo* Michael De.

Practical Formal Verification of MPI and Thread Programs Sarvani Vakkalanka Anh Vo* Michael De. Lisi Sriram Aananthakrishnan Alan Humphrey Christopher Derrick Yu Yang Ganesh Gopalakrishnan* Robert M. Kirby* * = presenters School of Computing, University of Utah, Salt Lake City, UT 84112, USA http: // www. cs. utah. edu / formal_verification / europvm 09 -tutorial-mpi-threading-fv Supported by NSF CNS 0509379, CCF 0811429, CCF 0903408, SRC tasks TJ 1847. 001 and TJ 1993, and Microsoft 1

Additional Acknowledgements for this tutorial • Other students involved: Salman Pervez, Robert Palmer, Guodong

Additional Acknowledgements for this tutorial • Other students involved: Salman Pervez, Robert Palmer, Guodong Li, Geof Sawaya, Subodh Sharma, Grzegorz Szubzda, Jason Williams, Simone Atzeni, Wei-Fan Chiang • External Collaborators: ANL / UIUC : Rajeev Thakur, Bill Gropp, Rusty Lusk IBM : Beth Tibbits LLNL : Bronis de Supinski, Martin Schulz, Dan Quinlan Microsoft : Robert Palmer, Dennis Crain, Shahrokh Mortazavi

9: 00 to 10: 30 • • • Overview of Formal Verification, especially Dynamic

9: 00 to 10: 30 • • • Overview of Formal Verification, especially Dynamic Verification Overview of MPI Demo of our tool ISP Architecture of ISP Presentation of Any_src_can_deadlock (from Umpire test suite) Our algorithm POE (Partial Order avoiding Elusive interleavings) Presentation of POE-Illustration Present details of POE-Illustration: ISP’s Eclipse framework and GUI Boot into Live. DVD and practice on POE-Illustration

10: 30 to 11: 00 • Coffee Break • IMPORTANT : Please give feedback

10: 30 to 11: 00 • Coffee Break • IMPORTANT : Please give feedback before it is too late • Too fast ? • Too slow ? • Just right !! ? • Assuming a lot ? • Other suggestions ? • We will TRY to take into account these valuable suggestions!

11: 00 to 12: 00 • • • Illustration of Resource Dependent Deadlocks, and

11: 00 to 12: 00 • • • Illustration of Resource Dependent Deadlocks, and Detection Illustration of Resource Leak, and Detection Iprobe behavior, and illustration using GUI Assertion Violation in Red/Blue Problem Audience Participation in Above Exercises ISP’s Theory : MPI Happens-before • Also called “matches before, completes before” in the tool

12: 00 to 12: 30 • Example of Matrix Multiplication: Four Variations • Analysis

12: 00 to 12: 30 • Example of Matrix Multiplication: Four Variations • Analysis of these variations using ISP, with Audience Participation

14: 00 to 15: 00 • Assisted Problem Solving by Audience

14: 00 to 15: 00 • Assisted Problem Solving by Audience

15: 00 to 15: 30 • Overview of Dynamic Verification of Shared Memory Thread

15: 00 to 15: 30 • Overview of Dynamic Verification of Shared Memory Thread Programs

16: 00 to 17: 30 • Dynamic Verification of Thread Programs using Inspect •

16: 00 to 17: 30 • Dynamic Verification of Thread Programs using Inspect • Concluding Remarks

Overview of Formal Verification methods for Validating Concurrent Systems About 30 minutes – by

Overview of Formal Verification methods for Validating Concurrent Systems About 30 minutes – by Ganesh 10

Problem: Engineering Reliable Concurrent Systems 11

Problem: Engineering Reliable Concurrent Systems 11

For many important reasons, we advocate Dynamic Formal Verification methods • Designers require a

For many important reasons, we advocate Dynamic Formal Verification methods • Designers require a push-button debugger-like interface – But one that offers coverage guarantees and deeper insights

For many important reasons, we advocate Dynamic Formal Verification methods • Testing methods suffer

For many important reasons, we advocate Dynamic Formal Verification methods • Testing methods suffer from bug omissions Bug Omissions X 13

For many important reasons, we advocate Dynamic Formal Verification methods • Testing methods suffer

For many important reasons, we advocate Dynamic Formal Verification methods • Testing methods suffer from bug omissions • Static analysis methods generate many false alarms Bug Omissions X False Alarms X 14

For many important reasons, we advocate Dynamic Formal Verification methods • Testing methods suffer

For many important reasons, we advocate Dynamic Formal Verification methods • Testing methods suffer from bug omissions • Static analysis methods generate many false alarms • Model based verification requires tedious model building Bug Omissions X False Alarms X Tedious Modeling X 15

For many important reasons, we advocate Dynamic Formal Verification methods • • Testing methods

For many important reasons, we advocate Dynamic Formal Verification methods • • Testing methods suffer from bug omissions Static analysis methods generate many false alarms Model based verification requires tedious model building Dynamic verification methods are ideal for designers! Bug Omissions X False Alarms X Tedious Modeling X • No omissions • No false alarms • No need for modeling √ 16

Growing Importance of Dynamic Verification Code written using mature libraries (MPI, Open. MP, PThreads,

Growing Importance of Dynamic Verification Code written using mature libraries (MPI, Open. MP, PThreads, …) API calls made from real programming languages (C, Fortran, C++) Runtime semantics determined by realistic compilers and runtimes Dynamic Verification Methods are going to be very important for real engineers ! (static analysis and model based verification can play important supportive roles) 17

A Brief Survey of Dynamic Verification tools • Verisoft Project – Used for telephone

A Brief Survey of Dynamic Verification tools • Verisoft Project – Used for telephone switch software verification in Bell Labs – Available

A Brief Survey of Dynamic Verification tools • Verisoft Project – Used for telephone

A Brief Survey of Dynamic Verification tools • Verisoft Project – Used for telephone switch software verification in Bell Labs – Available • The Java Pathfinder Project – Developed at NASA for Java Control Software – On Source. Forge

A Brief Survey of Dynamic Verification tools • Verisoft Project – Used for telephone

A Brief Survey of Dynamic Verification tools • Verisoft Project – Used for telephone switch software verification in Bell Labs – Available • The Java Pathfinder Project – Developed at NASA for Java Control Software – On Source. Forge • The CHESS Project – Microsoft Research ; available for academic institutions – In use within Microsoft product groups, and used by academics

A Brief Survey of Dynamic Verification tools • Verisoft Project – Used for telephone

A Brief Survey of Dynamic Verification tools • Verisoft Project – Used for telephone switch software verification in Bell Labs – Available • The Java Pathfinder Project – Developed at NASA for Java Control Software – On Source. Forge • The CHESS Project – Microsoft Research ; available for academic institutions – In use within Microsoft product groups, and used by academics • Inspect : Our fairly unique Pthread / C verifier – Discussed in this tutorial

A Brief Survey of Dynamic Verification tools • Verisoft Project – Used for telephone

A Brief Survey of Dynamic Verification tools • Verisoft Project – Used for telephone switch software verification in Bell Labs – Available • The Java Pathfinder Project – Developed at NASA for Java Control Software – On Source. Forge • The CHESS Project – Microsoft Research ; available for academic institutions – In use within Microsoft product groups, and used by academics • Inspect : Our fairly unique Pthread / C verifier – Discussed in this tutorial • ISP : Our very unique MPI / C program verifier – Main focus of THIS TUTORIAL !!

Example : How ISP Effects Dynamic Verification – Through PMPI • Runs the code

Example : How ISP Effects Dynamic Verification – Through PMPI • Runs the code under a verification scheduler – ‘Hijacks’ native scheduler • By interposing a profiler – Exerts its own Interleaving Generation Control • Selective replay, Dynamic Instruction Rewriting – TRIES HARD to generate only RELEVANT interleavings • Only replays around “non-determinism” – Does ‘stateless’ (replay) verification • Restarts from MPI_Init for each new interleaving

Example : How ISP Effects Dynamic Verification • Somehow Instruments the Source / Binary

Example : How ISP Effects Dynamic Verification • Somehow Instruments the Source / Binary – Through PMPI • Runs the code under a verification scheduler – ‘Hijacks’ native scheduler • By interposing a profiler – Exerts its own Interleaving Generation Control • Selective replay, Dynamic Instruction Rewriting – TRIES HARD to generate only RELEVANT interleavings • Only replays around “non-determinism” – Does ‘stateless’ (replay) verification • Restarts from MPI_Init for each new interleaving

Example : How ISP Effects Dynamic Verification • Somehow Instruments the Source / Binary

Example : How ISP Effects Dynamic Verification • Somehow Instruments the Source / Binary – Through PMPI at source level • Runs the code under a verification scheduler – ‘Hijacks’ native scheduler • By interposing a profiler – Exerts its own Interleaving Generation Control • Selective replay, Dynamic Instruction Rewriting – TRIES HARD to generate only RELEVANT interleavings • Only replays around “non-determinism” – Does ‘stateless’ (replay) verification • Restarts from MPI_Init for each new interleaving

Example : How ISP Effects Dynamic Verification • Somehow Instruments the Source / Binary

Example : How ISP Effects Dynamic Verification • Somehow Instruments the Source / Binary – Through PMPI • Runs the code under a verification scheduler – ‘Hijacks’ native scheduler • By interposing a profiler – Exerts its own Interleaving Generation Control • Selective replay, Dynamic Instruction Rewriting – TRIES HARD to generate only RELEVANT interleavings • Only replays around “non-determinism” – Does ‘stateless’ (replay) verification • Restarts from MPI_Init for each new interleaving

Example : How ISP Effects Dynamic Verification • Somehow Instruments the Source / Binary

Example : How ISP Effects Dynamic Verification • Somehow Instruments the Source / Binary – Through PMPI • Runs the code under a verification scheduler – ‘Hijacks’ MPI Function Calls • By interposing a profiler – Exerts its own Interleaving Generation Control • Selective replay, Dynamic Instruction Rewriting – TRIES HARD to generate only RELEVANT interleavings • Only replays around “non-determinism” – Does ‘stateless’ (replay) verification • Restarts from MPI_Init for each new interleaving

Example : How ISP Effects Dynamic Verification • Somehow Instruments the Source / Binary

Example : How ISP Effects Dynamic Verification • Somehow Instruments the Source / Binary – Through PMPI • Runs the code under a verification scheduler – ‘Hijacks’ MPI Function Calls • By interposing a profiler – Exerts its own Interleaving Generation Control • Selective replay, Dynamic Instruction Rewriting – TRIES HARD to generate only RELEVANT interleavings • Only replays around “non-determinism” – Does ‘stateless’ (replay) verification • Restarts from MPI_Init for each new interleaving

Example : How ISP Effects Dynamic Verification • Somehow Instruments the Source / Binary

Example : How ISP Effects Dynamic Verification • Somehow Instruments the Source / Binary – Through PMPI • Runs the code under a verification scheduler – ‘Hijacks’ MPI Function Calls • By interposing a profiler – Exerts its own Interleaving Generation Control • Selective replay, Dynamic Instruction Rewriting – TRIES HARD to generate only RELEVANT interleavings • Only replays around “non-determinism” – Does ‘stateless’ (replay) verification • Restarts from MPI_Init for each new interleaving

Example : How ISP Effects Dynamic Verification • Somehow Instruments the Source / Binary

Example : How ISP Effects Dynamic Verification • Somehow Instruments the Source / Binary – Through PMPI • Runs the code under a verification scheduler – ‘Hijacks’ MPI Function Calls • By interposing a profiler – Exerts its own Interleaving Generation Control • Selective replay, Dynamic Instruction Rewriting – TRIES HARD to generate only RELEVANT interleavings • Only replays around “non-determinism” – Does ‘stateless’ (replay) verification • Restarts from MPI_Init for each new interleaving

Example : How ISP Effects Dynamic Verification • Somehow Instruments the Source / Binary

Example : How ISP Effects Dynamic Verification • Somehow Instruments the Source / Binary – Through PMPI • Runs the code under a verification scheduler – ‘Hijacks’ MPI Function Calls • By interposing a profiler – Exerts its own Interleaving Generation Control • Selective replay, Dynamic Instruction Rewriting – TRIES HARD to generate only RELEVANT interleavings • Only replays around “non-determinism” – Does ‘stateless’ (replay) verification • Restarts from MPI_Init for each new interleaving

Example : How ISP Effects Dynamic Verification • Somehow Instruments the Source / Binary

Example : How ISP Effects Dynamic Verification • Somehow Instruments the Source / Binary – Through PMPI • Runs the code under a verification scheduler – ‘Hijacks’ MPI Function Calls • By interposing a profiler – Exerts its own Interleaving Generation Control • Selective replay, Dynamic Instruction Rewriting – TRIES HARD to generate only RELEVANT interleavings • Only replays around “non-determinism” – Does ‘stateless’ (replay) verification • Restarts from MPI_Init for each new interleaving

Example : How ISP Effects Dynamic Verification • Somehow Instruments the Source / Binary

Example : How ISP Effects Dynamic Verification • Somehow Instruments the Source / Binary – Through PMPI • Runs the code under a verification scheduler – ‘Hijacks’ MPI Function Calls • By interposing a profiler – Exerts its own Interleaving Generation Control • Selective replay, Dynamic Instruction Rewriting – TRIES HARD to generate only RELEVANT interleavings • Only replays around “non-determinism” – Does ‘stateless’ (replay) verification • Restarts from MPI_Init for each new interleaving

Example : How ISP Effects Dynamic Verification • Somehow Instruments the Source / Binary

Example : How ISP Effects Dynamic Verification • Somehow Instruments the Source / Binary – Through PMPI • Runs the code under a verification scheduler – ‘Hijacks’ MPI Function Calls • By interposing a profiler – Exerts its own Interleaving Generation Control • Selective replay, Dynamic Instruction Rewriting – TRIES HARD to generate only RELEVANT interleavings • Only replays around “non-determinism” – Does ‘stateless’ (replay) verification • Restarts from MPI_Init for each new interleaving

Sketch of Stateless / Replay Verification Start system In Initial State Red, Green, and

Sketch of Stateless / Replay Verification Start system In Initial State Red, Green, and Blue moves Belong to different processes Dotted arrow shows some Dependency (e. g. , runtime non-determinism) L 0 U 0 L 1 L 2 U 1 U 2 L 1 U 2 U 1 35

Exponential number of TOTAL Interleavings – most are EQUIVALENT – generate only RELEVANT ones

Exponential number of TOTAL Interleavings – most are EQUIVALENT – generate only RELEVANT ones !! P 0 P 1 P 2 P 3 P 4 TOTAL > 10 Billion Interleavings !! 36

Exponential number of TOTAL Interleavings – most are EQUIVALENT – generate only RELEVANT ones

Exponential number of TOTAL Interleavings – most are EQUIVALENT – generate only RELEVANT ones !! P 0 P 1 P 2 A P 3 TOTAL > 10 Billion Interleavings !! P 4 B 1 B 2 These are the only dependent actions A E. g. One ANY-SOURCE (wildcard) receive B 1 And two of its MATCHING SENDS B 2 Point-to-point actions can be issued in ANY order 37

Exponential number of TOTAL Interleavings – most are EQUIVALENT – generate only RELEVANT ones

Exponential number of TOTAL Interleavings – most are EQUIVALENT – generate only RELEVANT ones !! P 0 P 1 P 2 A P 3 TOTAL > 10 Billion Interleavings !! P 4 B 1 B 2 These are the only dependent actions A E. g. One ANY-SOURCE (wildcard) receive B 1 And two of its MATCHING SENDS B 2 Point-to-point actions can be issued in ANY order Only TWO RELEVANT Interleavings ! 38

Workflow of ISP MPI Program Interposition Layer Executable Run Proc 1 Proc 2 ……

Workflow of ISP MPI Program Interposition Layer Executable Run Proc 1 Proc 2 …… Procn Scheduler that generates ALL RELEVANT schedules (one per partial order) MPI Runtime 39

Hijack Calls, Generate Relevant Interleavings Scheduler P 0 P 1 P 2 send. Next

Hijack Calls, Generate Relevant Interleavings Scheduler P 0 P 1 P 2 send. Next Isend(1) Barrier Isend(1, req) Irecv(*, req) Barrier Isend(1, req) Wait(req) Recv(2) Wait(req) MPI Runtime 40

Hijack Calls, Generate Relevant Interleavings Scheduler P 0 Isend(1, req) P 1 Irecv(*, req)

Hijack Calls, Generate Relevant Interleavings Scheduler P 0 Isend(1, req) P 1 Irecv(*, req) P 2 send. Next Barrier Isend(1) Barrier Irecv(*) Barrier Isend(1, req) Wait(req) Recv(2) Wait(req) MPI Runtime 41

Hijack Calls, Generate Relevant Interleavings Scheduler P 0 Isend(1, req) P 1 Irecv(*, req)

Hijack Calls, Generate Relevant Interleavings Scheduler P 0 Isend(1, req) P 1 Irecv(*, req) P 2 Isend(1) Barrier Barrier Isend(1, req) Wait(req) Recv(2) Wait(req) Irecv(*) Barrier MPI Runtime 42

Hijack Calls, Generate Relevant Interleavings Scheduler P 0 P 1 P 2 Irecv(2) Isend(1,

Hijack Calls, Generate Relevant Interleavings Scheduler P 0 P 1 P 2 Irecv(2) Isend(1, req) Barrier Irecv(*, req) Barrier Isend(1) Isend No Match-Set Isend(1, req) Send. Next Wait(req) Recv(2) Barrier Wait (req) Irecv(*) Barrier Recv(2) Wait(req) Barrier Wait(req) Wait Deadlock! Isend(1) Wait (req) MPI Runtime 43

Let us see ISP in action on ‘lucky. c’ and ‘unlucky. c’ • lucky.

Let us see ISP in action on ‘lucky. c’ and ‘unlucky. c’ • lucky. c has a deadlock that shows upon testing • unlucky. c does not reveal a deadlock upon testing • Testing is done using mpicc ; mpirun • Verification is done using ispcc ; isp

Example MPI program ‘lucky. c’ (lucky for tester) Process P 0 Process P 1

Example MPI program ‘lucky. c’ (lucky for tester) Process P 0 Process P 1 Process P 2 R(from: *, r 1) ; Sleep(3); //Sleep(3); R(from: 2, r 2); S(to: 0, r 1); S(to: 2, r 3); All the Ws… R(from: 0, r 2); R(from: *, r 4); S(to: 0, r 3); All the Ws… 45

MPI program ‘unlucky. c’ Process P 0 Process P 1 Process P 2 R(from:

MPI program ‘unlucky. c’ Process P 0 Process P 1 Process P 2 R(from: *, r 1) ; // Sleep(3); R(from: 2, r 2); S(to: 0, r 1); S(to: 2, r 3); All the Ws… R(from: 0, r 2); R(from: *, r 4); S(to: 0, r 3); All the Ws… 46

Runs of lucky. c and unlucky. c on mpich using “standard testing” (“lucky” for

Runs of lucky. c and unlucky. c on mpich using “standard testing” (“lucky” for tester) mpicc lucky. c -o lucky. out mpirun -np 3. /lucky. out (0) is alive on ganesh-desktop (1) is alive on ganesh-desktop (2) is alive on ganesh-desktop Rank 0 did Irecv Rank 2 did Send Sleep over Rank 1 did Send [. . hang. . ] mpicc unlucky. c -o unlucky. out mpirun -np 3. /unlucky. out (0) is alive on ganesh-desktop (2) is alive on ganesh-desktop (1) is alive on ganesh-desktop Rank 0 did Irecv Rank 1 did Send Rank 0 got 11 Sleep over Rank 2 did Send (2) Finished normally (1) Finished normally (0) Finished normally [. . OK. . ] 47

Runs of lucky. c and unlucky. c on mpich using “standard testing” (“lucky” for

Runs of lucky. c and unlucky. c on mpich using “standard testing” (“lucky” for tester) mpicc lucky. c -o lucky. out mpirun -np 3. /lucky. out (0) is alive on ganesh-desktop (1) is alive on ganesh-desktop (2) is alive on ganesh-desktop Rank 0 did Irecv Rank 2 did Send Sleep over Rank 1 did Send [. . hang. . ] mpicc unlucky. c -o unlucky. out mpirun -np 3. /unlucky. out (0) is alive on ganesh-desktop (2) is alive on ganesh-desktop (1) is alive on ganesh-desktop Rank 0 did Irecv Rank 1 did Send Rank 0 got 11 Sleep over Rank 2 did Send (2) Finished normally (1) Finished normally (0) Finished normally [. . OK. . ] ispcc ; isp will detect deadlock in both cases !! 48

Commands to verify lucky. c or unlucky. c • With ISP at hand, WE

Commands to verify lucky. c or unlucky. c • With ISP at hand, WE ARE LUCKY IN BOTH CASES • Not just ‘feeling lucky’ !! • COMMANDS RUN : • Ispcc lucky. c [ later try unlucky. c ] • Isp -n 3 -log /tmp/log 1. /a. out • isp. UI /tmp/log 1

End of A 50

End of A 50