EN JA
PMC.P4(3)
PMC.P4(3) FreeBSD Library Functions Manual PMC.P4(3)

名称

pmc.p4Intel Pentium 4 と他の Netburst アーキテクチャ CPU のための測定イベント

ライブラリ

Performance Counters Library (libpmc, -lpmc)

書式

#include < pmc.h>

解説

Intel P4 PMC は、Intel Pentium 4 と Netburst CPU アーキテクチャを使用する Xeon プロセッサに存在しています。

これらの PMC は、次に文書化されています。 IA-32 Intel(R) Architecture Software Developer's Manual, Volume 3: System Programming Guide, Order Number 245472-012, Intel Corporation, 2003. これらの PMC の使用に関する詳細は、次の文書で見つかります。 IA-32 Intel(R) Architecture Optimization Guide, Order Number 248966-009, Intel Corporation, 2003. これらのイベントのいくつかは、次の文書に記述されたプロセッサの不具合の影響を受けます。 Intel(R) Pentium(R) 4 Processor Specification Update, Document Number: 249199-059, Intel Corporation, April 2005.

PMC 機能

Intel Pentium 4 PMC は、40 ビット幅です。各 CPU は、18 個の PMC を含み、それぞれ 4、4、4 と 6 の PMC で 4 つのグループに分割されます。ハイパースレッディングサポートがあるプロセッサでは、PMC リソースは、論理的なプロセッサの間で共有されます。これらの PMC は、次のケーパビリティをサポートします:
Capability Support
PMC_CAP_CASCADE Yes
PMC_CAP_EDGE Yes
PMC_CAP_INTERRUPT Yes
PMC_CAP_INVERT Yes
PMC_CAP_READ Yes
PMC_CAP_PRECISE Unimplemented
PMC_CAP_SYSTEM Yes
PMC_CAP_TAGGING Yes
PMC_CAP_THRESHOLD Yes
PMC_CAP_USER Yes
PMC_CAP_WRITE Yes

イベント修飾子

Intel P4 PMC のためのイベント指定子は、次の共通の修飾子を持つことができます:
active= choice
(P4 HTT CPU で) どの論理的プロセッサがアクティブであるかに基づくイベントのカウントをフィルタリングします。 choice に許された値は、次の通りです:

any
どちらかの論理的プロセッサがアクティブであるときにカウントします。
both
両方の論理的プロセッサがアクティブであるときにカウントします。
none
どちらの論理的プロセッサもアクティブでないときにだけカウントします。
single
1 つの論理的プロセッサがアクティブであるときにだけカウントします。

デフォルトは、“ both”です。

cascade
PMC を相手に転送するように設定します。詳しい情報に関しては、下記の カスケード P4 PMC を参照してください。
edge
スレッシュホールド比較出力の偽と真の遷移をカウントするためにカウンタを設定します。この修飾子は、スレッシュホールド修飾子も指定された場合にだけ、効果があります。
complement
調べられたイベントカウントが指定されたスレッシュホールド修飾子の値以下であるときにだけ、増加するためのカウンタを設定します。
mask= qualifier
Intel P4 PMC のための多くのイベント指定子は、マスク修飾子を使用してさらに修飾する必要があります。これらの修飾子のために許された構文は、イベント特有であり、イベントとともに記述されます。
os
プロセッサの CPL が 0 であるときにカウントするための PMC を設定します。
precise
正確なイベントに基づくサンプリングを選択します。正確なサンプリングは、制限されたイベントの組のためのハードウェアによってサポートされます。
tag= value
value でこのイベント指定子で他のフィールドによって選択された内部の uop にタグ付けするために PMC を設定します。この機能は、PMC をカスケードするときに使用されます。
threshold= value
調べられたイベントカウントが指定されたスレッシュホールド値 value より大きいときにだけ増加するために PMC を設定します。
usr
プロセッサの CPL が 1、2 または 3 であるときにカウントするために PMC を設定します。

os”または“ usr”修飾子のどちらも指定されなかったなら、デフォルトは両方を有効にすることです。

