ホーム

トップ

MallocDebug
Sampler
ObjectAlloc
Shark

Cocoa はじめの一歩

自作ソフトいろいろ




修正日: 07/10/23  

Sampler  

 Performance Tools入門 その2


7. 関数呼出しベースのサンプリング(Watch for Function Calls)

 ここまでは「Sampling Rate:」で指定した時間ごとにスタックをチェックするサンプリングについて説明してきました。Samplerにはこのような時間ベースのサンプリングの他に関数ベースのサンプリングを行う機能があります。特定の関数を指定して、その関数が呼び出されるたびにスタックをチェックしてサンプリングを行います。
 例えばファイルI/O関連の関数の呼び出しを監視することで、どの関数でどの程度ファイルアクセスを行っているのかを把握することができます。処理に時間のかかるファイル読み書きのアクセス回数を減らすことができれば、動作速度の大きな改善を見込めます。

(1) 関数ベースサンプリングへの切替
 ウィンドウ左上「Watch for」ポップアップメニューで「Function Calls」を指定します。ドロワーが切り替わります。


(2) ドロワーで関数を指定する
 ドロワーで監視したい関数を指定します。複数指定できます。

【図9】 関数を設定する

【図10】 設定した関数一覧


 図9の空欄のテキストエディットに指定したい関数名を入力して「Watch」ボタンを押すことで、図10の監視する関数のリストに追加されます。またメインウィンドウのスタックブラウザで関数を選択して「Watch」ボタンを押すことで、選択中の関数を追加できます。「Delete」で削除、「Save...」「Load...」で関数の一覧を保存したり読み込んだりできます。
 また図9下の「Add Function Group」のボタンで各種の関数のプリセットを追加できます。例えば「File I/O」ボタンを押すとファイルI/O関係の関数がまとめて追加されます(図10)。


(3) 実行
 関数を指定したらあとは時間ベースのサンプリングと同じです。「Start Recording」ボタンでサンプリングが始まり、指定した関数が呼び出されるたびにコールスタックが保存されます。サンプリングを停止すると結果がブラウザに表示されます。



8. 簡単な使い方

 負荷の高い処理を見つける簡単な方法を紹介します。

(1) 時間ベースでのサンプリングを行います
 起動プロセスなどはフレームワークの処理が多く入りサンプリング結果が分かりにくくなりがちなので注意します。なるべく作業ごとに分けた方がやりやすいでしょう。

(2) 適当な処理を一通り実行後サンプリングを終了します

(3) Invert call treeでスタックを反転します

(4) アウトラインタブに切り替えます

(5) スタックの一番上(実際は一番下)の関数群の上位いくつかをWatch Fnで監視関数にセットします

(6) サンプリング方法をFunction Callsに切り替えて再度サンプリングを行います
 多くの時間を費やしている複数の関数がどのような関数から呼び出されているのかを監視した結果です。時間ベースのサンプリングよりも負荷の高い処理を正確に見つけることができます。これらの関数の呼び出し回数を減らすことでパフォーマンスの改善が期待できます。ただし処理によってはサンプル数が膨大になるので注意しましょう。


9. メモリ割当の監視

 ウィンドウ左上「Watch for」ポップアップメニューで「Memory Allocations」を指定することでメモリの割当状態を監視することができます。しかしメモリに関してはMallocDebugの方がより細かく調べることができるので、そちらを使うことをお薦めします。


10. まとめ

 Samplerはアプリケーションのパフォーマンスをとても簡単に調べることができるとても便利なアプリケーションです。プロファイリングのような準備が不要なので、気軽に利用することができます。開発途中に何度もパフォーマンスをチェックしながら、開発を進めていくことをお薦めします。

<参考文献>
Sampler Help (Helpファイル)
Sampler.app で C と Objective-C をプロファイルする