• 検索結果がありません。

第 9 章 Itanium ® 2 プロセッサ向けの最適化

10.2 パフォーマンス・モニタのプログラミング・モデル

10.2.3 監視対象となるイベントの制限

Itanium 2プロセッサ上では、パフォーマンス監視の対象となるイベントを、一部のイベントだけ

に制限できる。図10-4に示すように、命令アドレス範囲、特定の命令オペコード、データ・アド レス範囲、イベント固有の「単位マスク」、イベントを発生させた特権レベルと命令セット、およ びパフォーマンス・モニタ・フリーズ・ビット(PMC0.fr)の状態に基づいて、監視対象となるイベ ントを制限できる。

• Itanium命令アドレス範囲チェック: Itanium 2プロセッサでは、設定可能な命令アドレス範囲 に基づいて、監視対象となるイベントを制限できる。これによって、大規模なItaniumベー ス・アプリケーション内の特定のダイナミック・リンク・ライブラリ(DLL)、関数、または ループの監視が可能になる。Itanium命令アドレス範囲チェックは、パイプラインの命令 フェッチ段階で適用される。チェック条件を満たした命令は、そのパイプライン全体を通じ て監視対象となる。この方法で、パイプラインの動的命令長(約48個の命令)より小さい長 さを最小単位とする条件付きイベント・カウントが可能になる。Itanium 2プロセッサの命令 アドレス範囲チェックは、Itaniumアーキテクチャ・ベースのコードの実行中(すなわち、

PSR.isが0の場合)にのみ有効である。詳細は、Itaniumアーキテクチャ・オペコード・マッ チ・レジスタおよびアドレス範囲チェック・レジスタ(PMC8,9)を参照のこと。

表 10-2. Itanium® 2 プロセッサのEARと分岐トレース・バッファ イベント・アドレス・

レジスタ トリガ条件 記録内容

命令キャッシュ L1命令キャッシュ・ミスに なった命令フェッチ(デマン ド・フェッチのみ)

命令アドレス

フェッチが遅延したサイクル数 命令TLB (ITLB) L1 ITLBミスになった命令

フェッチ(デマンド・フェッ チのみ)

命令アドレス

L1 ITLBミスを発生させたコンポーネント: L2 ITLB VHPTまたはソフトウェア データ・キャッシュ L1データ・キャッシュ・ミス

になったロード命令

命令アドレス データ・アドレス

ロードが遅延したサイクル数 データTLB

(DTLB)

L1 DTLBミスになった データ参照

命令アドレス データ・アドレス

L1 DTLBミスを発生させたコンポーネント: L2 DTLB、VHPT、またはソフトウェア 分岐

トレース・

バッファ

分岐の結果 分岐命令アドレス

分岐ターゲットと命令アドレス 予測ミスの状態と原因

• Itanium命令オペコード・マッチ: Itanium 2プロセッサは、独立した2つのItaniumアーキテク チャ・オペコード・マッチ・レジスタを搭載している。各マッチ・レジスタによって、現在 発行されている命令のエンコーディングと設定可能なオペコード・マッチ/マスク関数が照合 される。一致したイベントを、パフォーマンス・カウンタによってカウントされる命令タイ プとして選択できる。この方法で、命令タイプのヒストグラムの作成や、(タグ付きNOPの 挿入による)デスティネーション・レジスタおよびプレディケート・レジスタと基本ブロック の使用状況のプロファイリングが可能になる。オペコード・マッチャーは、Itaniumアーキテ クチャ・ベースのコードの実行中(すなわち、PSR.isが0の場合)にのみ有効である。詳細 は、10.3.4節を参照のこと。

• Itaniumアーキテクチャ・データ・アドレス範囲チェック: Itanium 2プロセッサは、設定可能 なデータ・アドレス範囲に基づいて、監視対象となるメモリ操作イベントを制限できる。こ の方法で、特定のデータ構造のデータ・キャッシュ・ミス動作を選択した上で監視できる。

詳細は、10.3.6項を参照のこと。

• イベント固有のユニット・マスク:いくつかのイベントは、「ユニット・マスク」を指定して、

監視されるユニットで直接に、必要なイベントを選別することができる。例えば、イベント 固有のユニット・マスクを使用して、カウントするバス・トランザクションの数を制限すれ ば、バス・エージェントからのトランザクション、プロセッサ自体からのトランザクション、

またはその他のI/Oバス・マスタからのトランザクションを含めることができる。この場合、

図 10-4. Itanium® 2 プロセッサの監視対象となるイベントの制限

000987a

Itanium® Instruction Address Range Check Instruction Address

Itanium Instruction Opcode Match Instruction Opcode

Is Itanium instruction pointer in IBR range?

Does Itanium opcode match?

