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
Tax calculation will be finalised at checkout
Purchases are for personal use only
Learn about institutional subscriptionsPreview
Unable to display preview. Download preview PDF.
References
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)
Edelstein, O., et al.: Multithreaded Java program test generation. IBM Systems Journal 41(1), 111–125 (2002)
Ben-Asher, Y., Eytani, Y., Farchi, E.: Heuristics for finding concurrent bugs. In: International Parallel and Distributed Processing Symposium, IPDPS 2003, PADTAD Workshop (2003)
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)
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)
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
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)
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
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)
Hallal, H., et al.: Antipattern-based detection of deficiencies in Java multithreaded software. In: QSIC, pp. 258–267. IEEE, Los Alamitos (2004)
Hovemeyer, D., Pugh, W.: Finding bugs is easy. SIGPLAN Notices 39(12), 92–106 (2004)
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)
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)
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)
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)
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)
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)
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)
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)
Eytani, Y., Ur, S.: Compiling a benchmark of documented multi-threaded bugs. In: IPDPS, IEEE, Los Alamitos (2004)
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)
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)
Eytani, Y., et al.: Toward a framework and benchmark for testing tools for multi-threaded programs. Concurrency and Computation: Practice and Experience (to appear)
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)
Pasareanu, C.S., Dwyer, M.B., Visser, W.: Finding feasible abstract counter-examples. STTT 5(1), 34–48 (2003)
Visser, W., et al.: Model checking programs. Autom. Softw. Eng. 10(2), 203–232 (2003)
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)
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)
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)
Havelund, K., Pressburger, T.: Model checking Java programs using Java PathFinder. International Journal on Software Tools for Technology Transfer, STTT 2(4) (2000)
Eytani, Y.: Concurrent Java test generation as a search problem. In: Fifth Workshop on Runtime Verification, Edinburgh, UK (2005)
Zeller, A., Hildebrandt, R.: Simplifying and isolating failure-inducing input. IEEE Trans. Software Eng. 28(2), 183–200 (2002)
Choi, J.-D., Zeller, A.: Isolating failure-inducing thread schedules. In: ISSTA, pp. 210–220 (2002)
Liblit, B., et al.: In: ACM SIGPLAN Conference on Programming Language Design and Implementation, pp. 141–154. ACM Press, New York (2003)
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)
Author information
Authors and Affiliations
Editor information
Rights 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)