HTT がある Intel Pentium 4 プロセッサでは、イベントは 2 つのクラスに分割されます:

TS イベント
は、ハードウェアが、他方で生成されたイベントから 1 つの論理的プロセッサで生成されたイベントを区別することができるところのイベントです。
TI イベント
は、ハードウェアがパッケージの複数の論理的プロセッサによって生成されたイベントを区別することができないところのイベントです。

TS イベントだけが、Pentium-4/HTT CPU でプロセスモード PMC で使用することが許されています。

Intel P4 PMC でサポートされたイベント指定子は、次の通りです:

p4-128bit-mmx-uop [ ,mask=flags]
(TI イベント) 128 ビット SIMD オペランドを動作させる整数 SIMD SSE2 命令をカウントします。修飾子 flags は、(デフォルトでもある) 次の値を取ることができます:

all
メモリ中または XMM レジスタ中の 128 ビットの SIMD 整数オペランドですべての uops 操作をカウントします。

命令が 2 つ以上の 128 ビット MMX uop を含んでいるなら、各 uop はカウントされます。

p4-64bit-mmx-uop [ ,mask=flags]
(TI イベント) 64 ビットの SIMD オペランドで操作する MMX 命令をカウントします。修飾子 flags は、(デフォルトでもある) 次の値を取ることができます:

all
メモリ中または XMM レジスタ中の 128 ビットの SIMD 整数オペランドですべての uop 操作をカウントします。

命令が 2 つ以上の 64 ビット MMX uop を含んでいるなら、各 uop はカウントされます。

p4-b2b-cycles
(TI イベント) 連続 (back-to-back) バスサイクルをカウントします。このイベントのためのこれ以上の文書は利用できません。
p4-bnr
(TI イベント) バス not レディ (bus-not-ready) 条件をカウントします。このイベントのためのこれ以上の文書は利用できません。
p4-bpu-fetch-request [ ,mask=qualifier]
(TS イベント) qualifier で指定された追加フラグによって修飾された命令フェッチ要求をカウントします。現時点では、1 つのフラグだけがサポートされています:

tcmiss
トレースキャッシュ検索ミスをカウントします。

また、デフォルトの修飾子は“ mask=tcmiss”です。

p4-branch-retired [ ,mask=flags]
(TS イベント) リタイアされたブランチをカウントします。修飾子 flags は、次の‘ +’で区切られた文字列のリストです:

mmnp
取られず予測されたブランチをカウントします。
mmnm
取られず予測ミスされたブランチをカウントします。
mmtp
取られて予測されたブランチをカウントします。
mmtm
取られて予測ミスされたブランチをカウントします。

デフォルトの修飾子は、すべての 4 種類のブランチをカウントします。

p4-bsq-active-entries [ ,mask=qualifier]
(TS イベント) BSQ で現在アクティブなエントリ (15 に切り抜く) の数をカウントします。修飾子 qualifier は、‘ +’で区切られた次の一組のフラグです:

req-type0, req-type1
要求タイプのエンコードを選択するために使用される 2 ビットの数を形成します:

0
読み込み無効を除く読み込み
1
読み込み無効
2
書き込みバック (writeback) 以外の書き込み
3
書き込みバック (writeback)

ビット“ req-type1”は、この 2 ビット数のための MSB です。

req-len0, req-len1
要求長さエンコードを指定する 2 ビット数を形成します:

0
0 チャンク
1
1 チャンク
3
8 チャンク

ビット“ req-len1”は、この 2 ビット数のための MSB です。

req-io-type
入力または出力要求である要求をカウントします。
req-lock-type
バスをロックする要求をカウントします。
req-lock-cache
キャッシュをロックする要求をカウントします。
req-split-type
8 バイト境界を超えて分離されるバスの 8 バイトのチャンク (塊) である要求をカウントします。
req-dem-type
設定されているなら、(プリフェッチでない) 請求 (demand) される要求をカウントします。設定されていないなら、プリフェッチされた要求をカウントします。
req-ord-type
命令される要求をカウントします。
mem-type0, mem-type1, mem-type2
メモリタイプエンコードを指定する 3 ビットの数を形成します:

