Abstract
We present Symbiosis: a concurrency debugging technique based on novel differential schedule projections (DSPs). A DSP shows the small set of memory operations and data-flows responsible for a failure, as well as a reordering of those elements that avoids the failure. To build a DSP, Symbiosis first generates a full, failing, multithreaded schedule via thread path profiling and symbolic constraint solving. Symbiosis selectively reorders events in the failing schedule to produce a non-failing, alternate schedule. A DSP reports the ordering and data-flow differences between the failing and non-failing schedules. Our evaluation on buggy real-world software and benchmarks shows that, in practical time, Symbiosis generates DSPs that both isolate the small fraction of event orders and data-flows responsible for the failure, and show which event reorderings prevent failing. In our experiments, DSPs contain 81% fewer events and 96% less data-flows than the full failure-inducing schedules. Moreover, by allowing developers to focus on only a few events, DSPs reduce the amount of time required to find a valid fix.
- G. Altekar and I. Stoica. ODR: Output-deterministic replay for multicore debugging. In SOSP ’09, 2009. Google Scholar
Digital Library
- T. Ball and J. R. Larus. Optimally profiling and tracing programs. ACM Trans. Program. Lang. Syst., 16(4), July 1994. ISSN 0164-0925. Google Scholar
Digital Library
- T. Bergan, O. Anderson, J. Devietti, L. Ceze, and D. Grossman. Coredet: A compiler and runtime system for deterministic multithreaded execution. In ASPLOS XV, 2010. Google Scholar
Digital Library
- E. D. Berger, T. Yang, T. Liu, and G. Novark. Grace: Safe multithreaded programming for c/c++. In OOPSLA ’09, 2009. Google Scholar
Digital Library
- M. Bravo, N. Machado, P. Romano, and L. Rodrigues. Towards effective and efficient search-based deterministic replay. In HotDep ’13, 2013. Google Scholar
Digital Library
- S. Burckhardt, P. Kothari, M. Musuvathi, and S. Nagarakatte. A randomized scheduler with probabilistic guarantees of finding bugs. In ASPLOS XV, 2010. Google Scholar
Digital Library
- C. Cadar, D. Dunbar, and D. Engler. KLEE: Unassisted and automatic generation of high-coverage tests for complex systems programs. In OSDI’08, 2008. Google Scholar
Digital Library
- J.-D. Choi and A. Zeller. Isolating failure-inducing thread schedules. In ISSTA ’02, 2002. Google Scholar
Digital Library
- L. De Moura and N. Bjørner. Z3: An efficient SMT solver. In TACAS’08/ETAPS’08, 2008. Google Scholar
Digital Library
- J. Devietti, B. Lucia, L. Ceze, and M. Oskin. Dmp: Deterministic shared memory multiprocessing. In ASPLOS XIV, 2009. Google Scholar
Digital Library
- T. Elmas, J. Burnim, G. Necula, and K. Sen. Concurrit: A domain specific language for reproducing concurrency bugs. In PLDI ’13, 2013. Google Scholar
Digital Library
- M. Emmer, Z. Khasidashvili, K. Korovin, and A. Voronkov. Encoding industrial hardware verification problems into effectively propositional logic. In FMCAD ’10, 2010. Google Scholar
Digital Library
- D. Engler and K. Ashcraft. RacerX: Effective, static detection of race conditions and deadlocks. In SOSP ’03, 2003. Google Scholar
Digital Library
- E. Farchi, Y. Nir, and S. Ur. Concurrent bug patterns and how to test them. In IPDPS’03, 2003. Google Scholar
Digital Library
- A. Farzan, A. Holzer, N. Razavi, and H. Veith. Con2colic testing. In ESEC/FSE 2013, 2013. Google Scholar
Digital Library
- C. Flanagan and S. N. Freund. Fasttrack: Efficient and precise dynamic race detection. In PLDI ’09, 2009. Google Scholar
Digital Library
- C. Flanagan and S. Qadeer. A type and effect system for atomicity. In PLDI ’03, 2003. Google Scholar
Digital Library
- C. Flanagan, S. N. Freund, and J. Yi. Velodrome: A sound and complete dynamic atomicity checker for multithreaded programs. In PLDI ’08, 2008. Google Scholar
Digital Library
- R. L. Halpert, C. J. F. Pickett, and C. Verbrugge. Component-based lock allocation. In PACT’07, 2007. Google Scholar
Digital Library
- J. Huang, P. Liu, and C. Zhang. LEAP: Lightweight deterministic multi-processor replay of concurrent java programs. In FSE ’10, 2010. Google Scholar
Digital Library
- J. Huang, C. Zhang, and J. Dolby. Clap: Recording local executions to reproduce concurrency failures. In PLDI ’13, 2013. Google Scholar
Digital Library
- N. Jalbert and K. Sen. A trace simplification technique for effective debugging of concurrent programs. In FSE ’10, 2010. Google Scholar
Digital Library
- Y. Jiang, T. Gu, C. Xu, X. Ma, and J. Lu. CARE: Cache guided deterministic replay for concurrent java programs. In ICSE 2014, 2014. Google Scholar
Digital Library
- M. Jose and R. Majumdar. Cause clue clauses: Error localization using maximum satisfiability. In PLDI ’11, 2011. Google Scholar
Digital Library
- J. C. King. Symbolic execution and program testing. Commun. ACM, 19(7), July 1976. ISSN 0001-0782. Google Scholar
Digital Library
- S. Lahiri and S. Qadeer. Back to the future: Revisiting precise program verification using SMT solvers. In POPL ’08, 2008. Google Scholar
Digital Library
- L. Lamport. How to make a multiprocessor computer that correctly executes multiprocess programs. IEEE Trans. Comput., 28(9), Sept. 1979. ISSN 0018-9340. Google Scholar
Digital Library
- S. Lu, J. Tucek, F. Qin, and Y. Zhou. AVIO: Detecting atomicity violations via access interleaving invariants. In ASPLOS XII, 2006. Google Scholar
Digital Library
- S. Lu, S. Park, E. Seo, and Y. Zhou. Learning from mistakes: A comprehensive study on real world concurrency bug characteristics. In ASPLOS XIII, 2008. Google Scholar
Digital Library
- B. Lucia and L. Ceze. Finding concurrency bugs with context-aware communication graphs. In MICRO 42, 2009. Google Scholar
Digital Library
- B. Lucia and L. Ceze. Cooperative empirical failure avoidance for multithreaded programs. In ASPLOS ’13, 2013. Google Scholar
Digital Library
- B. Lucia, J. Devietti, K. Strauss, and L. Ceze. Atom-Aid: Detecting and surviving atomicity violations. In ISCA ’08, 2008. Google Scholar
Digital Library
- B. Lucia, L. Ceze, and K. Strauss. ColorSafe: Architectural support for debugging and dynamically avoiding multi-variable atomicity violations. In ISCA ’10, 2010. Google Scholar
Digital Library
- B. Lucia, B. P. Wood, and L. Ceze. Isolating and understanding concurrency errors using reconstructed execution fragments. In PLDI ’11, 2011. Google Scholar
Digital Library
- N. Machado, P. Romano, and L. Rodrigues. Lightweight cooperative logging for fault replication in concurrent programs. In DSN’12, 2012. Google Scholar
Digital Library
- M. Musuvathi, S. Qadeer, T. Ball, G. Basler, P. A. Nainar, and I. Neamtiu. Finding and reproducing heisenbugs in concurrent programs. In OSDI ’08, 2008. Google Scholar
Digital Library
- M. Olszewski, J. Ansel, and S. Amarasinghe. Kendo: Efficient deterministic multithreading in software. In ASPLOS XIV, 2009. Google Scholar
Digital Library
- C.-S. Park and K. Sen. Randomized active atomicity violation detection in concurrent programs. In FSE’08, 2008. Google Scholar
Digital Library
- S. Park, Y. Zhou, W. Xiong, Z. Yin, R. Kaushik, K. H. Lee, and S. Lu. PRES: Probabilistic replay with execution sketching on multiprocessors. In SOSP ’09, 2009. Google Scholar
Digital Library
- S. Qadeer. Algorithmic verification of systems software using SMT solvers. In SAS ’09, 2009. Google Scholar
Digital Library
- S. Savage, M. Burrows, G. Nelson, P. Sobalvarro, and T. Anderson. Eraser: A dynamic data race detector for multithreaded programs. ACM Trans. Comput. Syst., 15(4), Nov. 1997. ISSN 0734-2071. Google Scholar
Digital Library
- K. Sen. Race directed random testing of concurrent programs. In PLDI ’08, 2008. Google Scholar
Digital Library
- Y. Shi, S. Park, Z. Yin, S. Lu, Y. Zhou, W. Chen, and W. Zheng. Do I use the wrong definition?: Defuse: Definition-use invariants for detecting concurrency and sequential bugs. In OOPSLA ’10, 2010. Google Scholar
Digital Library
- J. Steven, P. Chandra, B. Fleck, and A. Podgurski. jRapture: A capture/replay tool for observation-based testing. In ISSTA ’00, 2000. Google Scholar
Digital Library
- N. Tillmann and J. De Halleux. Pex: White box test generation for .net. In TAP’08, 2008. Google Scholar
Digital Library
- R. Vallée-Rai, P. Co, E. Gagnon, L. Hendren, P. Lam, and V. Sundaresan. Soot - a java bytecode optimization framework. In CASCON ’99, 1999.Google Scholar
- K. Vaswani, M. J. Thazhuthaveetil, and Y. N. Srikant. A programmable hardware path profiler. In CGO ’05, 2005. Google Scholar
Digital Library
- W. Visser, C. S. Pˇasˇareanu, and S. Khurshid. Test input generation with java pathfinder. In ISSTA ’04, 2004. Google Scholar
Digital Library
- Z. Yang, M. Yang, L. Xu, H. Chen, and B. Zang. ORDER: Object centric deterministic replay for java. In USENIX ATC ’11, 2011. Google Scholar
Digital Library
- C. Zamfir and G. Candea. Execution synthesis: A technique for automated software debugging. In EuroSys ’10, 2010. Google Scholar
Digital Library
- W. Zhang, C. Sun, and S. Lu. ConMem: Detecting severe concurrency bugs through an effect-oriented approach. In ASPLOS XV, 2010. Google Scholar
Digital Library
- W. Zhang, J. Lim, R. Olichandran, J. Scherpelz, G. Jin, S. Lu, and T. Reps. Conseq: Detecting concurrency bugs through sequential errors. In ASPLOS XVI, 2011. Google Scholar
Digital Library
- J. Zhou, X. Xiao, and C. Zhang. Stride: Search-based deterministic replay in polynomial time via bounded linkage. In ICSE ’12, 2012. Google Scholar
Digital Library
- D. Zuddas, W. Jin, F. Pastore, L. Mariani, and A. Orso. Mimic: Locating and understanding bugs by analyzing mimicked executions. In ASE ’14, 2014. Google Scholar
Digital Library
Index Terms
Concurrency debugging with differential schedule projections
Recommendations
Reproducing concurrency failures from crash stacks
ESEC/FSE 2017: Proceedings of the 2017 11th Joint Meeting on Foundations of Software EngineeringReproducing field failures is the first essential step for understanding, localizing and removing faults. Reproducing concurrency field failures is hard due to the need of synthesizing a test code jointly with a thread interleaving that induce the ...
Concurrency Debugging with Differential Schedule Projections
We present Symbiosis: a concurrency debugging technique based on novel differential schedule projections (DSPs). A DSP shows the small set of memory operations and dataflows responsible for a failure, as well as a reordering of those elements that ...
Concurrency debugging with differential schedule projections
PLDI '15: Proceedings of the 36th ACM SIGPLAN Conference on Programming Language Design and ImplementationWe present Symbiosis: a concurrency debugging technique based on novel differential schedule projections (DSPs). A DSP shows the small set of memory operations and data-flows responsible for a failure, as well as a reordering of those elements that ...






Comments