Goランタイムのプロファイリング:5つのプロファイルを支える共通の仕組み
Understanding the Go Runtime: Profiling

Goのランタイムが提供する5つのプロファイラ(CPU、ヒープ、ブロック、ミューテックス、ゴルーチン)は、一見異なるように見えて、実は同じ骨格を共有しています。本記事では、pprofファイル形式の構造から、各プロファイルがどのようにデータを収集するのかを、3つの収集モデル(非同期、その場、スナップショット)に分類して解説します。CPUプロファイラのシグナルハンドラとロックフリーリングバッファの仕組み、ヒーププロファイラのバケットテーブル、ゴルーチンプロファイラのスナップショット方式など、ランタイム内部の巧妙な設計を紐解きます。
CPUプロファイラは、シグナルハンドラ内でロックもメモリ割り当てもできないため、ロックフリーで事前割り当てされたリングバッファにサンプルを格納します。