0
UC
1
USWC
4
WT
5
WP
6
WB

ビット“ mem-type2”は、この 3 ビット数のための MSB です。

デフォルトの修飾子は、すべての上記のビット設定があります。

edge”修飾子を使用するエッジトリガは、カウントが繰り返すとき、このイベントで使用するべきではありません。

p4-bsq-allocation [ ,mask=qualifier]
(TS イベント) ‘ +’で区切られた、次の一組のフラグである qualifier で指定されたフラグに従ってバスシーケンスユニットの割り付けをカウントします:

req-type0, req-type1
要求タイプのエンコードを選択するために使用される 2 ビットの数を形成します:

0
読み込み無効を除く読み込み
1
読み込み無効
2
書き込みバック (writeback) 以外の書き込み
3
書き込みバック (writeback)

ビット“ req-type1”は、この 2 ビット数のための MSB です。

req-len0, req-len1
要求長のエンコードを指定する 2 ビット数を形成します:

0
0 チャンク
1
1 チャンク
3
8 チャンク

ビット“ req-len1”は、この 2 ビット数のための MSB です。

req-io-type
入力または出力要求である要求をカウントします。
req-lock-type
バスをロックする要求をカウントします。
req-lock-cache
キャッシュをロックする要求をカウントします。
req-split-type
8 バイト境界を超えて分離されるバスの 8 バイトのチャンク (塊) である要求をカウントします。
req-dem-type
設定されているなら、(プリフェッチでない) 請求 (demand) される要求をカウントします。設定されていないなら、プリフェッチされた要求をカウントします。
req-ord-type
命令される要求をカウントします。
mem-type0, mem-type1, mem-type2
メモリタイプエンコードを指定する 3 ビットの数を形成します:

0
UC
1
USWC
4
WT
5
WP
6
WB

ビット“ mem-type2”は、この 3 ビット数のための MSB です。

デフォルトの修飾子は、すべての上記のビット設定があります。

通常、このイベントは、複数のカウントを避けるために“ edge”修飾子とともに使用されます。

p4-bsq-cache-reference [ ,mask=qualifier]
(TS イベント) バスユニット (2 番目か 3 番目のレベルのキャッシュ参照) によって見られるようにキャッシュ参照をカウントします修飾子 qualifier は、‘ +’で区切られた次のキーワードのリストです:

rd-2ndl-hits
共有された状態で 2 番目のレベルキャッシュヒットをカウントします。
rd-2ndl-hite
排他的な状態で 2 番目のレベルキャッシュヒットをカウントします。
rd-2ndl-hitm
変更された状態で 2 番目のレベルキャッシュヒットをカウントします。
rd-3rdl-hits
共有された状態で 3 番目のレベルキャッシュヒットをカウントします。
rd-3rdl-hite
排他的な状態で 3 番目のレベルキャッシュヒットをカウントします。
rd-3rdl-hitm
変更された状態で 3 番目のレベルキャッシュヒットをカウントします。
rd-2ndl-miss
2 番目のレベルキャッシュミスをカウントします。
rd-3rdl-miss
3 番目のレベルキャッシュミスをカウントします。
wr-2ndl-miss
2 番目のレベルキャッシュをミスしたデータアクセスキャッシュから書き戻し (write-back) 検索をカウントします。

デフォルトは、上記のすべてのイベントをカウントすることです。

p4-execution-event [ ,mask=flags]
(TS イベント) 実行タグ付けメカニズムを通して選択されたタグ付けをされた uop のリタイアををカウントします。修飾子 flags は、‘ +’文字で区切られた次の文字列を含むことができます:

nbogus0, nbogus1, nbogus2, nbogus3
マークされた uop は偽物 (bogus) ではありません。
bogus0, bogus1, bogus2, bogus3
マークされた uop は偽物 (bogus) です。

このイベントは、必要な uop タグ付けを実行するために割り付けられる追加 (上流) イベントを必要とします。デフォルトはすべての上記のフラグを設定することです。正確なイベントに基づいているサンプリングのために、このイベントを使用することができます。

