Tech Report CS-92-55
Experience with Techniques for Refining Data Race Detection
Robert H. B. Netzer and Barton P. Miller
Dynamic data race detection is a critical part of debugging shared-memory parallel programs. The races that can be detected must be refined to filter out false alarms and pinpoint only those that are direct manifestations of bugs. Most race-detection methods can report false alarms because of imprecise run-time information and because some races are caused by others. To overcome this problem, race refinement uses whatever run-time information is available to speculate on which of the detected races should be reported. In this paper we report on experimental tests of two refinement techniques previously developed by us. Our goal was to determine whether good refinement is possible, and how much run-time information is required. We analyzed two sets of programs, one set written by others (which they had tested and believed to be race-free but which in fact had subtle races) and another set written by us (in which we introduced more complex races). We performed race detection and refinement on executions of these programs, and recorded both the global event ordering and an approximate ordering recorded without a global clock. We found that in all the programs written by others, accurate refinement was possible even without the global ordering. In the other programs, accurate refinement was also possible but required the global ordering. These results suggest that our techniques refine races accurately and lead a programmer directly to race-causing bugs. They also suggest that race-detection methods should record only enough information necessary for good refinement (either global or approximate event orderings), and this information depends on the severity of the races being debugged.