23.2.2. 監視するイベントのセッティング

ほとんどのプロセッサには カウンター が装備されており、OProfile はこれを使用して特定のイベントを監視します。表23.2「OProfile プロセッサ及びカウンター」 で示してあるように、利用可能なカウンターの数はプロセッサにより異なります。

表23.2 OProfile プロセッサ及びカウンター

プロセッサ cpu_type カウンターの数
AMD64 x86-64/hammer 4
AMD Athlon i386/athlon 4
AMD Family 10h x86-64/family10 4
AMD Family 11h x86-64/family11 4
AMD Family 12h x86-64/family12 4
AMD Family 14h x86-64/family14 4
AMD Family 15h x86-64/family15 6
IBM eServer System i 及び IBM eServer System p タイマー 1
IBM POWER4 ppc64/power4 8
IBM POWER5 ppc64/power5 6
IBM PowerPC 970 ppc64/970 8
IBM S/390 及び IBM System z タイマー 1
Intel Core i7 i386/core_i7 4
Intel Nehalem マイクロアーキテクチャ i386/nehalem 4
Intel Pentium 4 (ハイパースレッドなし) i386/p4 8
Intel Pentium 4 (ハイパースレッドあり) i386/p4-ht 4
Intel Westmere マイクロアーキテクチャ i386/westmere 4
TIMER_INT タイマー 1
表23.2「OProfile プロセッサ及びカウンター」 を使用すると、正しいプロセッサタイプが検出されたことを立証し、更に同時に監視できるイベントの数を決定できます。サポートされているパフォーマンス監視ハードウェアをプロセッサが装備していない場合、timer が、プロセッサタイプとして使用されます。
timer が使用される場合、ハードウェアはハードウェアパフォーマンスカウンター用のサポートを持たないため、イベントをプロセッサ用に設定できません。その代わりに、タイマー割り込み (timer interrupt) がプロファイル用に使用されます。
timer がプロセッサタイプとして使用されない場合は、監視されるイベントは変更できません。そしてプロセッサ用にカウンター0がデフォルトでタイムベースのイベントにセットされます。プロセッサ上に複数のカウンターが存在する場合、カウンター0以外のカウンターはデフォルトではイベントにセットされません。監視されるデフォルトのイベントは 表23.3「デフォルトのイベント」 に示してあります。

表23.3 デフォルトのイベント

プロセッサ カウンター用のデフォルトイベント 詳細
AMD Athlon 及び AMD64 CPU_CLK_UNHALTED プロセッサのクロックは停止していません
AMD Family 10h, AMD Family 11h, AMD Family 12h CPU_CLK_UNHALTED プロセッサのクロックは停止していません
AMD Family 14h, AMD Family 15h CPU_CLK_UNHALTED プロセッサのクロックは停止していません
IBM POWER4 サイクル プロセッサのサイクル
IBM POWER5 サイクル プロセッサのサイクル
IBM PowerPC 970 サイクル プロセッサのサイクル
Intel Core i7 CPU_CLK_UNHALTED プロセッサのクロックは停止していません
Intel Nehalem マイクロアーキテクチャ CPU_CLK_UNHALTED プロセッサのクロックは停止していません
Intel Pentium 4 (ハイパースレッド有りと無し) GLOBAL_POWER_EVENTS プロセッサが停止していない期間の長さ
Intel Westmere マイクロアーキテクチャ CPU_CLK_UNHALTED プロセッサのクロックは停止していません
TIMER_INT (なし) 各タイマー割り込みのサンプル
一度に監視できるイベントの数はプロセッサのカウンターの数で決定されます。しかし、それは1対1の関係ではなく、一部のプロセッサでは一定のイベントは特定のカウンターにマップしなければなりません。利用可能なカウンターを判定するには、以下のコマンドを実行します:
~]# ls -d /dev/oprofile/[0-9]*
利用可能なイベントはプロセッサタイプによって変わります。プロファイリング用に利用可能なイベントを判定するには、root として以下のコマンドを実行します。(一覧はシステムのプロセッサタイプに特有のものです):
~]# ophelp

注記

OProfile 適正に設定されていないと、ophelp は以下のエラーメッセージが出て失敗します。
Unable to open cpu_type file for reading
Make sure you have done opcontrol --init
cpu_type 'unset' is not valid
you should upgrade oprofile or force the use of timer mode
OProfile の設定については、「OProfile の設定」 に記載の指示にしたがってください。
各カウンター用のイベントはコマンドライン、またはグラフィカルインターフェイスを介して設定できます。グラフィカルインターフェイスに関する情報については 「グラフィカルインターフェース」 を参照して下さい。カウンターが特定のイベントにセットできない場合は、エラーメッセージが表示されます。
コマンドラインを介して各設定可能なカウンター用にイベントをセットするには、opcontrol を使用します:
~]# opcontrol --event=event-name:sample-rate
event-nameophelp からのイベントの実際の名前で入れ替え、sample-rate をサンプル間のイベントの数で入れ替えます。

23.2.2.1. サンプルのレート

デフォルトでは、タイムベースのイベントセットが選択されます。これはプロセッサ別に100,000 クロックサイクル毎にサンプルを1つ作成します。タイマー割り込みが使用される場合は、タイマーは jiffy レートにセットされて、ユーザー設定ではありません。cpu_typetimer でない場合、各イベントは サンプルのレート をそれ自身にセットすることができます。サンプルレートとは、各サンプルのスナップショットの間隔内に於けるイベントの数です。
カウンター用にイベントをセットする際には、サンプルレートも指定できます:
~]# opcontrol --event=event-name:sample-rate
sample-rate を再度サンプルを取るまでのイベントの数で入れ替えます。カウントが少ないとサンプル取りの回数が増えます。頻繁に発生しないイベントには、イベントのインスタンスをキャプチャするために低いカウントが必要になるでしょう。

警告

サンプルレートをセットする際には細心の注意が必要です。サンプルの頻度が高すぎると、システム負荷が大きくなり過ぎてシステムがフリーズしたかのように見えるか、または実際にフリーズする原因になります。

23.2.2.2. ユニットマスク

一部のユーザーパフォーマンス監視イベントでは、イベントを更に定義するためにユニットマスクも必要かも知れません。
各イベントのユニットマスクは ophelp コマンドで一覧表示されます。各ユニットマスクの値は 16進法形式で一覧になっています。複数のユニットマスクを指定するには、16進法の値をビットサイズの or オペレーションの使用と組み合わせる必要があります。
~]# opcontrol --event=event-name:sample-rate:unit-mask