Nothing Special   »   [go: up one dir, main page]

skip to main content
research-article

Concurrency debugging with differential schedule projections

Published: 03 June 2015 Publication History

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.

References

[1]
G. Altekar and I. Stoica. ODR: Output-deterministic replay for multicore debugging. In SOSP ’09, 2009.
[2]
T. Ball and J. R. Larus. Optimally profiling and tracing programs. ACM Trans. Program. Lang. Syst., 16(4), July 1994. ISSN 0164-0925.
[3]
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.
[4]
E. D. Berger, T. Yang, T. Liu, and G. Novark. Grace: Safe multithreaded programming for c/c++. In OOPSLA ’09, 2009.
[5]
M. Bravo, N. Machado, P. Romano, and L. Rodrigues. Towards effective and efficient search-based deterministic replay. In HotDep ’13, 2013.
[6]
S. Burckhardt, P. Kothari, M. Musuvathi, and S. Nagarakatte. A randomized scheduler with probabilistic guarantees of finding bugs. In ASPLOS XV, 2010.
[7]
C. Cadar, D. Dunbar, and D. Engler. KLEE: Unassisted and automatic generation of high-coverage tests for complex systems programs. In OSDI’08, 2008.
[8]
J.-D. Choi and A. Zeller. Isolating failure-inducing thread schedules. In ISSTA ’02, 2002.
[9]
L. De Moura and N. Bjørner. Z3: An efficient SMT solver. In TACAS’08/ETAPS’08, 2008.
[10]
J. Devietti, B. Lucia, L. Ceze, and M. Oskin. Dmp: Deterministic shared memory multiprocessing. In ASPLOS XIV, 2009.
[11]
T. Elmas, J. Burnim, G. Necula, and K. Sen. Concurrit: A domain specific language for reproducing concurrency bugs. In PLDI ’13, 2013.
[12]
M. Emmer, Z. Khasidashvili, K. Korovin, and A. Voronkov. Encoding industrial hardware verification problems into effectively propositional logic. In FMCAD ’10, 2010.
[13]
D. Engler and K. Ashcraft. RacerX: Effective, static detection of race conditions and deadlocks. In SOSP ’03, 2003.
[14]
E. Farchi, Y. Nir, and S. Ur. Concurrent bug patterns and how to test them. In IPDPS’03, 2003.
[15]
A. Farzan, A. Holzer, N. Razavi, and H. Veith. Con2colic testing. In ESEC/FSE 2013, 2013.
[16]
C. Flanagan and S. N. Freund. Fasttrack: Efficient and precise dynamic race detection. In PLDI ’09, 2009.
[17]
C. Flanagan and S. Qadeer. A type and effect system for atomicity. In PLDI ’03, 2003.
[18]
C. Flanagan, S. N. Freund, and J. Yi. Velodrome: A sound and complete dynamic atomicity checker for multithreaded programs. In PLDI ’08, 2008.
[19]
R. L. Halpert, C. J. F. Pickett, and C. Verbrugge. Component-based lock allocation. In PACT’07, 2007.
[20]
J. Huang, P. Liu, and C. Zhang. LEAP: Lightweight deterministic multi-processor replay of concurrent java programs. In FSE ’10, 2010.
[21]
J. Huang, C. Zhang, and J. Dolby. Clap: Recording local executions to reproduce concurrency failures. In PLDI ’13, 2013.
[22]
N. Jalbert and K. Sen. A trace simplification technique for effective debugging of concurrent programs. In FSE ’10, 2010.
[23]
Y. Jiang, T. Gu, C. Xu, X. Ma, and J. Lu. CARE: Cache guided deterministic replay for concurrent java programs. In ICSE 2014, 2014.
[24]
M. Jose and R. Majumdar. Cause clue clauses: Error localization using maximum satisfiability. In PLDI ’11, 2011.
[25]
J. C. King. Symbolic execution and program testing. Commun. ACM, 19(7), July 1976. ISSN 0001-0782.
[26]
S. Lahiri and S. Qadeer. Back to the future: Revisiting precise program verification using SMT solvers. In POPL ’08, 2008.
[27]
L. Lamport. How to make a multiprocessor computer that correctly executes multiprocess programs. IEEE Trans. Comput., 28(9), Sept. 1979. ISSN 0018-9340.
[28]
S. Lu, J. Tucek, F. Qin, and Y. Zhou. AVIO: Detecting atomicity violations via access interleaving invariants. In ASPLOS XII, 2006.
[29]
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.
[30]
B. Lucia and L. Ceze. Finding concurrency bugs with context-aware communication graphs. In MICRO 42, 2009.
[31]
B. Lucia and L. Ceze. Cooperative empirical failure avoidance for multithreaded programs. In ASPLOS ’13, 2013.
[32]
B. Lucia, J. Devietti, K. Strauss, and L. Ceze. Atom-Aid: Detecting and surviving atomicity violations. In ISCA ’08, 2008.
[33]
B. Lucia, L. Ceze, and K. Strauss. ColorSafe: Architectural support for debugging and dynamically avoiding multi-variable atomicity violations. In ISCA ’10, 2010.
[34]
B. Lucia, B. P. Wood, and L. Ceze. Isolating and understanding concurrency errors using reconstructed execution fragments. In PLDI ’11, 2011.
[35]
N. Machado, P. Romano, and L. Rodrigues. Lightweight cooperative logging for fault replication in concurrent programs. In DSN’12, 2012.
[36]
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.
[37]
M. Olszewski, J. Ansel, and S. Amarasinghe. Kendo: Efficient deterministic multithreading in software. In ASPLOS XIV, 2009.
[38]
C.-S. Park and K. Sen. Randomized active atomicity violation detection in concurrent programs. In FSE’08, 2008.
[39]
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.
[40]
S. Qadeer. Algorithmic verification of systems software using SMT solvers. In SAS ’09, 2009.
[41]
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.
[42]
K. Sen. Race directed random testing of concurrent programs. In PLDI ’08, 2008.
[43]
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.
[44]
J. Steven, P. Chandra, B. Fleck, and A. Podgurski. jRapture: A capture/replay tool for observation-based testing. In ISSTA ’00, 2000.
[45]
N. Tillmann and J. De Halleux. Pex: White box test generation for .net. In TAP’08, 2008.
[46]
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.
[47]
K. Vaswani, M. J. Thazhuthaveetil, and Y. N. Srikant. A programmable hardware path profiler. In CGO ’05, 2005.
[48]
W. Visser, C. S. Pˇasˇareanu, and S. Khurshid. Test input generation with java pathfinder. In ISSTA ’04, 2004.
[49]
Z. Yang, M. Yang, L. Xu, H. Chen, and B. Zang. ORDER: Object centric deterministic replay for java. In USENIX ATC ’11, 2011.
[50]
C. Zamfir and G. Candea. Execution synthesis: A technique for automated software debugging. In EuroSys ’10, 2010.
[51]
W. Zhang, C. Sun, and S. Lu. ConMem: Detecting severe concurrency bugs through an effect-oriented approach. In ASPLOS XV, 2010.
[52]
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.
[53]
J. Zhou, X. Xiao, and C. Zhang. Stride: Search-based deterministic replay in polynomial time via bounded linkage. In ICSE ’12, 2012.
[54]
D. Zuddas, W. Jin, F. Pastore, L. Mariani, and A. Orso. Mimic: Locating and understanding bugs by analyzing mimicked executions. In ASE ’14, 2014.