Itanium Data Address Range Check (Memory Operations Only)

Data Address Is Itanium data address

in DBR range?

Event Spefic "Unit Mask"

Event Did event happen and qualify?

Privilege Level Check Current Privilege

Level

Executing at monitored privilege level?

Instruction Set Check Current Instruction

Set (Itanium or IA-32)

Executing in monitored instruction set?

Event Count Freeze Performance Monitor

Freeze Bit (PMC0.fr) Is event monitoring enabled?

YES, all of the above are true;

this event is qualified.

命令アドレス

命令オペコード

データ・アドレス

イベント

現行特権レベル

現在の命令セット (Itanium命令または

IA-32命令)

パフォーマンス・モニタ・

フリーズ・ビット (PMC0.fr)

イベント・カウント・フリーズ 命令セット・チェック 特権レベル・チェック イベント固有の"ユニット・マスク"

Itaniumアーキテクチャ・データ・

アドレス範囲チェック (メモリ操作のみ)

Itanium命令 オペコード・マッチ Itanium命令アドレス

範囲チェック

Itanium命令ポインタはIBR範囲内 ?

Itaniumオペコードは一致している ?

Itaniumアーキテクチャ・データ・

アドレスはDBR範囲内か?

イベントは発生し制限されている ?

監視されている特権レベルで実行 中か?

監視されている命令セットで実行中 ?

はい。すべて真です。

このイベントは制限されます。

イベント監視機能はイネーブルに なっているか?

Itaniumアーキテクチャ・オペコー ドは一致しているか?

バス・ユニットは、カウント対象のトランザクションを指定する3ウェイのユニット・マス ク(任意のバス・エージェント、プロセッサ自体、またはI/Oバス・マスタ)を使用する。

Itanium 2プロセッサの場合、分岐、メモリ、バス・ユニットからのイベントは、各種のユ

ニット・マスクをサポートする。詳細は、第11章「パフォーマンス監視イベント」のイベン トに関するページを参照のこと。

• 特権レベル:プロセッサ・ステータス・レジスタ内の2ビットを使用して、プロセスに基づき イベントを選択した上で監視ができる。Itanium 2プロセッサは、現行特権レベルに基づいた 条件付きイベント・カウント機能をサポートしている。これによって、パフォーマンス監視 ソフトウェアは、ユーザによるイベントとオペレーティング・システムによるイベントを区 別して、イベント数の内訳を調べられる。特権レベルによる監視の制限は、10.3.1項「パ フォーマンス・モニタの制御とアクセス」を参照のこと。

• 命令セット: Itanium 2プロセッサは、各イベント・モニタにつき2つの命令セット・マスク・

ビットによる、現在実行中の命令セット(Itanium命令またはIA-32命令)に基づいた条件付きイ ベント・カウント機能をサポートしている。これによって、パフォーマンス監視ソフトウェア は、Itanium命令によるイベントとIA-32命令によるイベントを区別して、イベント数の内訳を 調べられる。詳細は、10.3.1項「パフォーマンス・モニタの制御とアクセス」を参照のこと。

• パフォーマンス・モニタ・フリーズ:イベント・カウンタのオーバーフローまたはソフトウェ アによって、イベント監視機能がフリーズされるときがある。監視機能がフリーズされると、

ソフトウェアがモニタ・フリーズ・ビット(PMC0.fr)をクリアするまで、すべてのイベント監 視は中止される。これによって、パフォーマンス監視ルーチンそれ自体(例えば、カウンタ・

オーバーフロー割り込みハンドラまたはパフォーマンス監視コンテキスト・スイッチ・ルー チン)が、観察されているシステムのイベント数に影響を与えることを防げる。詳細は、

『インテル® Itanium® アーキテクチャ・ソフトウェア・デベロッパーズ・マニュアル』第2巻、

7.2.4項を参照のこと。

10.2.3.1 オペコード・マッチ、命令アドレス範囲チェック、データ・アドレス範囲チェックの組

み合わせ

Itanium 2プロセッサは、図10-5に示す命令タグ付け機構を使用して、各種のイベント制限機構を

組み合わせられる。

図 10-5. Itanium® 2 プロセッサの命令タグ付け機構

000988b

Itanium Opcode Matcher (PMC9, PMC15)

Itanium® Opcode Matcher (PMC8, PMC15) Itanium

Instruction Address

Range Check (IBRs, PMC14)

Itanium Data Address Range

Check (DBRs, PMC13)

Memory Eventi Eventj

Eventk

Eventl Tag(PMC[8])

IBRRange Tag

DBRRange Tag

Tag(PMC9)

Event Select (PMCi.es)

Privilege Level &

Instruction Set Check

Privilege Level Mask Instruction Set Mask (PMCi.plm, PMCi.ism)

