C11Tester: Scaling Testing of C/C++11 Atomics to Real-WorldSystems
We have long relied on increased raw computing power to drive technological progress. However, processors are now reaching their limits in terms of raw computing power, and continuing progress will require increased productivity in developing parallel software. Fully leveraging the performance of multi-core processors will in many cases require developers to make use of low-level "atomic" (or indivisible) operations such as those provided by the C11 and C++11 languages, so that can make very fine-grained optimizations to their code, and take full advantage of the computing power these processors offer them. Unfortunately, using C/C++ atomics is extremely difficult to do correctly and it is very easy to introduce subtle bugs in the use of these constructs. Testing for concurrency bugs in code that uses C/C++11 atomics can be extremely difficult as a bug can depend on the schedule, the state of the processor's memory subsystem, the specific processor, and the compiler. The C11Tester project will develop tools for testing concurrent code that makes use of C/C++11 atomics and make these tools available to both researchers and practitioners.
The C/C++11 standard introduced a relaxed memory model with atomic operations into the C and C++ languages. While C/C++11 atomics can provide significant performance benefits, using C/C++11 atomics correctly is extremely difficult. Existing tools such as CDSChecker can only find bugs in small unit tests of concurrent data structures. Bugs can also arise due to the interaction of subtle memory model semantics and the composition of software components. The C11Tester project will develop new techniques for testing and debugging complete concurrent applications that make use of C/C++11 atomics. The C11Tester project will make the following contributions: (1) it will develop new approaches for testing the correctness of concurrent applications, (2) it will develop new approaches for debugging concurrent applications, and (3) it will develop and make available a robust implementation of the approach in the C11Tester tool.