GoGuard: Efficient Static Blocking Bug Detection for Go
Detecting concurrency bugs in Go programs can be a challenging task due to the language’s built-in support for concurrency through goroutines and channels. This paper proposes GoGuard, an efficient and precise static concurrency bug detector generalized for both traditional and Go-specific blocking bugs. This generic solution is powered by Resource Flow Graph which captures the communication mechanism among different Go concurrency primitives by a producer-consumer concept and detects blocking bugs by finding unmatched producers and consumers. Moreover, Resource Flow Graph incorporates happens-before relations in the same manner, which inspires our may-happen-in-parallel analysis, Static Happens-In-Parallel Simulation, that achieves randomness akin to real-world execution and avoids expensive graph traversal. We evaluate GoGuard on GoBench and large, real-world Go projects, e.g., gRPC, Istio, Etcd and Serving. We also compare with GCatch, a state-of-the-art Go concurrency bug detector. The result demonstrates the efficiency and precision of GoGuard: GoGuard is 30x faster on real-world Go projects and detects 10 more true blocking bugs than GCatch.Detecting concurrency bugs in Go programs can be a challenging task due to the language’s built-in support for concurrency through goroutines and channels. This paper proposes GoGuard, an efficient and precise static concurrency bug detector generalized for both traditional and Go-specific blocking bugs. This generic solution is powered by Resource Flow Graph which captures the communication mechanism among different Go concurrency primitives by a producer-consumer concept and detects blocking bugs by finding unmatched producers and consumers. Moreover, Resource Flow Graph incorporates happens-before relations in the same manner, which inspires our may-happen-in-parallel analysis, Static Happens-In-Parallel Simulation, that achieves randomness akin to real-world execution and avoids expensive graph traversal. We evaluate GoGuard on GoBench and large, real-world Go projects, e.g., gRPC, Istio, Etcd and Serving. We also compare with GCatch, a state-of-the-art Go concurrency bug detector. The result demonstrates the efficiency and precision of GoGuard: GoGuard is 30x faster on real-world Go projects and detects 10 more true blocking bugs than GCatch.
Tue 22 OctDisplayed time zone: Pacific Time (US & Canada) change
14:00 - 15:30 | |||
14:00 30mFull-paper | GoGuard: Efficient Static Blocking Bug Detection for Go SAS Pre-print | ||
14:30 30mShort-paper | Should We Balance? Towards Formal Verification of the Linux Kernel Scheduler (NEAT paper) SAS Pre-print File Attached |