第29章 oprofile
OProfile は、オーバーヘッドが低い、システム全体のパフォーマンス監視ツールです。これはプロセッサー上のパフォーマンス監視ハードウェアを使用して、メモリーの参照時、L2 キャッシュ要求の数、受信したハードウェア割り込みの数など、システムのカーネルと実行可能ファイルに関する情報を取得します。Red Hat Enterprise Linuxnbsp;Hat Enterprise Linuxnbsp;Linux システムで、このツールを使用するには oprofile パッケージがインストールされている必要があります。
多くのプロセッサーには、専用のパフォーマンス監視ハードウェアが含まれます。このハードウェアを使用すると、特定のイベントの発生時(要求されたデータがキャッシュにないなど)を検出できます。ハードウェアは通常、イベントが実行されるたびにインクリメントされる 1 つ以上の カウンター の形式を取ります。カウンターの値が基本的にロールオーバーされると割り込みが生成され、パフォーマンス監視で生成される詳細(つまりオーバーヘッド)の量を制御できます。
OProfile はこのハードウェア(またはパフォーマンス監視ハードウェアが存在しない場合)を使用して、カウンターが割り込みを生成するたびにパフォーマンス関連のデータの サンプル を収集します。これらのサンプルは定期的にディスクに書き込まれます。その後、これらのサンプルに含まれるデータを使用して、システムレベルのパフォーマンスおよびアプリケーションレベルのパフォーマンスに関するレポートを生成できます。
OProfile は便利なツールですが、これを使用する場合にはいくつかの制限に注意してください。
- 共有ライブラリー の使用: 共有ライブラリー のコードの Samples は、
--separate=library
オプションが使用されていない限り、特定のアプリケーションに属性されません。 - パフォーマンス監視サンプルは正確に行われません。パフォーマンス監視レジスターがサンプルをトリガーすると、割り込み処理はゼロ例外による分割のように正確で はありません。プロセッサーによる命令の順不同な実行により、サンプルはほぼ近い命令に記録される場合があります。
- opreport は、インライン関数のサンプルを適切に関連付けません。opreport は単純なアドレス範囲メカニズムを使用して、アドレスがどの関数にあるかを判断します。インライン関数のサンプルは、インライン関数には属性ではなく、インライン関数が挿入された関数に対して属性されません。
- OProfile は複数の実行からのデータを累積 します。OProfile はシステム全体のプロファイラーであり、プロセスが複数回起動し、シャットダウンすることを想定します。そのため、複数の実行のサンプルが累積されました。opcontrol --reset コマンドを使用して、直前の実行からサンプルを消去します。
- ハードウェアパフォーマンスカウンターはゲスト仮想マシンでは機能しません。ハードウェアパフォーマンスカウンターは仮想システムでは使用できません。そのため、
timer
モードを使用する必要があります。opcontrol --deinit コマンドを実行してから、modprobe oprofile timer=1 コマンドを実行してtimer
モードを有効にします。 - CPU の制限のないパフォーマンスの問題: OProfile は、CPU の制限のあるプロセスの問題を見つけるために使用されます。OProfile は、ロックを待機するか、または他のイベントが発生するため、sleep であるプロセスを特定しません(例: I/O デバイスで操作を終了するなど)。
29.1. ツールの概要
表29.1「OProfile コマンド」 では、oprofile パッケージで提供されるツールの概要を説明します。
コマンド | 説明 |
---|---|
ophelp |
システムプロセッサーで使用可能なイベントとその簡単な説明を表示します。
|
opimport |
サンプルデータベースファイルをシステム用に外部のバイナリー形式からネイティブの形式に変換します。異なるアーキテクチャーからのサンプルデータベースを解析する場合にのみこのオプションを使用してください。
|
opannotate | アプリケーションがデバッグシンボルでコンパイルされている場合は、実行可能ファイルのアノテーション付きソースを作成します。詳しくは、「opannotateの使用」 を参照してください。 |
opcontrol |
収集されるデータを設定します。詳しくは、「OProfile の設定」 を参照してください。
|
opreport |
プロファイリングデータを取得します。詳しくは、「opreportの使用」 を参照してください。
|
oprofiled |
デーモンとして実行して定期的にサンプルデータをディスクに書き込みます。
|