Counter (PMDi) イベント選択(PMCi.es) Itanium

アーキテクチャ・

オペコード・

マッチャ−

(PMC8PMC15)

Itanium アーキテクチャ・

データ・アドレス 範囲チェック (DBRPMC13)

Itanium命令 アドレス範囲

チェック (IBRPMC14)

Itanium アーキテクチャ・

オペコード・

マッチャー (PMC9PMC15)

特権レベル・マスク 命令セット・マスク (PMCi.plm、PMCi.ism) メモリ・

イベントi

イベントj

イベントk

イベントl

特権レベル および命令 セットの チェック

カウンタ (PMDi)

Itanium命令の実行時には(PSR.is=0)、最初に命令アドレス範囲チェックが適用される。得られ たアドレス範囲チェック・タグ(IBRRangeTag)は、2つのオペコード・マッチャーに渡される。こ れらのオペコード・マッチャーは、命令アドレス範囲チェックとオペコード・マッチを行う。得 られた2つのタグ(Tag(PMC8)およびTag(PMC9))のそれぞれは、リタイア命令カウント・イベン トとしてカウントできる(詳細は、11-147ページの「IA64_TAGGED_INST_RETIRED」のイベント の説明を参照のこと)。

アドレス範囲/オペコード・マッチ・タグのうち1つ(Tag(PMC8))が、すべてのダウン・ストリー ムのパイプライン・イベントの選択条件を指定する。メモリ階層内のイベント(L1/L2データ・

キャッシュ・イベントおよびデータTLBイベント)は、データ・アドレスのDBRRangeTagによっ てさらに制限ができる。

表10-3にまとめたように、Itanium 2プロセッサ上では、データ・アドレス範囲チェックをオペ コード・マッチおよび命令範囲チェックと組み合わせられる。また、現行特権レベルおよび現在 実行中の命令セットに基づいた追加のイベント制限を、すべてのイベントに適用できる。これに ついては、10.2.3.2項「特権レベルによる制限」および10.2.3.3項「命令セットによる制限」で説 明する。

10.2.3.2 特権レベルによる制限

パフォーマンス監視ソフトウェアは、オペレーティング・システムによるコンテキスト・スイッ チのサポートを常に期待することはできない。このため、一般的に、マルチプロセッシング・シ ステムまたはマルチプロセス作業負荷の中の1つのプロセスのパフォーマンス分析は不可能で あった。このような分析をハードウェア上でサポートするために、Itaniumアーキテクチャは、3 つのグローバル・ビット(PSR.up, PSR.pp, DCR.pp)とモニタごとの「特権モニタ」ビット (PMCi.pm)を定義する。オペレーティング・システムとユーザレベルのアプリケーションがパ フォーマンスに与える影響の内訳を調べるために、各モニタは、4ビットの特権レベル・マスク

(PMCi.plm)を指定する。このマスクは、プロセッサ・ステータス・レジスタ内の現行特権レベル

(PSR.cpl)と比較され、PMCi.plm[PSR.cpl]が1の場合は、イベント・カウント機能が有効になる。

Itanium 2プロセッサのパフォーマンス・モニタの制御は、10.3.1項「パフォーマンス・モニタの制

御とアクセス」で説明する。

PMCレジスタは、ユーザレベル・モニタとして設定することも(PMCi.pm=0)、システムレベル・

モニタとして設定することもできる(PMCi.pm=1)。ユーザレベル・モニタは、PSR.upが1になっ たときに有効になる。PSR.upは、sum/rum命令を使用して、アプリケーションによって制御でき 表 10-3. Itanium® 2 プロセッサのイベント制限モード

イベント制限モード

オペコード・

マッチ・

イネーブル PMC15

.ibrp0-pmc8

オペコード・

マッチ PMC8

命令アドレス 範囲チェック・

イネーブル PMC14.ibrp0

データ・アドレス 範囲チェック [PMC13.enable-dbrp#

PMC13.dbrp#]

(メモリ・パイプ・

イベントのみ) 制限なしの監視(すべての

イベント)

x 0xffff_ffff_ffff_ffff x [1,11]または[0,xx]

命令アドレス範囲チェック のみ

x 0xffff_ffff_ffff_fffe 0 [1,00]

オペコード・マッチのみ 1 希望のオペコード x [1,01]

データ・アドレス範囲

チェックのみ x 0xffff_ffff_ffff_ffff x [1,10]

命令アドレス範囲チェック とデータオペコード・

マッチ

1 希望のオペコード 0 [1,01]

命令アドレス範囲チェック とデータ・アドレス範囲 チェック

x 0xffff_ffff_ffff_fffe 0 [1,00]

オペコード・マッチとデー

タ・アドレス範囲チェック 1 希望のオペコード x [1,00]