p4-front-end-event [ ,mask=flags]
(TS イベント) フロントエンドタグ付けメカニズムを通して選択されたタグ付けをされた uop のリタイアをカウントします。修飾子 flags は、‘ +’文字で区切られた次の文字列を含むことができます:

nbogus
マークされた uop は偽物 (bogus) ではありません。
bogus
マークされた uop は偽物 (bogus) です。

このイベントは、必要な uop タグ付けを実行するために割り付けられる追加 (上流) イベントを必要とします。デフォルトは両方の種類のイベントを選択することです。正確なイベントに基づいているサンプリングのために、このイベントを使用することができます。

p4-fsb-data-activity [ ,mask=flags]
(TI イベント) 修飾子 flags によって選択された各 DBSY または DRDY インベントをカウントします。修飾子 flags は、‘ +’文字で区切られた次の一組のフラグです:

drdy-drv
このプロセッサがバスにデータをドライブしているときにカウントします。
drdy-own
このプロセッサがバスからデータを読み込んでいるときにカウントします。
drdy-other
データがバス上にあるが、このプロセッサによってサンプリングされないときにカウントします。
dbsy-drv
このプロセッサがデータをドライブするために次のサイクルで使用するバスを予約するときにカウントします。
dbsy-own
このプロセッサがサンプリングするデータをドライブするために次のバスサイクルで使用するバスをいくつかのエージェントが予約するときにカウントします。
dbsy-other
このプロセッサがサンプリングしないデータをドライブするために次のバスサイクルで使用するバスをいくつかのエージェントが予約するときにカウントします。

フラグ“ drdy-own”と“ drdy-other”は、互いに排他的です。フラグ“ dbsy-own”と“ dbsy-other”は、互いに排他的です。 qualifier のためのデフォルト値は“ drdy-drv+drdy-own+dbsy-drv+dbsy-own”です。

p4-global-power-events [ ,mask=flags]
(TS イベント) プロセッサが停止しない間のサイクルをカウントします。修飾子 flags は、(デフォルトでもある) 次の値を取ることができます:

running
プロセッサがアクティブであるときのサイクルをカウントします。
p4-instr-retired [ ,mask=flags]
(TS イベント) クロックサイクルの間のリタイアした命令をカウントします。修飾子 flags は、‘ +’文字で区切られた次の文字列から成ります:

nbogusntag
タグ付けされなかった偽でない命令をカウントします。
nbogustag
タグ付けされた偽でない命令をカウントします。
bogusntag
タグ付けされなかったに偽の命令をカウントします。
bogustag
タグ付けされた偽の命令をカウントします。

デフォルトの修飾子は、すべての種類の上記の命令をカウントします。

p4-ioq-active-entries [ ,mask=qualifier][ ,busreqtype=req-type]
(TS イベント) アクティブな IOQ の (15 で切り取られる) エントリの数をカウントします。イベントマスクは、修飾子 qualifierreq-type よって指定されます。

修飾子 qualifier は、‘ +’文字で区切られた次の一組のフラグです:

all-read
読み込みエントリをカウントします。
all-write
書き込みエントリをカウントします。
mem-uc
キャッシュ不可能メモリにアクセスするエントリをカウントします。
mem-wc
書き込み組み合わせメモリにアクセスするエントリをカウントします。
mem-wt
書き込みスルーメモリにアクセスするエントリをカウントします。
mem-wp
書き込みプロテクトされたメモリにアクセスするエントリをカウントします。
mem-wb
書き戻し (write-back) メモリにアクセスするエントリをカウントします。
own
プロセッサによってドライブされる格納要求 (すなわち、他のプロセッサまたは DMA でない) をカウントします。
other
他のプロセッサまたは DMA によってドライブされる格納要求をカウントします。
prefetch
カウントにハードウェアとソフトウェアプリフェッチ要求を含めます。

qualifier のためのデフォルト値は上記のすべてのフラグを有効にすることです。

req-type 修飾子は、5 ビットの数値で、加えて特定のバス要求タイプを選択するために使用することができます。デフォルトは、0 です。

