A Debugging Technique for Every Parallel Programmer

advertisement
Concurrent Predicates:
A Debugging Technique for Every Parallel
Programmer
PACT ‘13
Justin Gottschlich
Gilles Pokam
Cristiano Pereira
Youfeng Wu
Intel Corporation
1
The Problem
• Reproducing known multithreaded bugs is
challenging
• Why is it important?
– Fixing known bugs is general approach for realworld bug fixing
• Works well for sequential code, not parallel
2
A Simple Sequential Bug Example
y = calculate();
if (y == 0) crash
a = x / y;
if (y == 0) y = 1;
y = calculate();
if (y == 0) y = 1;
y != 0, no crash
a = x / y;
3
A Not-So Simple Parallel Bug Example
Parallel Bug Reproduction Needs
1. Buggy program state
2. Buggy program schedule
4
The CP Solution
100mil loops, 0-999 calc(),
occurs 1 out of 20 executions.
100mil loops, 0-999 calc(),
occurs 20 out of 20 executions.
5
What is CP?
• Two variants
– Concurrent Predicates (CP) – control structure
– CP with Expressions (CPEs) – happens-before
ordering extrapolated
6
The CPE Solution
7
The Real Problem
• But what about reproducing a known bug
with an unknown root cause?
– Most real-world bugs come in this form
8
Recipes and Experimental Data
9
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;
10
Recipe: Data Race
• CP can automatically find data races
– Early implementation in PIN
– Verified results found by Thread Checker
• Identified true positives
11
Recipe: Atomicity Violation
• Same structure as divide by zero example
12
Recipe: Deadlock
• Expression operators in paper
13
Experimental Results
•
•
•
•
5 handcrafted bugs
5 RADBench bugs
3 unresolved TBoost.STM bugs (now fixed)
Overhead generally 10%-100% (1.1x – 2x)
14
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
15
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
16
Download