Skip to main content

Explaining Intermittent Concurrent Bugs by Minimizing Scheduling Noise

  • Conference paper

Part of the book series: Lecture Notes in Computer Science ((LNPSE,volume 4383))

Abstract

A noise maker is a tool for testing multi-threaded programs. It seeds shared memory accesses and synchronization events (concurrent events) with conditional context switches and timeouts during runtime, in order to increase the likelihood that a concurrent bug manifests itself. However, an instrumented program with many seeded events may not be useful for debugging; events have been seeded all over the source code and provide almost no information regarding the bug. We argue that for many bug patterns only a few relevant context switches are critical for the bug. Based on the observation that bugs involve only a small set of critical events, we develop a randomized algorithm to reduce the scheduling noise and discover these events related to the bug. To evaluate the effectiveness of our approach, we experiment with debugging of industrial code, known open source code software, and programs representing known concurrent bugs. Our results demonstrate that this simple technique is in many cases very powerful, and significantly helps the user locating and understanding concurrent bugs.

This is a preview of subscription content, log in via an institution.

Buying options

Chapter
USD   29.95
Price excludes VAT (USA)
  • Available as PDF
  • Read on any device
  • Instant download
  • Own it forever
eBook
USD   39.99
Price excludes VAT (USA)
  • Available as PDF
  • Read on any device
  • Instant download
  • Own it forever
Softcover Book
USD   54.99
Price excludes VAT (USA)
  • Compact, lightweight edition
  • Dispatched in 3 to 5 business days
  • Free shipping worldwide - see info

Tax calculation will be finalised at checkout

Purchases are for personal use only

Learn about institutional subscriptions

Preview

Unable to display preview. Download preview PDF.

Unable to display preview. Download preview PDF.

