6.2. OProfile
OProfile はシステム全体にわたる Linux プロファイラーで、低いオーバーヘッドでの稼働が可能です。これは、raw サンプルデータ収集のためのカーネルドライバーとデーモン、さらにそのデータを有意な情報に解析するためのツールのスイートで構成されています。OProfile は通常、コードのどのセクションが CPU 時間を最も多く消費しているか、またその理由を判断するために開発者が使用します。
プロファイルの実行中に OProfile はプロセッサーのパフォーマンス監視ハードウェアを使用します。Valgrind はアプリケーションのバイナリーを書き直し、次にインストルメント化します。一方 OProfile は、実行中のアプリケーションをそのままプロファイルします。パフォーマンス監視ハードウェアをセットアップし、イベント x 回ごとにサンプルを採取します (たとえば、キャッシュミスやブランチ指示など)。各サンプルには、プログラムのどこでそれが発生したかという情報が含まれています。
OProfile のプロファイル方法は Valgrind よりも少ないリソースを消費します。しかし、OProfile は root 権限を必要とします。OProfile はコード内での「ホットスポット」を見つけ出し、その原因を探す際に便利です (たとえば、キャッシュパフォーマンスが低い、分岐予想が誤っている、など)。
OProfile を使用する際には、OProfile デーモン (
oprofiled
) を開始し、プロファイル対象のプログラムを実行し、システムプロファイルデータを収集し、このデータをより理解しやすい形式に解析することになります。OProfile はこのプロセスのすべてのステップにツールを提供します。
6.2.1. OProfile のツール
便利な OProfile コマンドを以下に挙げます。
- opcontrol
- このツールは OProfile デーモンを開始/終了し、プロファイルセッションの設定に使われます。
- opreport
opreport
コマンドは、OProfile プロファイルセッションからバイナリーイメージのサマリーまたは記号ごとのデータを出力します。- opannotate
opannotate
は OProfile セッションのプロファイルデータから注釈付きソースおよび/またはアセンブリを出力します。- oparchive
oparchive
コマンドは、実行可能ファイルやデバッグ、OProfile サンプルファイルの入ったディレクトリーを作成します。このディレクトリーは (tar
で) 別のマシンに移動でき、そこでオフラインで分析ができます。- opgprof
opreport
のように、opgprof
コマンドは OProfile セッションからあるバイナリーイメージのプロファイルデータを出力します。opgprof
の出力は、gprof
形式です。
OProfile コマンドの全一覧は、
man oprofile
を参照してください。各 OProfile コマンドの詳細情報については、それぞれの man
ページを参照してください。OProfile に関するその他のドキュメントは、「OProfile のドキュメント」 を参照してください。