160 likes | 257 Views
Concurrent Predicates: A Debugging Technique for Every Parallel Programmer. PACT ‘13 Justin Gottschlich Gilles Pokam Cristiano Pereira Youfeng Wu Intel Corporation. The Problem. Reproducing known multithreaded bugs is challenging Why is it important?
E N D
Concurrent Predicates: A Debugging Technique for Every Parallel Programmer PACT ‘13 Justin Gottschlich Gilles Pokam Cristiano Pereira Youfeng Wu Intel Corporation
The Problem • Reproducing knownmultithreaded bugs is challenging • Why is it important? • Fixing knownbugs is general approach for real-world bug fixing • Works well for sequential code, not parallel
A Simple Sequential Bug Example if (y == 0) crash y = calculate(); if (y == 0) y = 1; a = x / y; y != 0, no crash y = calculate(); a = x / y; if (y == 0) y = 1;
A Not-So Simple Parallel Bug Example Parallel Bug Reproduction Needs Buggy program state Buggy program schedule
The CP Solution 100mil loops, 0-999 calc(), occurs 1 out of 20executions. 100mil loops, 0-999 calc(), occurs 20 out of 20 executions.
What is CP? • Two variants • Concurrent Predicates (CP) – control structure • CP with Expressions (CPEs) – happens-before ordering extrapolated
The RealProblem • But what about reproducing a known bug with an unknown root cause? • Most real-world bugs come in this form
A Bit About Bugs • Bugs can be thought in terms of ... • A root cause • An observable effect • CPs can be thought of in terms of ... • A root cause CP • An effect CP • The root cause CP is placed after bug root cause, which is usually unknown y = calculate(); • The effect CP is placed just before bug effect, which is usually known a = x / y;
Recipe: Data Race • CP can automatically find data races • Early implementation in PIN • Verified results found by Thread Checker • Identified true positives
Recipe: Atomicity Violation Same structure as divide by zero example
Recipe: Deadlock Expression operators in paper
Experimental Results 5 handcrafted bugs 5 RADBench bugs 3 unresolved TBoost.STM bugs (now fixed) Overhead generally 10%-100% (1.1x – 2x)
Conclusions and Future Directions • CP and CPE: • Can improve known bug reproduction • Can identify unknown root causes of known bugs using recipes (we’ve used them) • What’s next? • Simplify model; direct debugger integration • Automated CPE injection for certain types of bugs • Usage experience data from novice programmers
Questions? Concurrent Predicates: A Debugging Technique for Every Parallel Programmer PACT ‘13 Justin Gottschlich (justin.e.gottschlich@intel.com) Gilles Pokam Cristiano Pereira Youfeng Wu Intel Corporation