43.2. OProfileの設定

OProfile を実行するには設定が必要です。 カーネル監視の指定(又はカーネル非監視の指定)が最低限必要です。 次のセクションでopcontrolユーティリティを使用して OProfileを設定する方法を説明します。opcontrolコマンドが実行されると、 /root/.oprofile/daemonrcファイルに設定オプションが保存されます。

43.2.1. カーネルの指定

最初に、OProfileでのカーネル監視の有無を設定します。 この設定オプションのみがOProfileを起動する前に必要となります。外のオプションは 任意となります。

カーネルを監視するには、次のコマンドをrootとして実行して下さい。

opcontrol --vmlinux=/boot/vmlinux-`uname -r`

OProfileにてカーネルを監視しないよう設定するには、 次のコマンドとrootとして実行して下さい。

opcontrol --no-vmlinux

oprofileはカーネルモジュールを取り込み、 (取り込まれていない場合)、/dev/oprofile/ ディレクトリが存在しない場合は /dev/oprofile/ ディレクトリを作成します。 このディレクトリに関する詳細は項43.6を参照下さい。

注意注記
 

OProfileによるカーネルのプロファイルが無効として設定されている場合でも SMPカーネルは実行状態にし、SMPカーネルからoprofile モジュールを取り込めるようにして下さい。

カーネル内でのサンプル回収の有無を指定する設定では回収するデータの変更のみが可能で、データの収集方法や保存場所 の変更はできません。カーネルやアプリケーションライブラリの 他のサンプルを生成する場合は項43.2.3を参照下さい。

43.2.2. 監視イベントの設定

OProfileが特定イベント監視に使用するカウンタ はプロセッサの多くに内蔵されています。 表43-2の通り、 利用可能なカウンタ数はプロセッサによって異なります。

プロセッサcpu_typeカウンタ数
Pentium Proi386/ppro2
Pentium IIi386/pii2
Pentium IIIi386/piii2
Pentium 4 (Hyper-threading 非対応)i386/p48
Pentium 4 (hyper-threading 対応)i386/p4-ht4
Athloni386/athlon4
AMD64x86-64/hammer4
Itaniumia64/itanium4
Itanium 2ia64/itanium24
TIMER_INTtimer1
IBM eServer iSeriestimer1
IBM eServer pSeriestimer1
IBM eServer S/390timer1
IBM eServer zSeriestimer1

表 43-2. OProfile プロセッサとカウンタ

表43-2にて正しいプロセッサタイプが検出 されたか判断し、同時監視できるイベント数を確認して下さい。プロセッサのパフォーマンス監視ハードウェアが非対応の場合、 プロセッサタイプにtimerを指定して下さい。

timerが指定された場合、 ハードウェアがハードウェアパフォーマンスカウンタに対応していないため、 プロセッサに対してイベントを設定することができません。 代わりに、タイマ割り込みをプロファイルに使用して下さい。

timerがプロセッサタイプとして 指定されていない場合、監視イベントが変更する場合があります。 又、デフォルトでタイムベースイベントにプロセッサのカウンタ0が設定されます。 プロセッサにカウンタが複数存在する場合、デフォルトではカウンタ0 以外はイベントに設定されません。デフォルトの監視イベントは表43-3を 参照下さい。

プロセッサカウンタ0のデフォルトイベント説明
Pentium Pro、Pentium II、Pentium III、Athlon、AMD64CPU_CLK_UNHALTEDプロセッサのクロックは停止しません。
Pentium 4 (HT対応、HT非対応)、Intel® EM64TGLOBAL_POWER_EVENTSプロセッサが停止しなかった時間
Itanium 2CPU_CYCLESCPU サイクル
TIMER_INT(無し)各タイマ割り込みのサンプル

表 43-3. デフォルトイベント

一度に監視可能なイベント数はプロセッサのカウンタ数によって決まります。 しかし、一対一の比率で決まるわけではなく、プロセッサによっては イベントを特定カウンターにマップしなければならない場合があります。 カウンタ数を調べるには次のコマンドを実行して下さい。

cat /dev/oprofile/cpu_type

イベントはプロセッサタイプによって異なります。 プロファイルできるイベントを調べるには、次のコマンドをrootとして実行して下さい。 (システムのプロセッサタイプに特有のリストです)

op_help

各カウンタのイベントはコマンドライン、又はグラフィカルインターフェースより 設定可能です。カウンタを特定のイベントに設定できない場合、エラーメッセージが 表示されます。

コマンドラインにて設定可能なカウンタのイベントを設定するには、 opcontrolを使用して下さい。

opcontrol --ctrlN-event=<event-name>

Nをカウンター番号(0で始まる)に置き換え、 <event-name>op_helpと 同じイベント名に置き換えて下さい。

43.2.2.1. サンプリングレート

デフォルトでは、タイムベースのイベントセットが選択され、 1プロセッサにつき、毎秒約2000サンプルが生成されます。 タイマ割り込みが使用されている場合は、瞬間速度に設定され、 ユーザー設定ができません。 cpu_typetimerでない場合、 サンプリングレートを イベントに設定することができます。 サンプリングレートとは、 サンプルスナップショット間のイベント数のことです。

カウンタのイベントを設定する際にサンプルレートも指定することができます。

opcontrol --ctrN-event=<event-name> --ctrN-count=<sample-rate>

<sample-rate>を次のサンプリングが行なわれる まで のイベント数に置き換えます。 カウントが小さいほど、サンプルは頻繁になります。 頻度の低いイベントに対してはカウントを小さくし、イベントの発生を把握する 必要があります。

注意注意
 

サンプリングレートの設定は十分慎重に行なって下さい。 頻度が高すぎるサンプリングはシステムの過負荷につながり、システムがフリーズしたかのように重たくなったり、実際にフリーズする場合が あります。

43.2.2.2. ユニットマスク

cpu_typetimerでない場合に イベントをさらに詳しく定義するにはユニットマスク が必要になります。

op_helpにて各イベントのユニットマスクの一覧を 表示することができます。 各ユニットマスクの値は16進表記にて表示されます。 ユニットマスクを複数指定するには、 ビット単位のor演算子を使用し、16進表記の値を足して下さい。

opcontrol --ctrN-event=<event-name> --ctrN-count=<sample-rate> --ctrN-unit-mask=<value>

43.2.3. カーネルプロファイルとユーザープロファイルを分離する

デフォルトでは各イベントに対しカーネルモードとユーザーモードの情報が 収集されます。特定のカウンタに対するカーネルモードのイベントをカウントしないよう に設定するには、次のコマンドを実行して下さい。 (Nはカウンタ番号です)

opcontrol --ctrN-kernel=0

次のコマンドを実行し、 カウンタに対するカーネルモードのプロファイルを再起動して下さい。

opcontrol --ctrN-kernel=1

特定のカウンタに対するユーザーモードのイベントをカウントしないよう に設定するには、次のコマンドを実行して下さい。 (Nはカウンタ番号です)

opcontrol --ctrN-user=0

次のコマンドを実行し、 カウンタに対するユーザーモードのプロファイルを再起動して下さい。

opcontrol --ctrN-user=1

OProfileデーモンにてサンプルファイルにプロファイルデータが書き込まれる時、 カーネルとライブラリプロファイルデータは異なるサンプルファイルに 分離されます。デーモンによるサンプルファイルの書き込みを設定するには、 次のコマンドをrootとして実行して下さい。

opcontrol --separate=<choice>

<choice>は次に上げるうちの1つとなります。

--separate=libraryを使用すると、 ライブラリ名と実行可能ファイル名がサンプルファイル名に含まれます。