Title: Two-Phase Dynamic Analysis of Message-Passing Go Programs Based on Vector Clocks
Abstract:Understanding the runtime behavior of concurrent programs is a challenging task. A popular approach is to establish a happens-before relation via vector clocks. Thus, we can identify bugs and performa...Understanding the runtime behavior of concurrent programs is a challenging task. A popular approach is to establish a happens-before relation via vector clocks. Thus, we can identify bugs and performance bottlenecks, for example, by checking if two conflicting events may happen concurrently. We employ a two-phase method to derive vector clock information for a wide range of concurrency features that includes all of the message-passing features in Go. The first phase (instrumentation and tracing) yields a runtime trace that records all events related to message-passing concurrency that took place. The second phase (trace replay) is carried out of fline and replays the recorded traces to infer vector clock information. Trace replay operates on thread-local traces. Thus, we can observe behavior that might result from some alternative schedule. Our approach is not tied to any specific language. We have built a prototype for the Go programming language and provide empirical evidence of the usefulness of our method.Read More