お疲れ様です。sasaki-kです。毎日暑いですね。
KLabではPHPで作られたフレームワークの高速化が熱いです。
高速化にあたっては、計測が重要です。
KLabではphpのxdebug extensionを使用し、プロファイル結果をcachegrindファイル形式で取得しWinCacheGrind で解析しています。
また皆でレビューするために Webgrind で解析結果を共有したり、言葉で説明しています。しかし、 Webgrindは一見してボトルネックが分かりにくかったり、言葉では説明がもどかしかったりしていました。
一方、KLabではCodepaste の社内版があり、 フォーマット済みのコードをフォームに貼りつけ、ブラウザのアドレスバーからURLをコピーしてIRC貼りつけてレビュー対象のコードを手軽に共有しています。
「Codepasteみたいにプロファイル結果も共有できたらいいのに・・・」と思い、もっと良いものを作りたいなと思い探してみました。
結果、xdebugtoolkit という cachegrind ファイルをコールグラフを表現したdot ファイルへ変換してくれるスクリプトを発見しました。
ボトルネックとなる関数が以下のように色で表示されていて一目で分かりやすく、コールパスもまとめられていてすっきり見やすいです。
- 呼び出し回数が多い関数はより濃い黄色
- 自身の実行時間がかかっている関数はより濃い紫
- 両方の特徴をもつ関数はより濃い赤 (=黄色+紫)
「こりゃいい!」ということで cachegrindファイルをuploadすると、ユニークな短いURLで xdebugtoolkit の結果画像を共有できる社内向けWebサービスを作りました。
またcachegrindファイルを保持しておく必要があるWebGrindを共有サービスにするにあたっての問題は、同ファイルは一般に巨大で、disk fullを起こさないようすぐに削除しなくてはならなかった点にありました。
ご紹介した方法だとdotファイルに変換された段階で小さくなり、かつcachegrindファイルを消してしまっても構わないので都度dotファイルから画像生成すればファイル削除を気にする必要がなさそうです。
このサービスを使ってみんなお手軽にProfileできたらいいなと思っています。