ソフトウェアの性能解析をしている時、どこにCPUボトルネックがあるのか知りたくなることがあります。そういった場合、プロファイリングツールを使ってスタックトレースを採取し、CPUを消費している場所や割合に関する統計情報を解析するのが有効です。しかし、一般的に採取するデータ量は膨大になってしまい、欲しい情報を解析するのはなかなか骨の折れる作業です。
そこで、今回はトレース情報を可視化するツール:d3js_trace を作ってみました。d3js_trace は、perf で取得したスタックトレース情報を、JavaScript ライブラリ : D3js を用いて可視化します。可視化により、人間が解析しやすい形で表現することで、より容易にトレースデータを解析できるようになります。
コードについては GitHub に公開しています: Etsukata/d3js_trace
例
以下に掲載した画像は、perf でシステム全体のプロファイリングをとったものです。コマンドは "perf record -a -g fp sleep 3 "。どこでどのくらいCPUを消費したかが、階層を組んだ放射型のグラフにより表現されています。
画像をみるだけよりは、インタラクティブなデモをご覧いただけるほうが、理解しやすいと思います⇛デモ
図にカーソルを合わせると、CPU使用割合とコールスタックが表示されます。
使い方
d3js_trace は上記デモのような解析ページを生成します。その使い方をご紹介します。
まず git clone します。
# git clone https://github.com/Etsukata/d3js_trace.git # cd d3js_trace
perf でスタックトレースを収集します。今回は例として、-a でシステム全体を対象に収集しています。
# perf record -g fp -a sleep 3
perf script コマンドでテキストデータで出力し、それを python スクリプトで d3js で読む JSON 形式に変換します。
# perf script | ./d3trace.py > trace_json.js
WEBブラウザで置いてある index.html を開きます。
# firefox index.html
すると、デモのようなページが表示されます。
TODO
d3js_trace は作ってみたばかりなので、色々と改良したいことがあります。
- 色付け
- ズーム可能にする
- d3jsの他のExampleを使えるようにする
- ftrace のトレース情報などを利用し、レイテンシトレースを可視化できるようにする
...などなど
Thanks to
d3js_trace は Brendan Gregg さんの FlameGraph を参考につくりました。また、データ可視化部には d3js の Sequence Sunburst を使っています。
素晴らしいツールを開発された方々に感謝します。
0 件のコメント:
コメントを投稿