In the current multi-core era, concurrency bugs are a serious threat to
software reliability. As hardware becomes more parallel, concurrent
programming will become increasingly pervasive. However, correct
concurrent programming is known to be extremely challenging for developers
and can easily lead to the introduction of concurrency bugs. This talk
addresses this challenge by proposing novel techniques to help developers
expose and detect concurrency bugs.
First, I will briefly present the results of a bug study that analyzed the
external and internal effects of real-world concurrency bugs. This study
revealed that a significant fraction of concurrency bugs qualify as
semantic or latent bugs, which are two particularly challenging classes of
concurrency bugs. Based on the insights from the study, I will present a
concurrency bug detector, PIKE, that analyzes the behavior of program
executions to infer whether concurrency bugs have been triggered during a
concurrent execution. In addition, I will present the design of a testing
tool, SKI, that allows developers to test operating system kernels for
concurrency bugs in a practical manner. SKI bridges the gap between
user-mode testing and kernel-mode testing by enabling the systematic
exploration of the kernel thread interleaving space. Both PIKE and SKI
have been shown to be effective at finding concurrency bugs.