  We present a source-to-source transformation framework, GOCC, that consumes
lock-based pessimistic concurrency programs in the Go language and transforms
them into optimistic concurrency programs that use Hardware Transactional
Memory (HTM). The choice of the Go language is motivated by the fact that
concurrency is a first-class citizen in Go, and it is widely used in Go
programs. GOCC performs rich inter-procedural program analysis to detect and
filter lock-protected regions and performs AST-level code transformation of the
surrounding locks when profitable. Profitability is driven by both static
analyses of critical sections and dynamic analysis via execution profiles. A
custom HTM library, using perceptron, learns concurrency behavior and
dynamically decides whether to use HTM in the rewritten lock/unlock points.
Given the rich history of transactional memory research but its lack of
adoption in any industrial setting, we believe this workflow, which ultimately
produces source-code patches, is more apt for industry-scale adoption. Results
on widely adopted Go libraries and applications demonstrate significant (up to
10x) and scalable performance gains resulting from our automated transformation
while avoiding major performance regressions.
