第23章 OProfile
OProfile は、oprofile パッケージで提供されるオーバーヘッドコストの少ない、システム全体のパフォーマンス監視ツールです。システムのプロセッサー上にあるパフォーマンス監視ハードウェアを使用して、メモリーの参照タイミング、第 2 レベルのキャッシュ要求の回数、受け取るハードウェア割り込みの回数など、システム上のカーネルと実行可能ファイルに関する情報を取得します。OProfile は、Java Virtual Machine (JVM) で実行されるアプリケーションのプロファイリングも実行できます。
以下は、OProfile が提供するツールの選択です。
- ophelp
- システムプロセッサーで使用可能なイベントと、各イベントの簡単な説明を表示します。
- operf
主なプロファイリングツール。
operf
ツールは、Linux Performance Event サブシステムを使用します。これにより、OProfile が、システムのパフォーマンス監視ハードウェアを使用するその他のツールと共に動作できるようになります。以前に使用していた
opcontrol
ツールとは異なり、初期設定は必要ありません。--system-wide
オプションが使用されている場合を除き、root 権限がなくても使用できます。
- ocount
- イベント発生の絶対数をカウントするためのツール。これは、プロセスごと、CPU ごと、またはスレッドごとに、システム全体のイベントをカウントできます。
- opimport
- サンプルデータベースファイルをシステム用に外部のバイナリー形式からネイティブの形式に変換します。異なるアーキテクチャーからのサンプルデータベースを解析する場合にのみこのオプションを使用してください。
- opannotate
- アプリケーションがデバッグシンボルでコンパイルされている場合は、実行可能ファイル用のアノテーション付きのソースを作成します。
- opreport
- 記録されたパフォーマンスデータを読み取り、プロファイル仕様で指定したサマリーを生成します。異なるプロファイル仕様を使用して、同じプロファイルデータから異なるレポートを生成できます。
23.1. OProfile の使用 リンクのコピーリンクがクリップボードにコピーされました!
operf
はプロファイリングデータを収集するための推奨されるツールです。このツールには初期設定の必要がなく、すべてのオプションはコマンドラインで渡されます。レガシーの opcontrol
ツールとは異なり、operf
は root
権限なしに実行できます。operf
ツールの使用方法に関する詳細は、システム管理者ガイドの operf の使用 の章をを参照してください。
例23.1 ocount の使用
以下の例は、sleep
ユーティリティーの実行時に、ocount
を使用したイベント量のカウントを示しています。
イベントは、プロセッサーの実装に固有です。perf_event_paranoid
オプションを設定するか、カウントをユーザー空間イベントのみに制限する必要がある場合があります。
例23.2 operf の基本的な使用方法
以下の例では、operf
ツールを使用して、ls -l ~
コマンドからプロファイリングデータを収集します。
ls
コマンドのデバッグ情報をインストールします。debuginfo-install -y coreutils
# debuginfo-install -y coreutils
Copy to Clipboard Copied! Toggle word wrap Toggle overflow プロファイリングを実行します。
operf ls -l ~
$ operf ls -l ~ Profiling done.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 収集したデータを分析します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
例23.3 Java プログラムのプロファイリングでの operf の使用
以下の例では、operf
ツールを使用して Java (JIT) プログラムからプロファイリングデータを収集し、次に opreport
を使用して、シンボルごとのデータを出力します。
この例で使用するデモ用の Java プログラムをインストールします。これは java-1.8.0-openjdk-demo パッケージの一部であり、Optional チャンネルに含まれます。Optional チャンネル の使用方法は、Optional および Supplementary リポジトリーの追加 を参照してください。Optional チャンネルを有効にしたら以下のパッケージをインストールします。
yum install java-1.8.0-openjdk-demo
# yum install java-1.8.0-openjdk-demo
Copy to Clipboard Copied! Toggle word wrap Toggle overflow OProfile の oprofile-jit パッケージをインストールして、Java プログラムからプロファイリングデータを収集できるようにします。
yum install oprofile-jit
# yum install oprofile-jit
Copy to Clipboard Copied! Toggle word wrap Toggle overflow OProfile データのディレクトリーを作成します。
mkdir ~/oprofile_data
$ mkdir ~/oprofile_data
Copy to Clipboard Copied! Toggle word wrap Toggle overflow デモプログラムが含まれるディレクトリーに移動します。
cd /usr/lib/jvm/java-1.8.0-openjdk/demo/applets/MoleculeViewer/
$ cd /usr/lib/jvm/java-1.8.0-openjdk/demo/applets/MoleculeViewer/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow プロファイリングを開始します。
operf -d ~/oprofile_data appletviewer \ -J"-agentpath:/usr/lib64/oprofile/libjvmti_oprofile.so" example2.html
$ operf -d ~/oprofile_data appletviewer \ -J"-agentpath:/usr/lib64/oprofile/libjvmti_oprofile.so" example2.html
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ホームディレクトリーに移動して、収集したデータを分析します。
cd
$ cd
Copy to Clipboard Copied! Toggle word wrap Toggle overflow opreport --symbols --threshold 0.5
$ opreport --symbols --threshold 0.5
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例は以下のとおりです。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow