SystemTap を使ったサンプリングに依らない動的なコールグラフの作成

サンプリングに依る動的なコールグラフを作成する方法はいろいろあるけど、これだとサンプルが取得できないパスに関してはコールグラフが取得できないことになってしまう。ソースコード読みをしているときなど完全なコールグラフがほしい時もあって、その方法を考えた。

SystemTap を使うと、すべての関数呼び出しのトレースを取得できる。これを解析すれば完全な動的コールグラフが作成できる。ところが、トレースからコールグラフを作るいいツールがない。

一応、小さいトレースなら、 vonnyfly/kernel_visualization が使えるけど、内部の作り的にトレースをいったんメモリにため込むので、大きなトレースを食わせるとメモリを食いつぶして死んでしまう。用途に合ったものがなければ作るしかないということで、大きなトレースでも扱えるプログラムを C++ で書いた。本来は SystemTap 内でコールグラフを作るのがスマートなんだけど、いまいち stp ファイルの作り方勉強してないからなぁ・・・というところ。

ちなみに SystemTap のトレースは SPEC2006 bzip2 の test 入力で 4GByte 超える。でかすぎ。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です