Beyond Data Races: Explaining Concurrency Bugs via Sequential Pattern Mining

Abstraction and mining of traces to explain concurrency bugs

2016-01-04
Mitra Tabaei Befrouei, Chao Wang, Georg Weissenbacher
Summary
Problem
Method
Results
Takeaways
Abstract

The paper introduces an automated, mining-based framework for explaining concurrency bugs using sequential pattern mining. By identifying frequent event sequences in failing traces and ranking them against passing traces, it isolates problematic interleavings in shared-memory multi-threaded programs.

TL;DR

Debugging multi-threaded software is notoriously difficult due to non-deterministic interleavings. This paper presents a general framework that doesn't care whether your bug is a data race, an atomicity violation, or an order violation. By treating execution traces as "shopping baskets" of events and applying Sequential Pattern Mining (SPM), the authors can automatically extract the specific sequence of reads and writes that causes a crash, even when those events are buried in thousands of lines of logs.

Problem & Motivation: The Trace Length Wall

Concurrency bugs like those found in the Apache server or Mozilla engine often involve more than just a simple race on a single variable. They involve complex dependencies where a context switch at specifically the "wrong time" invalidates a local transaction.

The challenge is twofold:

  1. Generality: Most tools look for specific "smells" (like lockset violations). If the bug doesn't fit the template, the tool misses it.
  2. Scalability: An execution trace can be massive. Standard data mining algorithms fail when sequences exceed 100 events, whereas a real-world trace can easily reach 10,000+ events.

Methodology: Abstraction and Counterfactual Reasoning

The researchers' core insight is that you don't need to see every local operation to understand a concurrency bug; you only need to see the inter-thread interactions and shared memory accesses.

1. Macro-Event Abstraction

To bypass the scalability wall, the authors introduce Macros. A Macro groups consecutive events from the same thread into a single unit. This reduces the trace length while crucially preserving context switches.

Architecture: Trace Abstraction and Mining Figure 1: Comparison of a failing trace (left) vs. a passing trace (right). The highlighted anti-dependencies reveal the atomicity violation.

2. Sequential Pattern Mining (SPM)

Once abstracted, they use algorithms like CloSpan or BIDE to find "Closed Sequential Patterns."

  • The Ranking Intuition: Based on David Lewis’ theory of causality, if a pattern appears frequently in Failing Traces () but never in Passing Traces (), it is highly likely to be the cause.
  • Relative Support: A score is calculated as: . A score of 1.0 is the "Smoking Gun."

Experimental Results: Compressing the Search Space

The authors tested their framework on real-world bug kernels from Mozilla (jsStr, jsInterp, textFrame) and Apache.

  • Length Reduction: The abstraction step was incredibly effective, reducing trace lengths by up to 95% (e.g., from 404 events to just 18 in the Mozilla jsStr case).
  • Precision: In every test case, the patterns with a Relative Support of 1.0 accurately pointed to the underlying bug, such as inconsistent updates to the lengthSum and totalStrings variables in the Mozilla engine.

Performance Data Table Table 1: Efficiency of abstraction. Note how the "Abst. Trace Len" is small enough for computationally intensive mining.

Critical Analysis & Conclusion

Takeaway

The beauty of this approach is its agnostic nature. It treats the program as a black box that generates sequences. This makes it a powerful addition to the developer's toolkit, especially for bugs that involve multiple variables where traditional "single-variable" detectors fail.

Limitations

  1. Spurious Patterns: The abstraction can occasionally create "fake" patterns that didn't exist in the original trace. The paper accounts for this with a "feasibility check," but it adds overhead.
  2. Oracle Requirement: You must have a way to classify traces as "Good" or "Bad" (e.g., a test suite or an assertion).

Future Outlook

The authors suggest moving beyond shared memory accesses to explain Deadlocks and Livelocks. As multi-core systems become even more complex (100+ cores), the ability to mine "causal sequences" out of the noise will become a mandatory skill for automated debugging agents.

Find Similar Papers

Try Our Examples

  • Find recent research that uses Sequential Pattern Mining or Association Rule Mining for automated software fault localization and root cause analysis.
  • Which paper first proposed the concept of "Relative Support" or "Contrast Mining" for debugging, and how does this paper's abstraction technique improve upon those foundations?
  • Are there studies applying similar trace abstraction methods to explain non-deterministic bugs in Distributed Systems or Reinforcement Learning (RL) environments?
Contents
Beyond Data Races: Explaining Concurrency Bugs via Sequential Pattern Mining
1. TL;DR
2. Problem & Motivation: The Trace Length Wall
3. Methodology: Abstraction and Counterfactual Reasoning
3.1. 1. Macro-Event Abstraction
3.2. 2. Sequential Pattern Mining (SPM)
4. Experimental Results: Compressing the Search Space
5. Critical Analysis & Conclusion
5.1. Takeaway
5.2. Limitations
5.3. Future Outlook