skip to main content
research-article

Concurrency debugging with differential schedule projections

Published:03 June 2015Publication History
Skip Abstract Section

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

Index Terms

  1. Concurrency debugging with differential schedule projections

    Recommendations

    Comments

    Login options

    Check if you have access through your login credentials or your institution to get full access on this article.

    Sign in

    Full Access

    PDF Format

    View or Download as a PDF file.

    PDF

    eReader

    View online with eReader.

    eReader
    About Cookies On This Site

    We use cookies to ensure that we give you the best experience on our website.

    Learn more

    Got it!