edge”修飾子は、このイベントでカウントを繰り返すとき、使用するべきではありません。このイベントの正確な振る舞いは、プロセッサのリビジョンによって決まります。

p4-ioq-allocation [ ,mask=qualifier][ ,busreqtype=req-type]
(TS イベント) qualifierreq-type で設定されたフラグに適合するバスで様々なタイプのトランザクションをカウントします。

修飾子 qualifier は、‘ +’文字で区切られた次の一組のフラグです:

all-read
読み込みエントリをカウントします。
all-write
書き込みエントリをカウントします。
mem-uc
キャッシュ不可能メモリにアクセスするエントリをカウントします。
mem-wc
書き込み組み合わせメモリにアクセスするエントリをカウントします。
mem-wt
書き込みスルーメモリにアクセスするエントリをカウントします。
mem-wp
書き込みプロテクトされたメモリにアクセスするエントリをカウントします。
mem-wb
書き込みバック (戻し) メモリにアクセスするエントリをカウントします。
own
プロセッサによってドライブされる格納要求 (すなわち、他のプロセッサまたは DMA でない) をカウントします。
other
他のプロセッサまたは DMA によってドライブされる格納要求をカウントします。
prefetch
カウントにハードウェアとソフトウェアプリフェッチ要求を含めます。

qualifier のためのデフォルト値は、上記のすべてのフラグを有効にすることです。

req-type 修飾子は、5 ビットの数値で、加えて特定のバス要求タイプを選択するために使用することができます。デフォルトは 0 です。

通常、“ edge”修飾子は、複数のカウントを防ぐためにこのイベントで使用されます。このイベントの正確な振る舞いはプロセッサのリビジョンによって決まります。

p4-itlb-reference [ mask= qualifier]
(TS イベント) 命令トランザクション変換索引 (look-aside) バッファを使用する変換をカウントします。 qualifier 引数は、‘ +’文字で区切られた次の文字列のリストです。

hit
ITLB ヒットをカウントします。
miss
ITLB ミスをカウントします。
hit-uc
キャッシュ不可能な ITLB ヒットをカウントします。

qualifier が指定されないなら、デフォルトは、3 種類のすべての ITLB 変換をカウントすることです。

p4-load-port-replay [ ,mask=qualifier]
(TS イベント) ロードポートでリプレイされたイベントをカウントします。修飾子 qualifier は、次の 1 つの値を取ることができます:

split-ld
分割ロードをカウントします。

qualifier のためのデフォルト値は“ split-ld”です。

p4-mispred-branch-retired [ ,mask=flags]
(TS イベント) 予測ミスした IA-32 ブランチ命令をカウントします。修飾子 flags は (デフォルトでもある) 次の値を取ることができます:

nbogus
偽でないリタイアしたブランチ命令をカウントします。
p4-machine-clear [ ,mask=flags]
(TS イベント) プロセッサによって調べられたパイプラインをクリアする数をカウントします。修飾子 flags は、‘ +’文字で区切られた次の文字列のリストです:

clear
マシンが何らかの理由でクリアされているとき多くのサイクルの部分をカウントします。
moclear
メモリ命令問題のためのマシンのクリアをカウントします。
smclear
自己変更コードのためのマシンのクリアをカウントします。

マシンのクリアの発生のカウントを取得するために修飾子“ edge”を使用します。デフォルトの修飾子は“ clear”です。

p4-memory-cancel [ ,mask=event-list]
(TS イベント) CPU のデータキャッシュアドレス制御ユニットで様々な種類の要求の取り消しをカウントします。修飾子 event-list は、‘ +’文字で区切られた次の文字列のリストです:

st-rb-full
格納要求バッファが利用可能でなかったので、キャンセルされた要求。
64k-conf
64K の整列のためのコンフリクト (衝突) した要求。

event-list が指定されないなら、デフォルトは両方の種類のイベントをカウントすることです。

