Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

第23章 OProfile

OProfile は維持負担の少ないシステム全体のパフォーマンス監視ツールです。プロセッサ上にあるパフォーマンス監視ハードウェアを使用して、メモリーの参照時期、L2 キャッシュ要求の回数、及び受け取ったハードウェア割り込みの回数など、システム上のカーネルと実行可能ファイルに関する情報を取り込みます。Red Hat Enterprise Linux システムでは、このツールを使用するために oprofile パッケージをインストールする必要があります。
多くのプロセッサには、専用のパフォーマンス監視ハードウェアが含まれています。このハードウェアにより特定のイベント (要求されたデータがキャッシュ内に存在しないなど) の発生を検出することができるようになります。このハードウェアは通常、単数または複数の カウンター の形式を取り、イベントの発生の度にカウントが増加します。カウンターの値が実際に繰り上げになると、割り込みが生成されます。これによりパフォーマンス監視で生成された詳細 (及び、維持負担) の量の制御が可能になります。
OProfile は、カウンターが割り込みを生成する度にこのハードウェア (または、パフォーマンス監視ハードウェア不在の場合には、タイマーベースの代用品) を使用してパフォーマンス関連のデータの サンプル を収集します。これらのサンプルは定期的にディスクに書き込まれて、その後、これらのサンプル内に含まれるデータはシステムレベル、及びアプリケーションレベルのパフォーマンスに関する情報の生成に利用されます。
OProfile は役に立つツールですが、その使用の際にはいくつかの制約があります:
  • 共有ライブラリの使用 — 共有ライブラリ内のコードサンプルは、--separate=library オプションを使用しない限りは特定のアプリケーションへの属性を持ちません。
  • パフォーマンス監視サンプルは不正確 — パフォーマンス監視登録がサンプルを立ち上げる際に、割り込みの処理はゼロでの割り算例外エラーのように正確ではありません。プロセッサによる命令の無秩序な実行により、サンプルは近隣の命令に記録される可能性があります。
  • opreport はサンプルをインライン関数用に不的確に関連付けopreport は、単純なアドレス範囲のメカニズムを使用してどの関数にアドレスがあるかを判定します。インライン関数のサンプルは、インライン関数に帰属するのではなく、むしろインライン関数が挿入されている関数に帰属します。
  • OProfile 複数の実行によるデータを集積 — OProfile は、システム全体のプロファイラーであり複数のスタートアップとシャットダウンのプロセスを想定します。そのため、複数実行からのサンプルが集積します。コマンド opcontrol --reset を使用すると以前の実行からのサンプルをクリアすることができます。
  • ハードウェアパフォーマンスカウンターはゲスト仮想マシン上では無能 — ハードウェアパフォーマンスカウンターは仮想システム上では利用できないため、timer モードを使用する必要があります。コマンド opcontrol --deinit を実行して、それから modprobe oprofile timer=1 の実行により timer モードを有効にします。
  • CPU-限定パフォーマンス以外の問題 — OProfile はCPU 限定のプロセスで問題を見つけるように設定されています。ロック状態か、あるいは他のイベントの発生を待つために (例えば、 I/O が動作を終了するまで) 待機して眠っているプロセスを OProfile は識別しません。

23.1. ツールの概要

表23.1「OProfile コマンド」 は、oprofile パッケージに装備されているツールの概要を提供します。

表23.1 OProfile コマンド

コマンド 詳細
ophelp
システムプロセッサで使用可能なイベントとその簡単な説明を表示します。
opimport
サンプルデータベースファイルをシステム用に外部のバイナリ形式からネイティブの形式に変換します。異なるアーキテクチャからのサンプルデータベースを解析する時にのみこのオプションを使用して下さい。
opannotate アプリケーションがデバッグシンボルでコンパイルされている場合は、実行可能ファイル用の注釈付きのソースを作成します。詳細については、opannotate の使用」 を参照して下さい。
opcontrol
どのデータが収集されるかを設定します。詳細については、「OProfile の設定」 を参照して下さい。
opreport
プロファイルデータを取り込みます。詳細については、opreport の使用」 を参照して下さい。
oprofiled
デーモンとして実行して定期的にサンプルデータをディスクに書き込みます。