論文メモ

Understanding Real-World Concurrency Bugs in Go

June 23, 2019

著者/所属機関

Tengfei Tu (Pennsylvania State University) et al.

出典

ASPLOS 2019

目的

Goはgoroutineやmessage passingで並行処理を書きやすく,バグを埋め込みにくくしていると言われているが,本当にそうかが明らかにされていないので調査

Methodology

  • 6つのGOで開発されたソフトウェアを調査
    • Docker, Kubernetes, etcd, CockroachDB, gRPC, and BoltDB
  • バグについては全3211の並行バグから171をランダムに選択して詳細分析
    • 85はbloking bug, 86はnon-blocking bug

結果

Usage

  • 実はmessage passingよりもshared memoryの利用の方が多い golang-bugs-table-4.jpeg “Concurrency Primitive Usage” from Related article

Blocking Bugs

  • 85のblocking bugのうち42%はshared memroy,58%はmessage passing → 一般に考えられていることとは逆で,実はshared memory保護のミスよりmessage passingの誤りの方が多かった
  • Goビルトインのdeadlock detectorは21のblocking bugを検出できた

Non-Blocking Bugs

  • non-blocking bugの原因はmessage passingよりもshared memoryの方が多かった
  • Goのdata race detectorは半分のnon-blocking bugを検出できた

Misc

  • message passingはmessage passingで正しいプログラムを書くのは難く,結局この概念やその使い方の理解不足が原因でバグは埋め込まれてしまってる…

Tagged: #Go #concurrency