p4-memory-complete [ ,mask=event-list]
(TS イベント) ロード分割、キャッシュ不可能な分割、と修飾子 event-list によって選択されたキャッシュ不可能なロード操作の完了をカウントします。修飾子 event-list は、‘ +’で区切られた次のフラグのリストです:

lsc
キャッシュ不可能であるか書き込み結合領域からのロードを除いて、完了したロード分割をカウントします。
ssc
完了した任意の分割格納をカウントします。

デフォルトは、両方の種類の操作をカウントすることです。

p4-mob-load-replay [ ,mask=qualifier]
(TS イベント) メモリオーダバッファによってトリガされたロード再生 (replay) をカウントします。修飾子 qualifier は、‘ +’で区切られた次のフラグのリストを指定できます:

no-sta
未知の格納アドレスのためのリプレイをカウントします。
no-std
未知の格納データのためのリプレイをカウントします。
partial-data
ロードと格納操作の間の部分的に重ね合わせられたデータアクセスのためのリプレイをカウントします。
unalgn-addr
ロードと格納操作の下位 4 ビットでのミスマッチのためのリプレイをカウントします。

デフォルトの修飾子は、 no-sta+no-std+partial-data+unalgn-addr です。

p4-packed-dp-uop [ ,mask=flags]
(TI イベント) パックされた倍精度 uop をカウントします。修飾子 flags は、(デフォルトでもある) 次の値を取ることができます:

all
パックされた倍精度オペランドで、すべての uop をカウントします。
p4-packed-sp-uop [ ,mask=flags]
(TI イベント) パックされた単精度 uop をカウントします。修飾子 flags は、(デフォルトでもある) 次の値を取ることができます:

all
パックされた単精度オペランドで、すべての uop をカウントします。
p4-page-walk-type [ ,mask=qualifier]
(TI イベント) ページミスハンドラによって実行されたページウォーク (page walk) をカウントします。修飾子 qualifier は、‘ +’で区切られた次のキーワードのリストを指定できます:

dtmiss
データ TLB ミスのためのページウォークをカウントします。
itmiss
命令 TLB ミスのためのページウォークをカウントします。

qualifier のためのデフォルト値は“ dtmiss+itmiss”です。

p4-replay-event [ ,mask=flags]
(TS イベント) リプレイ (再生) タグ付けメカニズムを通して選択されたタグ付けをされた uop のリタイアをカウントします。修飾子 flags は、‘ +’で区切られた次の一組の文字列を含みます:

nbogus
マークされた uop は偽物 (bogus) ではありません。
bogus
マークされた uop は偽物 (bogus) です。

このイベントは、必要な uop タグ付けを実行するために割り付けられる追加 (上流) イベントを必要とします。デフォルト修飾子は、uop の両方の種類をカウントします。正確なイベントに基づいているサンプリングのために、このイベントを使用することができます。

p4-resource-stall [ ,mask=flags]
(TS イベント) アロケータでストールの発生または待ち時間 (latency) をカウントします。修飾子 flags は、(デフォルトでもある) 次の値を取ることができます:

sbfull
格納バッファの不足のためのストール。
p4-response
(TI イベント) 異なったタイプの応答をカウントします。このイベントに関するこれ以上の文書は利用できません。
p4-retired-branch-type [ ,mask=flags]
(TS イベント) リタイアしたブランチをカウントします。修飾子 flags は、‘ +’で区切られた次の文字列のリストを含みます:

conditional
条件付きジャンプをカウントします。
call
直接と間接呼び出しブランチをカウントします。
return
リターンブランチをカウントします。
indirect
リターン、間接呼び出しまたは間接ジャンプをカウントします。

デフォルトの修飾子は、すべての上記のブランチタイプをカウントします。

p4-retired-mispred-branch-type [ ,mask=flags]
(TS イベント) リタイアした予測ミスブランチをカウントします。修飾子 flags は、‘ +’で区切られた次の文字列のリストを含みます:

conditional
条件付きジャンプをカウントします。
call
間接呼び出しブランチをカウントします。
return
リターンブランチをカウントします。
indirect
リターン、間接呼び出しまたは間接ジャンプをカウントします。

デフォルトの修飾子は、すべての上記のブランチタイプをカウントします。