Cited By

View all
  • (2025)A generalized, rule-based method for the detection of intermittent faults in software programsJournal of Systems and Software10.1016/j.jss.2024.112228219(112228)Online publication date: Jan-2025
  • (2023)Enhanced S2E for Analysis of Multi-Thread SoftwareProgramming and Computing Software10.1134/S036176882309007449:Suppl 1(S39-S44)Online publication date: 1-Dec-2023
  • (2021)RAProducer: efficiently diagnose and reproduce data race bugs for binaries via trace analysisProceedings of the 30th ACM SIGSOFT International Symposium on Software Testing and Analysis10.1145/3460319.3464831(593-606)Online publication date: 11-Jul-2021
  • Show More Cited By

Recommendations

Comments

Please enable JavaScript to view thecomments powered by Disqus.

Information & Contributors

Information

Published In

cover image ACM SIGPLAN Notices
ACM SIGPLAN Notices  Volume 50, Issue 6
PLDI '15
June 2015
630 pages
ISSN:0362-1340
EISSN:1558-1160
DOI:10.1145/2813885
  • Editor:
  • Andy Gill
Issue’s Table of Contents
  • cover image ACM Conferences
    PLDI '15: Proceedings of the 36th ACM SIGPLAN Conference on Programming Language Design and Implementation
    June 2015
    630 pages
    ISBN:9781450334686
    DOI:10.1145/2737924