References

  1. Stoller, S.D.: Testing concurrent Java programs using randomized scheduling. In: Proceedings of the Second Workshop on Runtime Verification (RV). Electronic Notes in Theoretical Computer Science, vol. 70(4), Elsevier, Amsterdam (2002)

    Google Scholar 

  2. Edelstein, O., et al.: Multithreaded Java program test generation. IBM Systems Journal 41(1), 111–125 (2002)

    Article  Google Scholar 

  3. Ben-Asher, Y., Eytani, Y., Farchi, E.: Heuristics for finding concurrent bugs. In: International Parallel and Distributed Processing Symposium, IPDPS 2003, PADTAD Workshop (2003)

    Google Scholar 

  4. Farchi, E., Nir, Y., Ur, S.: Concurrent bug patterns and how to test them. In: 17th International Parallel and Distributed Processing Symposium (IPDPS 2003), Nice, France, 22 -26 April 2003, p. 286 (CD-ROM/Abstracts Proceedings). IEEE Computer Society Press, Los Alamitos (2003)

    Google Scholar 

  5. Netzer, R., Miller, B.: Detecting data races in parallel program executions. In: Advances in Languages and Compilers for Parallel Computing, 1990 Workshop, Irvine, Calif., pp. 109–129. MIT Press, Cambridge (1990)

    Google Scholar 

  6. Savage, S., et al.: Eraser: a dynamic data race detector for multithreaded programs. ACM Transactions on Computer Systems (TOCS) 15(4), 391–411 (1997), doi:10.1145/265924.265927

    Article  Google Scholar 

  7. Flanagan, C., Freund, S.N.: Atomizer: A dynamic atomicity checker for multithreaded programs. In: 31’st ACM SIGPLAN Symposium on Principles of Programming Languages (POPL), January 2004, ACM Press, New York (2004)

    Google Scholar 

  8. Artho, C., Havelund, K., Biere, A.: High-level data races. In: VVEIS’03, The First International Workshop on Verification and Validation of Enterprise Information Systems, Angers, France (2003), citeseer.ist.psu.edu/artho03highlevel.html

  9. Long, B., Strooper, P.A.: A classification of concurrency failures in Java components. In: 17th International Parallel and Distributed Processing Symposium (IPDPS 2003), Nice, France, 22 -26 April, 2003, p. 287 (CD-ROM/Abstracts Proceedings). IEEE Computer Society Press, Los Alamitos (2003)

    Google Scholar 

  10. Hallal, H., et al.: Antipattern-based detection of deficiencies in Java multithreaded software. In: QSIC, pp. 258–267. IEEE, Los Alamitos (2004)

    Google Scholar 

  11. Hovemeyer, D., Pugh, W.: Finding bugs is easy. SIGPLAN Notices 39(12), 92–106 (2004)

    Article  Google Scholar 

  12. Artho, C., Havelund, K., Biere, A.: Using block-local atomicity to detect stale-value concurrency errors. In: Wang, F. (ed.) ATVA 2004. LNCS, vol. 3299, pp. 150–164. Springer, Heidelberg (2004)

    Google Scholar 

  13. Rabinovitz, I., Grumberg, O.: Bounded model checking of concurrent programs. In: Etessami, K., Rajamani, S.K. (eds.) CAV 2005. LNCS, vol. 3576, pp. 82–97. Springer, Heidelberg (2005)

    Google Scholar 

  14. Qadeer, S., Rehof, J.: Context-bounded model checking of concurrent software. In: Halbwachs, N., Zuck, L.D. (eds.) TACAS 2005. LNCS, vol. 3440, pp. 93–107. Springer, Heidelberg (2005)

    Google Scholar 

  15. Bron, A., et al.: Applications of synchronization coverage. In: Pingali, K., Yelick, K.A., Grimshaw, A.S. (eds.) PPOPP, pp. 206–212. ACM, New York (2005)

    Chapter  Google Scholar 

  16. Tasiran, S., et al.: A novel test coverage metric for concurrently-accessed software components. In: Grieskamp, W., Weise, C. (eds.) FATES 2005. LNCS, vol. 3997, pp. 62–71. Springer, Heidelberg (2006)

    Chapter  Google Scholar 

  17. Havelund, K.: Using runtime analysis to guide model checking of Java programs. In: Havelund, K., Penix, J., Visser, W. (eds.) SPIN Model Checking and Software Verification. LNCS, vol. 1885, pp. 245–264. Springer, Heidelberg (2000)

    Chapter  Google Scholar 

  18. Artho, C., Biere, A.: Applying static analysis to large-scale, multi-threaded Java programs. In: Australian Software Engineering Conference, pp. 68–75. IEEE, Los Alamitos (2001)

    Google Scholar 

  19. Bensalem, S., Havelund, K.: Dynamic deadlock analysis of multi-threaded programs. In: Ur, S., Bin, E., Wolfsthal, Y. (eds.) Hardware and Software, Verification and Testing. LNCS, vol. 3875, pp. 208–223. Springer, Heidelberg (2006)

    Chapter  Google Scholar 

  20. Eytani, Y., Ur, S.: Compiling a benchmark of documented multi-threaded bugs. In: IPDPS, IEEE, Los Alamitos (2004)

    Google Scholar 

  21. Choi, J.D., Srinivasan, H.: Deterministic replay of Java multithreaded applications. In: Proceedings of the SIGMETRICS Symposium on Parallel and Distributed Tools, Welches, Oregon, pp. 48–59 (1998)

    Google Scholar 

  22. Ben-Asher, Y., et al.: Producing scheduling that causes concurrent programs to fail. Technical Report UIUCDCS-R-2006-2684, University of Illinois at Urbana-Champaign (2006)

    Google Scholar 

  23. Eytani, Y., et al.: Toward a framework and benchmark for testing tools for multi-threaded programs. Concurrency and Computation: Practice and Experience (to appear)

    Google Scholar 

  24. Sen, K., Agha, G.: jCUTE: Automated testing of multithreaded programs using race-detection and flipping. Technical Report UIUCDCS-R-2006-2676, University of Illinois at Urbana-Champaign (2006)

    Google Scholar 

  25. Pasareanu, C.S., Dwyer, M.B., Visser, W.: Finding feasible abstract counter-examples. STTT 5(1), 34–48 (2003)

    Google Scholar 

  26. Visser, W., et al.: Model checking programs. Autom. Softw. Eng. 10(2), 203–232 (2003)

    Article  Google Scholar 

  27. Corbett, J.C., et al.: Bandera: Extracting finite-state models from Java source code. In: Proc. 22nd International Conference on Software Engineering (ICSE), jun, ACM Press, New York (2000)

    Google Scholar 

  28. Choi, J.-D., et al.: Escape analysis for Java. In: Proc. ACM Conference on Object-Oriented Programming, Systems, Languages and Applications (OOPSLA), Oct. 1999, ACM Press, New York (1999)

    Google Scholar 

  29. Yang, C.S., Souter, A.L., Pollock, L.: All-du-path coverage for parallel programs. In: ACM SigSoft International Symposium on Software Testing and Analysis, vol. 23, pp. 153–162. ACM, New York (1998)

    Chapter  Google Scholar 

  30. Havelund, K., Pressburger, T.: Model checking Java programs using Java PathFinder. International Journal on Software Tools for Technology Transfer, STTT 2(4) (2000)

    Google Scholar 

  31. Eytani, Y.: Concurrent Java test generation as a search problem. In: Fifth Workshop on Runtime Verification, Edinburgh, UK (2005)

    Google Scholar 

  32. Zeller, A., Hildebrandt, R.: Simplifying and isolating failure-inducing input. IEEE Trans. Software Eng. 28(2), 183–200 (2002)

    Article  Google Scholar 

  33. Choi, J.-D., Zeller, A.: Isolating failure-inducing thread schedules. In: ISSTA, pp. 210–220 (2002)

    Google Scholar 

  34. Liblit, B., et al.: In: ACM SIGPLAN Conference on Programming Language Design and Implementation, pp. 141–154. ACM Press, New York (2003)

    Chapter  Google Scholar 

  35. 17th International Parallel and Distributed Processing Symposium (IPDPS 2003) (CD-ROM/Abstracts Proceedings), Nice, France, 22-26 April 2003. IEEE Computer Society Press, Los Alamitos (2003)

    Google Scholar 

Download references

Author information

Authors and Affiliations

Authors

Editor information

Eyal Bin Avi Ziv Shmuel Ur

Rights and permissions

Reprints and permissions

Copyright information

© 2007 Springer Berlin Heidelberg

About this paper

Cite this paper

Eytani, Y., Latvala, T. (2007). Explaining Intermittent Concurrent Bugs by Minimizing Scheduling Noise. In: Bin, E., Ziv, A., Ur, S. (eds) Hardware and Software, Verification and Testing. HVC 2006. Lecture Notes in Computer Science, vol 4383. Springer, Berlin, Heidelberg. https://doi.org/10.1007/978-3-540-70889-6_14

Download citation

  • DOI: https://doi.org/10.1007/978-3-540-70889-6_14

  • Publisher Name: Springer, Berlin, Heidelberg

  • Print ISBN: 978-3-540-70888-9

  • Online ISBN: 978-3-540-70889-6

  • eBook Packages: Computer ScienceComputer Science (R0)

Publish with us

Policies and ethics