Finding rare concurrent programming bugs:: An automatic, symbolic, randomized, and parallelizable approach
Finding rare concurrent programming bugs:: An automatic, symbolic, randomized, and parallelizable approach
Developing correct, scalable and efficient concurrent programs is a complex and difficult task, due to the large number of possible concurrent executions that need to be taken into account. Modern multi-core processors with weak memory models and lock-free algorithms make this task even more difficult, as they introduce additional executions that confound the developers' reasoning. Because of these complex interactions, concurrent programs often contain bugs that are difficult to find, reproduce, and fix. Stress testing is known to be very ineffective in detecting rare concurrency bugs as all possible executions of the programs have to be explored explicitly. Consequently, testing by itself is often inadequate for concurrent programs and needs to be complemented by automated analysis tools that enable detection of bugs in a systematic and symbolic way.
In the first part of the talk, I provide an overview of Lazy-CSeq, a symbolic method based on Bounded Model Checking (BMC) and Sequentialization. Lazy-CSeq first translates a multi-threaded C program into a nondeterministic sequential C program that preserves reachability for all round-robin schedules with a given bound on the number of rounds. It then re-uses existing high-performance BMC tools as backends for the sequential verification problem. This translation is carefully designed to introduce very small memory overheads and very few sources of nondeterminism, so that it produces tight SAT/SMT formulae, and is thus very effective in practice.
In the second part of the talk, I present Swarm-CSeq, which extends Lazy-CSeq with a swarm-based bug-finding method. The key idea is to generate a set of simpler program instances, each capturing a reduced set of the original program’s interleavings. These instances can then be verified independently in parallel. Our approach is parametrizable and allows us to fine-tune the nondeterminism and randomness used for the analysis. In our experiments, by using parallel analysis, we show that this approach is able, even with a small number of cores, to find bugs in the hardest known concurrency benchmarks in a matter of minutes, whereas other dynamic and static tools fail to do so in hours.
Parlato, Gennaro
c28428a0-d3f3-4551-a4b5-b79e410f4923
2018
Parlato, Gennaro
c28428a0-d3f3-4551-a4b5-b79e410f4923
Parlato, Gennaro
(2018)
Finding rare concurrent programming bugs:: An automatic, symbolic, randomized, and parallelizable approach.
Fischer, Bernd and Uustalu, Tarmo
(eds.)
In Theoretical Aspects of Computing – ICTAC 2018: 5th International Colloquium, Stellenbosch, South Africa, October 16–19, 2018, Proceedings.
Springer..
Record type:
Conference or Workshop Item
(Paper)
Abstract
Developing correct, scalable and efficient concurrent programs is a complex and difficult task, due to the large number of possible concurrent executions that need to be taken into account. Modern multi-core processors with weak memory models and lock-free algorithms make this task even more difficult, as they introduce additional executions that confound the developers' reasoning. Because of these complex interactions, concurrent programs often contain bugs that are difficult to find, reproduce, and fix. Stress testing is known to be very ineffective in detecting rare concurrency bugs as all possible executions of the programs have to be explored explicitly. Consequently, testing by itself is often inadequate for concurrent programs and needs to be complemented by automated analysis tools that enable detection of bugs in a systematic and symbolic way.
In the first part of the talk, I provide an overview of Lazy-CSeq, a symbolic method based on Bounded Model Checking (BMC) and Sequentialization. Lazy-CSeq first translates a multi-threaded C program into a nondeterministic sequential C program that preserves reachability for all round-robin schedules with a given bound on the number of rounds. It then re-uses existing high-performance BMC tools as backends for the sequential verification problem. This translation is carefully designed to introduce very small memory overheads and very few sources of nondeterminism, so that it produces tight SAT/SMT formulae, and is thus very effective in practice.
In the second part of the talk, I present Swarm-CSeq, which extends Lazy-CSeq with a swarm-based bug-finding method. The key idea is to generate a set of simpler program instances, each capturing a reduced set of the original program’s interleavings. These instances can then be verified independently in parallel. Our approach is parametrizable and allows us to fine-tune the nondeterminism and randomness used for the analysis. In our experiments, by using parallel analysis, we show that this approach is able, even with a small number of cores, to find bugs in the hardest known concurrency benchmarks in a matter of minutes, whereas other dynamic and static tools fail to do so in hours.
Text
ICTAC2018-Gennaro Parlato-rare bugs
More information
Published date: 2018
Additional Information:
Invited Talk
Venue - Dates:
15th International Colloquium on Theoretical Aspects of Computing, , Stellenbosch, South Africa, 2018-10-12 - 2018-10-19
Identifiers
Local EPrints ID: 425836
URI: http://eprints.soton.ac.uk/id/eprint/425836
PURE UUID: d2773974-1953-40b7-8420-daea88033e32
Catalogue record
Date deposited: 05 Nov 2018 17:30
Last modified: 16 Mar 2024 03:18
Export record
Contributors
Author:
Gennaro Parlato
Editor:
Bernd Fischer
Editor:
Tarmo Uustalu
Download statistics
Downloads from ePrints over the past year. Other digital versions may also be available to download e.g. from the publisher's website.
View more statistics