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