Permission to make digital or hard copies of all or part of this work for personal or classroom use is granted without fee provided that copies are not made or distributed for profit or commercial advantage and that copies bear this notice and the full citation on the first page. Copyrights for components of this work owned by others than ACM must be honored. Abstracting with credit is permitted. To copy otherwise, or republish, to post on servers or to redistribute to lists, requires prior specific permission and/or a fee. Request permissions from [email protected]

Publisher

Association for Computing Machinery

New York, NY, United States

Publication History

Published: 03 June 2015
Published in SIGPLAN Volume 50, Issue 6

Check for updates

Author Tags

  1. Concurrency
  2. Constraint Solving
  3. Debugging
  4. Differential Schedule Projection
  5. Symbolic Execution

Qualifiers

  • Research-article

Funding Sources

Contributors

Other Metrics

Bibliometrics & Citations

Bibliometrics

Article Metrics

  • Downloads (Last 12 months)22
  • Downloads (Last 6 weeks)5
Reflects downloads up to 20 Nov 2024

Other Metrics

Citations

Cited By

View all
  • (2025)A generalized, rule-based method for the detection of intermittent faults in software programsJournal of Systems and Software10.1016/j.jss.2024.112228219(112228)Online publication date: Jan-2025
  • (2023)Enhanced S2E for Analysis of Multi-Thread SoftwareProgramming and Computing Software10.1134/S036176882309007449:Suppl 1(S39-S44)Online publication date: 1-Dec-2023
  • (2021)RAProducer: efficiently diagnose and reproduce data race bugs for binaries via trace analysisProceedings of the 30th ACM SIGSOFT International Symposium on Software Testing and Analysis10.1145/3460319.3464831(593-606)Online publication date: 11-Jul-2021
  • (2021)C11Tester: a race detector for C/C++ atomicsProceedings of the 26th ACM International Conference on Architectural Support for Programming Languages and Operating Systems10.1145/3445814.3446711(630-646)Online publication date: 19-Apr-2021
  • (2020)WATCHER: in-situ failure diagnosisProceedings of the ACM on Programming Languages10.1145/34282114:OOPSLA(1-27)Online publication date: 13-Nov-2020
  • (2019)Detection of intermittent faults in software programs through identification of suspicious shared variable access patternsJournal of Systems and Software10.1016/j.jss.2019.110455(110455)Online publication date: Oct-2019
  • (2019)Empirical research on concurrent software testing: A systematic mapping studyInformation and Software Technology10.1016/j.infsof.2018.08.017105(226-251)Online publication date: Jan-2019
  • (2017)CoopREP: Cooperative record and replay of concurrency bugsSoftware Testing, Verification and Reliability10.1002/stvr.164528:1(e1645)Online publication date: 5-Sep-2017
  • (2017)An automated framework to support testing for process-level race conditionsSoftware Testing, Verification and Reliability10.1002/stvr.163427:4-5(e1634)Online publication date: 10-May-2017
  • (2024)Minimal Context-Switching Data Race Detection with Dataflow TrackingJournal of Computer Science and Technology10.1007/s11390-023-1569-739:1(211-226)Online publication date: 1-Feb-2024
  • Show More Cited By

View Options

Login options

View options

PDF

View or Download as a PDF file.

PDF

eReader

View online with eReader.

eReader

Media

Figures

Other

Tables

Share

Share

Share this Publication link

Share on social media