p4-scalar-dp-uop [ ,mask=flags]
(TI イベント) スカラ倍精度 uop の数をカウントします。修飾子 flags は、(デフォルトでもある) 次の値を取ることができます:

all
スカラ倍精度 uop の数をカウントします。
p4-scalar-sp-uop [ ,mask=flags]
(TI イベント) スカラ単精度 uop の数をカウントします。修飾子 flags は、(デフォルトでもある) 次の値を取ることができます:

all
スカラの単精度オペランドですべての uop 操作をカウントします。
p4-snoop
(TI イベント) スヌープ (せんさく) トラフィックをカウントします。このイベントに関するこれ以上の文書は利用できません。
p4-sse-input-assist [ ,mask=flags]
(TI イベント) アシストが SSE と SSE2 操作のためにオペランドに関する問題を取り扱うために必要とされる回数をカウントします。修飾子 flags は、(デフォルトでもある) 次の値を取ることができます:

all
すべての SSE と SSE2 uop のためのアシストをカウントします。
p4-store-port-replay [ ,mask=qualifier]
(TS イベント) 格納ポートでリプレイされたインベントをカウントします。修飾子 qualifier は、次の 1 つの値を取ることができます:

split-st
分割格納をカウントします。

qualifier のためのデフォルト値は、“ split-st”です。

p4-tc-deliver-mode [ ,mask=qualifier]
(TI イベント) トレースキャッシュとデコードエンジンの操作モードのサイクルで持続時間をカウントします。必要なオペレーティングモードは、‘ +’文字で区切られた次の文字列のリストである、 qualifier によって選択されます:

DD
両方の論理的プロセッサは、配信モードです。
DB
論理的プロセッサ 0 は、論理的プロセッサ 1 が構築モードである間、配信モードです。
DI
論理的プロセッサ 0 は、論理的プロセッサ 1 が halt しているか、マシンクリア中か、または、長いマイクロコードフローに移行している間、配信モードです。
BD
論理的プロセッサ 0 は、論理的プロセッサ 1 が配信モードである間、構築モードです。
BB
両方の論理的プロセッサは、構築モードです。
BI
論理的プロセッサ 0 は、論理的プロセッサ 1 が halt しているか、マシンクリア中か、または、長いマイクロコードフローに移行している間、構築モードです。
ID
論理的プロセッサ 0 は、論理的プロセッサ 1 が配信モードである間、halt しているか、マシンクリア中か、または、長いマイクロコードフローに移行しています。
IB
論理的プロセッサ 0 は、論理的プロセッサ 1 が構築モードである間、halt しているか、マシンクリア中か、または、長いマイクロコードフローに移行しています。

プロセッサパッケージに 1 つの論理的プロセッサしかなければ、論理的プロセッサ 1 のための修飾子は無視されます。修飾子が指定されないなら、デフォルト修飾子は“ DD+DB+DI+BD+BB+BI+ID+IB”です。

p4-tc-ms-xfer [ ,mask=flags]
(TI イベント) トレースキャッシュから MS ROM に変換された uop 配信回数をカウントします。修飾子 flags は、(デフォルトでもある) 次の値を取ることができます:

cisc
MS 転送まで TC をカウントします。
p4-uop-queue-writes [ ,mask=flags]
(TS イベント) uop キューに書き込まれた有効な uop の数をカウントします。修飾子 flags は、‘ +’文字で区切られた次の文字列のリストです:

from-tc-build
構築モードのトレースキャッシュから書き込まれている uop をカウントします。
from-tc-deliver
配信モードのトレースキャッシュから書き込まれている uop をカウントします。
from-rom
マイクロコード ROM から書き込まれている uop をカウントします。

デフォルトの修飾子は、上記のすべての種類の uop をカウントします。

p4-uop-type [ ,mask=flags]
(TS イベント) このイベントは、ロードと格納 (load and store) uop をタグ付けするリタイアにおけるフロントエンドメカニズムに関連して使用されます。修飾子 flags は、‘ +’文字で区切られた次の文字列から成ります:

tagloads
ロード操作である uop をマークします。
tagstores
格納操作である uop をマークします。

デフォルトの修飾子は、両方の種類の uop をカウントします。

p4-uops-retired [ ,mask=flags]
(TS イベント) クロックサイクルの間のリタイアした uop をカウントします。修飾子 flags は、‘ +’文字で区切られた次の文字列から成ります:

nbogus
偽でないマークされた uop をカウントします。
bogus
偽であるマークされた uop をカウントします。

デフォルトの修飾子は、両方の種類の uop をカウントします。

p4-wc-buffer [ ,mask=flags]
(TI イベント) 書き込み組み合わせ (write-combining) バッファ操作をカウントします。修飾子 flags は、‘ +’文字で区切られた次の文字列を含みます:

wcb-evicts
何らかの原因によって WC バッファの立ち退き。
wcb-full-evict
WC バッファが利用可能でないために WC バッファの立ち退き。

デフォルトの修飾子は、両方の種類の eviction (立ち退き) をカウントします。

p4-x87-assist [ ,mask=flags]
(TS イベント) 特別な取り扱いを必要とする x87 命令のリタイアをカウントします。修飾子 flags は、‘ +’文字で区切られた次の文字列を含みます:

fpsu
FP スタックアンダフローを調べる命令をカウントします。
fpso
FP スタックオーバフローを調べる命令をカウントします。
poao
x87 出力オーバフローを調べる命令をカウントします。
poau
x87 出力アンダフローを調べる命令をカウントします。
prea
x87 入力アシストを必要とした命令をカウントします。

デフォルトの修飾子は、すべての上記のタイプの命令リタイアをカウントします。

p4-x87-fp-uop [ ,mask=flags]
(TI イベント) x87 浮動小数点の uop をカウントします。修飾子 flags は、(デフォルトでもある) 次の値を取ることができます:

all
すべての x87 浮動小数点の uop をカウントします。

命令が 2 つ以上の x87 浮動小数点 uop を含んでいるなら、すべての x87 浮動小数点 uop がカウントされます。このイベントは、x87 浮動小数点データ移動操作をカウントしません。

p4-x87-simd-moves-uop [ ,mask=flags]
(TI イベント) データをロードするか、データを格納するか、またはレジスタからレジスタへの移動を実行する各 x87 FPU、MMX、SSE、または SSE2 uop をカウントします。このイベントは、整数移動 uop をカウントしません。修飾子 flags は、‘ +’文字で区切られた次のキーワードを含みます:

allp0
x87 と SIMD 格納と移動 uop をカウントします。
allp2
すべての x87 と SIMD ロード uop をカウントします。

デフォルトは、すべての uop をカウントすることです。 (エラッタ) このイベントはプロセッサの不具合 N43 の影響を受けます。

カスケード P4 PMC

PMC カスケードのサポートは、現在、不完全に実装されています。個々のイベントカウンタが、“ cascade”修飾子で割り付けられている間に、現在の API は、単一操作でカスケードされたイベントカウンタの組に必要であるすべてのリソースに名前を付けて、割り付ける能力を提供しません。

正確なイベントベースのサンプル

正確なイベントベースのサンプリングのサポートは、現在、 hwpmc(4) で実装されていません。

イベント名の別名

次のテーブルは、 Performance Counters Library (libpmc, -lpmc) と使用される基本的なハードウェアイベントによってサポートされた PMC から独立している別名の間のマッピングを表示しています。
Alias Event
branches p4-branch-retired,mask=mmtp+mmtm
branch-mispredicts p4-mispred-branch-retired
dc-misses (unsupported)
ic-misses (unsupported)
instructions p4-instr-retired,mask=nbogusntag+nbogustag
interrupts (unsupported)
unhalted-cycles p4-global-power-events

歴史

pmc ライブラリは、 FreeBSD 6.0 ではじめて登場しました。

作者

Performance Counters Library (libpmc, -lpmc) ライブラリは、 Joseph Koshy <jkoshy@FreeBSD.org>によって書かれました。
October 4, 2008 FreeBSD