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

名称

pmc.westmereIntel Westmere ファミリ CPU のための測定イベント

ライブラリ

Performance Counters Library (libpmc, -lpmc)

書式

#include < pmc.h>

解説

Intel Westmere CPU は、 Intel 性能測定アーキテクチャのバージョン 2 に準拠した PMC を含んでいます。これらの CPU は、最大 3 つのクラスの PMC を含んでいます:
PMC_CLASS_IAF
1 つのカウンタごとに 1 つのハードウェアイベントだけカウントする固定関数カウンタ。
PMC_CLASS_IAP
定義されたハードウェアイベントのセットの 1 つをカウントするために設定されるプログラマブルカウンタ。

各クラスで利用可能な PMC の数とそれらの幅は、 pmc_cpuinfo(3) を呼び出すことによって実行時に決定される必要があります。

Intel Westmere PMC は、次に文書化されています。 Volume 3B: System Programming Guide, Part 2, Intel(R) 64 and IA-32 Architectures Software Developes Manual, Order Number: 253669-033US, Intel Corporation, December 2009.

WESTMERE 固定関数 PMC

これらの PMC とそれらのサポートイベントは、 pmc.iaf(3) に文書化されています。

WESTMERE プログラマブル PMC

プログラマブル PMC は、次のケーパビリティをサポートしています:
Capability Support
PMC_CAP_CASCADE No
PMC_CAP_EDGE Yes
PMC_CAP_INTERRUPT Yes
PMC_CAP_INVERT Yes
PMC_CAP_READ Yes
PMC_CAP_PRECISE No
PMC_CAP_SYSTEM Yes
PMC_CAP_TAGGING No
PMC_CAP_THRESHOLD Yes
PMC_CAP_USER Yes
PMC_CAP_WRITE Yes

イベント修飾子

これらの PMC のためのイベント指定子は、次の共通の修飾子をサポートしています:
rsp= value
Off-core Response ビットを設定します。
DMND_DATA_RD
デマンドデータページテーブルエントリキャッシュ線読み込みと同様に、デマンドと完全と部分的なキャッシュ線の DCU プリフェッチデータ読み込みの数をカウントします。 L2 データ読み込みプリフェッチまたは命令のフェッチをカウントしません。
DMND_RFO
データキャッシュ線への書き込みによって生成された所有権 (RFO) 要求のためのデマンドと DCU プリフェッチ読み込み数をカウントする。 L2 RFO をカウントしません。
DMND_IFETCH
デマンドと DCU プリフェッチ命令キャッシュ線読み込みの数をカウントします。 L2 コード読み込みプリフェッチをカウントしません。 (排他的に変更される) 書き戻し (writeback) トランザクションの数を WB カウントします。
PF_DATA_RD
L2 プリフェッチャによって生成されたデータキャッシュ線読み込みの数をカウントします。
PF_RFO
L2 プリフェッチャによって生成された RFO 要求の数をカウントします。
PF_IFETCH
L2 プリフェッチャによって生成されたコード読み込みの数をカウントします。
OTHER
L3 無効、I/O、完全または部分的な書き込み、WC または一時的でない格納、 CLFLUSH、Fences、ロック、アンロック、分割ロックを含んで、トランザクションタイプの 1 つをカウントする。
UNCORE_HIT
L3 ヒット: 要求された一貫性のないアクションで uncore の L3 キャッシュをヒットするローカルまたはリモートホーム要求 (snooping)。
OTHER_CORE_HIT_SNP
L3 ヒット: uncore の L3 キャッシュをヒットし、変更されたコピーがないところで cross core snoop がある他の core によってサービスされるローカルまたはリモートホーム要求 (clean)。
OTHER_CORE_HITM
L3 ヒット: uncore の L3 キャッシュをヒットし、変更されたコピーがあるところで cross core snoop がある他の core によってサービスされるローカルまたはリモートホーム要求 (HITM)。
REMOTE_CACHE_FWD
L3 ミス: uncore の L3 キャッシュをミスし、変更されたコピーがあるところで cross package snoop に従う転送されたデータによってサービスされるローカルホーム要求。 (リモートホーム要求は、カウントされません)。
REMOTE_DRAM
L3 ミス: L3 キャッシュをミスし、リモート DRAM によってサービスされるリモートホーム要求。
LOCAL_DRAM
L3 ミス: L3 キャッシュをミスし、ローカル DRAM によってサービスされるローカルホーム要求。
NON_DRAM
IOH によってサービスされる DRAM でない要求。
cmask= value
1 つのサイクルで測定される設定されたイベントの数が、 value 以上の場合のみ、増加するように PMC を設定します。
edge
他の修飾子によって表現された状態のアサートされた遷移をアサート停止する数をカウントするように PMC を設定します。指定されているなら、状態が真のままで残っている間クロックの数にかかわらず、状態が真になるときはいつも、カウンタは一度だけ増加します。
inv
cmask”修飾子が存在しているとき、比較の意味を逆にし、サイクルごとのイベントの数が、“ cmask”修飾子によって指定された値より小さいときに、カウンタを増加します。
os
プロセッサの特権レベル 0 で起こるイベントをカウントするように、 PMC を設定します。
usr
特権レベル 1, 2 または 3 で起こるイベントをカウントするように、 PMC を設定します。

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

イベント指定子 (プログラマブル PMC)

Westmere プログラマブル PMC は、次のイベントをサポートします:
LOAD_BLOCK.OVERLAP_STORE
(Event 03H, Umask 02H) 以前の格納を部分的にオーバラップしてロードする
SB_DRAIN.ANY
(Event 04H, Umask 07H) すべての Store バッファ stall サイクル
MISALIGN_MEMORY.STORE
(Event 05H, Umask 02H) 整列ミスしたアドレスで参照されたすべての格納
STORE_BLOCKS.AT_RET
(Event 06H, Umask 04H) at-Retirement ブロックコードで遅延されたロードの数をカウントします。次のロードは、引退で実行され、排出される、同じスレッドですべての senior の格納を待つ必要があります: 4K 境界 (ページ分割) に渡って分割しながらロードし、キャッシュ不可能な (UC または USWC) メモリをアクセスしながらロードし、ロックをロードし、そして、UC または USWC メモリ領域のページテーブルをロードします。
STORE_BLOCKS.L1D_BLOCK
(Event 06H, Umask 08H) L1D ブロックコードで遅延されたキャッシュ可能なロード
PARTIAL_ADDRESS_ALIAS
(Event 07H, Umask 01H) 部分的なアドレスエイリアシングのための誤った依存をカウントします
DTLB_LOAD_MISSES.ANY
(Event 08H, Umask 01H) ページ walk を引き起こすすべてのロードミスをカウントします
DTLB_LOAD_MISSES.WALK_COMPLETED
(Event 08H, Umask 02H) STLB のロードミスのために完了したページ walk の数をカウントします。
DTLB_LOAD_MISSES.WALK_CYCLES
(Event 08H, Umask 04H) STLB のロードミスのためにページ walk で PMH がビジーをカウントします。
DTLB_LOAD_MISSES.STLB_HIT
(Event 08H, Umask 10H) キャッシュロード STLB ヒットの数
DTLB_LOAD_MISSES.PDE_MISS
(Event 08H, Umask 20H) 物理アドレス変換への直線的な低い部分がミスされたところで DTLB キャッシュロードミスの数。
MEM_INST_RETIRED.LOADS
(Event 0BH, Umask 01H) アーキテクチャ上のパスでリタイアされたアーキテクチャ上の目に見える格納がある命令の数をカウントします。 ld_lat 機能に連動しています。
MEM_INST_RETIRED.STORES
(Event 0BH, Umask 02H) アーキテクチャ上のパスでリタイアされたアーキテクチャ上の目に見える格納がある命令の数をカウントします。 ld_lat 機能に連動しています。
MEM_INST_RETIRED.LATENCY_ABOVE_THRESHOLD
(Event 0BH, Umask 10H) ld_lat 機能で指定されたレイテンシを超えている命令の数をカウントします。 ld_lat 機能に連動しています。
MEM_STORE_RETIRED.DTLB_MISS
(Event 0CH, Umask 01H) イベントは、DTLB をミスされたリタイアされた格納の数をカウントします。 DTLB ミスは、格納動作が誤りを引き起こすなら、カウントされません。プリフェッチをカウントしません。 TLB へのプライマリとセカンダリミスの両方をカウントします。
UOPS_ISSUED.ANY
(Event 0EH, Umask 01H) Reservation Station に Register Allocation Table によって発行された Uops の数をカウントします、すなわち、フロントエンドからバックエンドに発行された UOP。
UOPS_ISSUED.STALLED_CYCLES
(Event 0EH, Umask 01H) Reservation Station に Register Allocation Table によって発行された Uops でないサイクルの数をカウントします、すなわち、フロントエンドからバックエンドに発行された UOP。 set invert=1, cmask = 1
UOPS_ISSUED.FUSED
(Event 0EH, Umask 02H) Register Allocation Table から Reservation Station に発行された fused Uops の数をカウントします。
MEM_UNCORE_RETIRED.LOCAL_HITM
(Event 0FH, Umask 02H) HIT が兄弟コアでデータを変更した、リタイアされた命令をロードします (Precise Event)。
MEM_UNCORE_RETIRED.LOCAL_DRAM_AND_REMOTE_CACHE_HIT
(Event 0FH, Umask 08H) ローカルドラムとリモートキャッシュ HIT データソースでリタイアされた命令をロードします (Precise Event)。
MEM_UNCORE_RETIRED.LOCAL_DRAM
(Event 0FH, Umask 10H) ローカル DRAM のデータソース、またはローカルなホームのリモートキャッシュ HITM でリタイアされた命令をロードします (Precise Event)。
MEM_UNCORE_RETIRED.REMOTE_DRAM
(Event 0FH, Umask 20H) リモート DRAM とリモートのホームリモートのキャッシュ HITM でリタイアされた命令をロードします (Precise Event)。
MEM_UNCORE_RETIRED.UNCACHEABLE
(Event 0FH, Umask 80H) I/O でリタイアされた命令をロードします (Precise Event)。
FP_COMP_OPS_EXE.X87
(Event 10H, Umask 01H) FP Computational Uops Executed の数をカウントします。 FADD, FSUB, FCOM, FMUL, 整数 MULsand IMUL, FDIV, FPREM, FSQRTS, 整数 DIV と IDIV の数。このイベントは、別々の FADD 命令からの超越的なフローの中央で使用される FADD を区別しません。
FP_COMP_OPS_EXE.MMX
(Event 10H, Umask 02H) 実行された MMX Uops の数をカウントします。
FP_COMP_OPS_EXE.SSE_FP
(Event 10H, Umask 04H) 実行された SSE と SSE2 FP uops の数をカウントします。
FP_COMP_OPS_EXE.SSE2_INTEGER
(Event 10H, Umask 08H) 実行された SSE2 整数 uops の数をカウントします。
FP_COMP_OPS_EXE.SSE_FP_PACKED
(Event 10H, Umask 10H) 実行された SSE FP パックされた uops の数をカウントします。
FP_COMP_OPS_EXE.SSE_FP_SCALAR
(Event 10H, Umask 20H) 実行された SSE FP スカラ uops の数をカウントします。
FP_COMP_OPS_EXE.SSE_SINGLE_PRECISION
(Event 10H, Umask 40H) 実行された SSE* FP 単精度 uops の数をカウントします。
FP_COMP_OPS_EXE.SSE_DOUBLE_PRECISION
(Event 10H, Umask 80H) 実行された SSE* FP 倍精度 uops の数をカウントします。
SIMD_INT_128.PACKED_MPY
(Event 12H, Umask 01H) 128 ビットの SIMD 整数乗算演算の数をカウントします。
SIMD_INT_128.PACKED_SHIFT
(Event 12H, Umask 02H) 128 ビット SIMD 整数シフト演算の数をカウントします。
SIMD_INT_128.PACK
(Event 12H, Umask 04H) 128 ビット SIMD 整数パック演算の数をカウントします。
SIMD_INT_128.UNPACK
(Event 12H, Umask 08H) 128 ビット SIMD 整数アンパック演算の数をカウントします。
SIMD_INT_128.PACKED_LOGICAL
(Event 12H, Umask 10H) 128 ビット SIMD 整数論理演算の数をカウントします。
SIMD_INT_128.PACKED_ARITH
(Event 12H, Umask 20H) 128 ビット SIMD 整数算術演算の数をカウントします。
SIMD_INT_128.SHUFFLE_MOVE
(Event 12H, Umask 40H) 128 ビット SIMD 整数シャッフルと移動演算の数をカウントします。
LOAD_DISPATCH.RS
(Event 13H, Umask 01H) Memory Order Buffer をバイパスする Reservation Station からディスパッチされたロードの数をカウントします。
LOAD_DISPATCH.RS_DELAYED
(Event 13H, Umask 02H) ステージ latch で遅延された RS ディスパッチの数をカウントします。 RS ディスパッチが LB にバイパスできないなら、LB に書き込まれるる前に、 latch ステージの遅延された 1 つのサイクルからディスパッチする別のチャンスがあります。
LOAD_DISPATCH.MOB
(Event 13H, Umask 04H) Reservation Station から Memory Order Buffer までのディスパッチされたロードの数をカウントします。
LOAD_DISPATCH.ANY
(Event 13H, Umask 07H) Reservation Station からディスパッチされたすべてのロードをカウントします。
ARITH.CYCLES_DIV_BUSY
(Event 14H, Umask 01H) 割り算または平方根演算を実行することでビジーであるデバイダ (divider) のサイクルの数をカウントします。割り算は、整数、X87 または Streaming SIMD Extensions (SSE) を指定できます。平方根演算は、X87 または SSE のいずれかを指定できます。割り算の数をカウントするために 'edge =1, invert=1, cmask=1' を設定します。 SMT がオンであるとき、カウントは、不正確であるかもしれません。
ARITH.MUL
(Event 14H, Umask 02H) 実行される乗算演算の数をカウントします。これは、浮動小数点乗算演算と同様に整数を含みますが、DPPS mul と MPSAD を除きます。 SMT がオンであるとき、カウントは、不正確であるかもしれません。
INST_QUEUE_WRITES
(Event 17H, Umask 01H) あらゆるサイクルの命令キューに書き込まれる命令の数をカウントします。
INST_DECODED.DEC0
(Event 18H, Umask 01H) デコードするためにデコーダ 0 を必要とする命令の数をカウントします。通常、これは、命令が 1 uop 以上にマップすることを意味します。
TWO_UOP_INSTS_DECODED
(Event 19H, Umask 01H) 2 つの生成された命令は、デコードされました。
INST_QUEUE_WRITE_CYCLES
(Event 1EH, Umask 01H) このイベントは、命令が命令キューに書き込まれている間のサイクルの数をカウントします。命令キュー (INST_QUEUE_WRITES) に書き込まれた命令の数でこのカウンタを割り算すると、各サイクルでデコードされた命令の平均した数を算出します。この数が 4 未満でパイプのストールであるなら、これは、デコーダが 4 ワイドのパイプラインを維持するために 1 サイクル毎の十分な命令のデコードに失敗することを示しています。 6 バイト以上の SSE* 命令が次々に到着するなら、フロントエンドスループットは、実行速度を制限するかもしれません。そのような場合に、
LSD_OVERFLOW
(Event 20H, Umask 01H) 命令キューからストリームすることができないループの数。
L2_RQSTS.LD_HIT
(Event 24H, Umask 01H) L2 キャッシュをヒットするロードの数をカウントします。 L2 ロードは、L1D プリフェッチと同様に L1D デマンドミスの両方を含んでいます。様々な理由で L2 ロードをリジェクトすることできます。リジェクトされないロードだけがカウントされます。
L2_RQSTS.LD_MISS
(Event 24H, Umask 02H) L2 キャッシュをミスするロードの数をカウントします。 L2 ロードは、L1D プリフェッチと同様に L1D デマンドミスの両方を含んでいます。
L2_RQSTS.LOADS
(Event 24H, Umask 03H) すべての L2 ロードの要求をカウントします。 L2 ロードは、L1D プリフェッチと同様に L1D デマンドミスの両方を含んでいます。
L2_RQSTS.RFO_HIT
(Event 24H, Umask 04H) L2 キャッシュをヒットする格納 RFO 要求の数をカウントします。 L2 RFO 要求は、L1D RFO プリフェッチと同様に両方の L1D デマンド RFO ミスを含んでいます。カウントは、データがフェッチされませんが、線を書き込むためのパーミッションが必要な、WC メモリ要求を含んでいます。
L2_RQSTS.RFO_MISS
(Event 24H, Umask 08H) L2 キャッシュをミスする格納 RFO 要求の数をカウントします。 L2 RFO 要求は、L1D RFO プリフェッチと同様に両方の L1D デマンド RFO ミスを含んでいます。
L2_RQSTS.RFOS
(Event 24H, Umask 0CH) すべての L2 格納 RFO が要求をカウントします。 L2 RFO 要求は、L1D RFO プリフェッチと同様に両方の L1D デマンド RFO ミスを含んでいます。
L2_RQSTS.IFETCH_HIT
(Event 24H, Umask 10H) L2 キャッシュをヒットする命令フェッチの数をカウントします。 L2 命令のフェッチは、L1I 命令プリフェッチと同様に両方の L1I デマンドミスを含んでいます。
L2_RQSTS.IFETCH_MISS
(Event 24H, Umask 20H) L2 キャッシュをミスする命令フェッチの数をカウントします。 L2 命令のフェッチは、L1I 命令プリフェッチと同様に両方の L1I デマンドミスを含んでいます。
L2_RQSTS.IFETCHES
(Event 24H, Umask 30H) すべての命令フェッチをカウントします。 L2 命令のフェッチは、L1I 命令プリフェッチと同様に両方の L1I デマンドミスを含んでいます。
L2_RQSTS.PREFETCH_HIT
(Event 24H, Umask 40H) コードとデータの両方のための L2 プリフェッチヒットをカウントします。
L2_RQSTS.PREFETCH_MISS
(Event 24H, Umask 80H) コードとデータの両方のための L2 プリフェッチミスをカウントします。
L2_RQSTS.PREFETCHES
(Event 24H, Umask C0H) コードとデータの両方のためのすべての L2 プリフェッチをカウントします。
L2_RQSTS.MISS
(Event 24H, Umask AAH) コードとデータの両方のためのすべての L2 ミスをカウントします。
L2_RQSTS.REFERENCES
(Event 24H, Umask FFH) コードとデータの両方のためのすべての L2 要求をカウントします。
L2_DATA_RQSTS.DEMAND.I_STATE
(Event 26H, Umask 01H) ロードされるキャッシュ線が I (無効) の状態 (すなわち、キャッシュミス) であるところで L2 データ要求ロードの数をカウントします。 L2 デマンドロードは、L1D デマンドミスと L1D プリフェッチの両方です。
L2_DATA_RQSTS.DEMAND.S_STATE
(Event 26H, Umask 02H) ロードされるキャッシュ線が S (共有) の状態であるところで L2 データデマンドロードの数をカウントします。 L2 デマンドロードは、L1D デマンドミスと L1D プリフェッチの両方です。
L2_DATA_RQSTS.DEMAND.E_STATE
(Event 26H, Umask 04H) ロードされるキャッシュ線が E (排他的) の状態であるところで L2 データデマンドロードの数をカウントします。 L2 デマンドロードは、L1D デマンドミスと L1D プリフェッチの両方です。
L2_DATA_RQSTS.DEMAND.M_STATE
(Event 26H, Umask 08H) ロードされるキャッシュ線が M (変更) の状態であるところで L2 データデマンドロードの数をカウントします。 L2 デマンドロードは、L1D デマンドミスと L1D プリフェッチの両方です。
L2_DATA_RQSTS.DEMAND.MESI
(Event 26H, Umask 0FH) すべての L2 データデマンド要求をカウントします。 L2 デマンドロードは、L1D デマンドミスと L1D プリフェッチの両方です。
L2_DATA_RQSTS.PREFETCH.I_STATE
(Event 26H, Umask 10H) ロードされるキャッシュ線が I (無効) の状態 (すなわち、キャッシュミス) であるところで L2 プリフェッチデータロードの数をカウントします。
L2_DATA_RQSTS.PREFETCH.S_STATE
(Event 26H, Umask 20H) ロードされるキャッシュ線が S (共有) の状態であるところで L2 プリフェッチデータロードの数をカウントします。プリフェッチ RFO は、プリフェッチ読み込みが S 状態の線でヒットする間に、 S 状態の線でミスします。
L2_DATA_RQSTS.PREFETCH.E_STATE
(Event 26H, Umask 40H) ロードされるキャッシュ線が E (排他的) の状態であるところで L2 プリフェッチデータロードの数をカウントします。
L2_DATA_RQSTS.PREFETCH.M_STATE
(Event 26H, Umask 80H) ロードされるキャッシュ線が M (変更) の状態であるところで L2 プリフェッチデータロードの数をカウントします。
L2_DATA_RQSTS.PREFETCH.MESI
(Event 26H, Umask F0H) すべての L2 プリフェッチ要求をカウントします。
L2_DATA_RQSTS.ANY
(Event 26H, Umask FFH) すべての L2 データ要求をカウントします。
L2_WRITE.RFO.I_STATE
(Event 27H, Umask 01H) ロードされるキャッシュ線が I (無効) の状態 (すなわち、キャッシュミス) であるところで L2 デマンド格納 RFO 要求の数をカウントします。 L1D プリフェッチャは、RFO プリフェッチを発行しません。これは、デマンド RFO 要求です。
L2_WRITE.RFO.S_STATE
(Event 27H, Umask 02H) ロードされるキャッシュ線が S (共有) の状態であるところで L2 格納 RFO 要求の数をカウントします。 L1D プリフェッチャは、RFO プリフェッチを発行しません。これは、デマンド RFO 要求です。
L2_WRITE.RFO.M_STATE
(Event 27H, Umask 08H) ロードされるキャッシュ線が M (変更) の状態であるところで L2 格納 RFO 要求の数をカウントします。 L1D プリフェッチャは、RFO プリフェッチを発行しません。これは、デマンド RFO 要求です。
L2_WRITE.RFO.HIT
(Event 27H, Umask 0EH) ロードされるキャッシュ線が S、E または M の状態であるところで L2 格納 RFO 要求の数をカウントします。 L1D プリフェッチャは、RFO プリフェッチを発行しません。これは、デマンド RFO 要求です。
L2_WRITE.RFO.MESI
(Event 27H, Umask 0FH) すべての L2 格納 RFO 要求をカウントします。 L1D プリフェッチャは、RFO プリフェッチを発行しません。これは、デマンド RFO 要求です。
L2_WRITE.LOCK.I_STATE
(Event 27H, Umask 10H) ロードされるキャッシュ線が I (無効) の状態 (すなわち、キャッシュミス) であるところで L2 デマンドロック RFO 要求の数をカウントします。
L2_WRITE.LOCK.S_STATE
(Event 27H, Umask 20H) ロードされるキャッシュ線が S (共有) の状態であるところで L2 ロック RFO 要求の数をカウントします。
L2_WRITE.LOCK.E_STATE
(Event 27H, Umask 40H) ロードされるキャッシュ線が E (排他的) の状態であるところで L2 デマンドロック RFO 要求の数をカウントします。
L2_WRITE.LOCK.M_STATE
(Event 27H, Umask 80H) ロードされるキャッシュ線が M (変更) の状態であるところで L2 デマンドロック RFO 要求の数をカウントします。
L2_WRITE.LOCK.HIT
(Event 27H, Umask E0H) ロードされるキャッシュ線が S、E または M の状態であるところで L2 デマンドロック RFO 要求の数をカウントします。
L2_WRITE.LOCK.MESI
(Event 27H, Umask F0H) すべての L2 デマンドロック RFO 要求をカウントします。
L1D_WB_L2.I_STATE
(Event 28H, Umask 01H) ロードされるキャッシュ線が I (無効) の状態 (すなわち、キャッシュミス) であるところで L2 への L1 書き戻し (writeback) 数をカウントします。
L1D_WB_L2.S_STATE
(Event 28H, Umask 02H) 書き込まれるキャッシュ線が S の状態であるところで L2 への L1 書き戻し (writeback) 数をカウントします。
L1D_WB_L2.E_STATE
(Event 28H, Umask 04H) 書き込まれるキャッシュ線が E (排他的) の状態であるところで L2 への L1 書き戻し (writeback) 数をカウントします。
L1D_WB_L2.M_STATE
(Event 28H, Umask 08H) 書き込まれるキャッシュ線が M (変更) の状態であるところで L2 への L1 書き戻し (writeback) 数をカウントします。
L1D_WB_L2.MESI
(Event 28H, Umask 0FH) すべての L2 への L1 書き戻し (writeback) をカウントします。
L3_LAT_CACHE.REFERENCE
(Event 2EH, Umask 02H) uncore Last Level Cache 参照をカウントします。キャッシュ階層構造、キャッシュサイズと他の実装特有の特性のために、性能の違いを評価するための値の比較は、推薦されません。 Table A-1 を参照してください。
L3_LAT_CACHE.MISS
(Event 2EH, Umask 01H) uncore Last Level Cache ミスをカウントします。キャッシュ階層構造、キャッシュサイズと他の実装特有の特性のために、性能の違いを評価するための値の比較は、推薦されません。 Table A-1 を参照してください。
CPU_CLK_UNHALTED.THREAD_P
(Event 3CH, Umask 00H) スレッドが halt 状態でない間のスレッドのサイクルの数をカウントします。スレッドは、HLT 命令を実行しているとき、halt 状態に入ります。コア周波数は、電源または熱スロットルのために時々変化するかもしれません。 Table A-1 を参照してください。
CPU_CLK_UNHALTED.REF_P
(Event 3CH, Umask 01H) halt しなかったとき、TSC の周波数を増加します。 Table A-1 を参照してください。
DTLB_MISSES.ANY
(Event 49H, Umask 01H) ページ walk を引き起こす STLB のミスの数をカウントします。
DTLB_MISSES.WALK_COMPLETED
(Event 49H, Umask 02H) 完了したページ walk の結果となる STLB のミスの数をカウントします。
DTLB_MISSES.WALK_CYCLES
(Event 49H, Umask 04H) STLB のミスのためのページ walk のサイクルをカウントします。
DTLB_MISSES.STLB_HIT
(Event 49H, Umask 10H) 2 番目の TLB でヒットする DTLB の最初のレベルミスをカウントします。このイベントは、コアが複数の DTLB レベルを含んでいる場合にだけ、関連しています。
DTLB_MISSES.LARGE_WALK_COMPLETED
(Event 49H, Umask 80H) STLB のミスのために完了した大きなページ walk の数をカウントします。
LOAD_HIT_PRE
(Event 4CH, Umask 01H) 同じキャッシュ線への前の SSE プリフェッチ命令がプリフェッチを開始したが、まだ終わっていない間の L1 データキャッシュに送られたロード操作をカウントします。
L1D_PREFETCH.REQUESTS
(Event 4EH, Umask 01H) プリフェッチ FIFO の外でディスパッチされたハードウェアプリフェッチ要求の数をカウントします。
L1D_PREFETCH.MISS
(Event 4EH, Umask 02H) L1D をミスしたハードウェアプリフェッチ要求の数をカウントします。 L1D に 2 つのプリフェッチャがあります。フェッチされるべきこのものの後で連続して線を予測するストリーマと現在の命令のためのアクセスパターンを覚えている IP プリフェッチャです。ストリーマプリフェッチャは、IP プリフェッチャが行わない間、 L1D ヒットで停止します。
L1D_PREFETCH.TRIGGERS
(Event 4EH, Umask 04H) Finite State Machine によって引き金とされ、プリフェッチ FIFO にプッシュされたプリフェッチ要求の数をカウントします。プリフェッチ要求のいくつかは、IP インデックスプリフェッチャとストリーマプリフェッチャの間でオーバライドまたは競合のために落とされます。プリフェッチ FIFO は、4 つのエントリを含んでいます。
EPT.WALK_CYCLES
(Event 4FH, Umask 10H) Extended Page walk サイクルをカウントします。
L1D.REPL
(Event 51H, Umask 01H) L1 データキャッシュにもたらされた線の数をカウントします。カウンタ 0、1 専用。
L1D.M_REPL
(Event 51H, Umask 02H) L1 データキャッシュにもたらされた変更された線の数をカウントします。カウンタ 0、1 専用。
L1D.M_EVICT
(Event 51H, Umask 04H) 置換のために L1 データキャッシュから退去され変更された線の数をカウントします。カウンタ 0、1 専用。
L1D.M_SNOOP_EVICT
(Event 51H, Umask 08H) snoop HITM 干渉のために L1 データキャッシュから退去され変更された線の数をカウントします。カウンタ 0、1 専用。
L1D_CACHE_PREFETCH_LOCK_FB_HIT
(Event 52H, Umask 01H) fill バッファに受け付けられたキャッシュ可能なロードロックの推測された命令の数をカウントします。
L1D_CACHE_LOCK_FB_HIT
(Event 53H, Umask 01H) fill バッファに受け付けられたキャッシュ可能なロードロックの推測されたか、またはリタイアされた命令の数をカウントします。
OFFCORE_REQUESTS_OUTSTANDING.DEMAND.READ_DATA
(Event 60H, Umask 01H) offcore デマンドデータ読み込み要求の重み付けされたサイクルをカウントします。 L2 プリフェッチ要求を含んでいません。カウンタ 0。
OFFCORE_REQUESTS_OUTSTANDING.DEMAND.READ_CODE
(Event 60H, Umask 02H) offcore デマンドコード読み込み要求の重み付けされたサイクルをカウントします。 L2 プリフェッチ要求を含んでいません。カウンタ 0。
OFFCORE_REQUESTS_OUTSTANDING.DEMAND.RFO
(Event 60H, Umask 04H) offcore デマンド RFO 要求の重み付けされたサイクルをカウントします。 L2 プリフェッチ要求を含んでいません。カウンタ 0。
OFFCORE_REQUESTS_OUTSTANDING.ANY.READ
(Event 60H, Umask 08H) 任意の種類の offcore 読み込み要求の重み付けされたサイクルをカウントします。 L2 プリフェッチ要求を含みます。カウンタ 0。
CACHE_LOCK_CYCLES.L1D_L2
(Event 63H, Umask 01H) L1D と L2 がロックされる間のサイクルカウント。ロックされたメモリアクセスがあるとき、キャッシュ不可能メモリ、2 つのキャッシュ線にわたるロックされた操作、またはキャッシュ不可能ページテーブルからのページ walk のために、ロックは、アサートされます、カウンタ 0、1 専用。 L1D と L2 ロックには、非常に高いパフォーマンスのペナルティがあり、そのようなアクセスを避けることが強く勧められます。
CACHE_LOCK_CYCLES.L1D
(Event 63H, Umask 02H) L1 データキャッシュユニットのキャッシュ線がロックされるサイクルの数をカウントします。カウンタ 0、1 専用。
IO_TRANSACTIONS
(Event 6CH, Umask 01H) 完了した I/O トランザクションの数をカウントします。
L1I.HITS
(Event 80H, Umask 01H) L1 命令キャッシュをヒットするすべての命令フェッチをカウントします。
L1I.MISSES
(Event 80H, Umask 02H) L1I キャッシュをミスするすべての命令フェッチをカウントします。これは、命令キャッシュミス、ストリーミングのバッファミス、 victim キャッシュミスとキャッシュ不可能フェッチを含んでいます。命令フェッチミスは、未解決であるサイクル毎に 1 度ではなく、 1 度だけカウントされます。
L1I.READS
(Event 80H, Umask 03H) L1I をバイパスさせるキャッシュ不可能なフェッチを含んで、すべての命令フェッチをカウントします。
L1I.CYCLES_STALLED
(Event 80H, Umask 04H) L1I キャッシュミス、ITLB ミスまたは ITLB 誤りのために命令フェッチのストールのためのサイクルカウント。
LARGE_ITLB.HIT
(Event 82H, Umask 01H) 大きな ITLB ヒットの数をカウントします。
ITLB_MISSES.ANY
(Event 85H, Umask 01H) ページ walk を引き起こす ITLB のすべてのレベルのミスの数をカウントします。
ITLB_MISSES.WALK_COMPLETED
(Event 85H, Umask 02H) 完了したページ walk の結果となる ITLB のすべてのレベルのミスの数をカウントします。
ITLB_MISSES.WALK_CYCLES
(Event 85H, Umask 04H) ITLB ミスのページ walk サイクルをカウントします。
ITLB_MISSES.LARGE_WALK_COMPLETED
(Event 85H, Umask 80H) STLB のミスのために完了した大きなページ walk の数をカウントします。
ILD_STALL.LCP
(Event 87H, Umask 01H) 接頭辞を変更する長さのための Cycles Instruction Length Decoder ストール: デコードされた命令の長さを変更する、66, 67 または (EM64T のための) REX.W 命令。
ILD_STALL.MRU
(Event 87H, Umask 02H) Brand Prediction Unit (PBU) Most Recently Used (MRU) バイパスのための Instruction Length Decoder ストールサイクル。
ILD_STALL.IQ_FULL
(Event 87H, Umask 04H) full 命令のキューのためのサイクルをストールします。
ILD_STALL.REGEN
(Event 87H, Umask 08H) regen ストールの数をカウントします。
ILD_STALL.ANY
(Event 87H, Umask 0FH) ストールした任意のサイクル Instruction Length Decoder をカウントします。
BR_INST_EXEC.COND
(Event 88H, Umask 01H) 実行されますが、必ずしもリタイアされていない条件付きの近い分岐命令の数をカウントします。
BR_INST_EXEC.DIRECT
(Event 88H, Umask 02H) 呼び出しと間接的な分岐を除いて、すべての無条件の近い分岐命令をカウントします。
BR_INST_EXEC.INDIRECT_NON_CALL
(Event 88H, Umask 04H) 呼び出しでない実行された間接的な近い分岐命令の数をカウントします。
BR_INST_EXEC.NON_CALLS
(Event 88H, Umask 07H) 実行されますが、必ずしもリタイアされていないすべての呼び出しでない近い分岐命令の数をカウントします。
BR_INST_EXEC.RETURN_NEAR
(Event 88H, Umask 08H) リターンニーモニック (mnemonic) がある間接的な近い分岐をカウントします。
BR_INST_EXEC.DIRECT_NEAR_CALL
(Event 88H, Umask 10H) 呼び出し分岐を除いて実行された無条件の近い呼び出し分岐命令をカウントします。
BR_INST_EXEC.INDIRECT_NEAR_CALL
(Event 88H, Umask 20H) 間接的なレジスタとメモリの両方を含んで、実行された、間接的に近い呼び出をカウントします。
BR_INST_EXEC.NEAR_CALLS
(Event 88H, Umask 30H) 実行されますが、必ずしもリタイアされていない、すべて近い呼び出し分岐をカウントします。
BR_INST_EXEC.TAKEN
(Event 88H, Umask 40H) 実行されますが、必ずしもリタイアされていない、 taken 近い分岐をカウントします。
BR_INST_EXEC.ANY
(Event 88H, Umask 7FH) (必ずしもリタイアされていない) すべての近い実行された分岐をカウントします。これは、micro-op 分岐でではなく、命令だけを含んでいます。頻繁な分岐は、必ずしも主要な性能問題であるというわけではありません。しかしながら、頻繁な分岐予測ミスは、問題があるかもしれません。
BR_MISP_EXEC.COND
(Event 89H, Umask 01H) 実行されますが、必ずしもリタイアされていない、予測ミス条件付き近い分岐命令の数をカウントします。
BR_MISP_EXEC.DIRECT
(Event 89H, Umask 02H) 呼び出しと間接的な分岐 (常に 0 であるべきである) を除いて、予測ミスマクロ無条件近い分岐命令をカウントします。
BR_MISP_EXEC.INDIRECT_NON_CALL
(Event 89H, Umask 04H) 呼び出しでない、実行された予測ミス間接的な近い分岐命令の数をカウントします。
BR_MISP_EXEC.NON_CALLS
(Event 89H, Umask 07H) 実行されますが、必ずしもリタイアされていない、予測ミスの呼び出しでない近い分岐をカウントします。
BR_MISP_EXEC.RETURN_NEAR
(Event 89H, Umask 08H) 近いリターンニーモニック (mnemonic) がある予測ミスの間接的な近い分岐をカウントします。
BR_MISP_EXEC.DIRECT_NEAR_CALL
(Event 89H, Umask 10H) (常に 0 であるべきである) 実行された予測ミスの間接的でない近い呼び出しをカウントします。
BR_MISP_EXEC.INDIRECT_NEAR_CALL
(Event 89H, Umask 20H) 間接的なレジスタとメモリの両方を含んで、実行された、予測ミスの間接的に近い呼び出しをカウントします。
BR_MISP_EXEC.NEAR_CALLS
(Event 89H, Umask 30H) 実行されますが、必ずしもリタイアされていない、すべての予測ミスの近い呼び出し分岐をカウントします。
BR_MISP_EXEC.TAKEN
(Event 89H, Umask 40H) 取られますが、必ずしもリタイアされていない、実行された予測ミスの近い分岐をカウントします。
BR_MISP_EXEC.ANY
(Event 89H, Umask 7FH) 実行されますが、必ずしもリタイアされていない、予測ミスの近い分岐命令の数をカウントします。
RESOURCE_STALLS.ANY
(Event A2H, Umask 01H) Allocator リソースの関連するストールの数をカウントします。レジスタリネームバッファエントリ、メモリバッファエントリを含みます。リソースの関連するストールに加えて、このイベントは、他のイベントをカウントします。あたかも予測ミスの分岐のリタイアメントが遅延され、格納バッファが同期操作から排出される間に起こるストールであるかのように、分岐予測ミスの復旧の間に起こるストールを含みます。 SuperQ (off core) キューが full、あまりに多くのキャッシュミスなどのためのストールを含みません。
RESOURCE_STALLS.LOAD
(Event A2H, Umask 02H) ロード操作のためのロードバッファの不足のためのストールのサイクルをカウントします。
RESOURCE_STALLS.RS_FULL
(Event A2H, Umask 04H) このイベントは、実行を待つパイプラインの命令の数がプロセッサが扱うことができる制限に達するときのサイクルの数をカウントします。このイベントの高いカウントは、パイプの長いレイテンシ操作があることを示します (たぶん、L2 キャッシュをミスするロードと格納操作、またはまだリタイアしていないパイプラインをさらに下る命令に依存する命令)。 RS が full であるとき、新しい命令は、予約ステーションに入って、実行を始めることができません。
RESOURCE_STALLS.STORE
(Event A2H, Umask 08H) このイベントは、リソースに関連するストールがパイプラインの制限に達する (すなわち、すべての格納バッファが使用される) 格納命令の数のために生じるサイクルの数をカウントします。格納命令がキャッシュまたはメモリにデータをコミットするとき、ストールは、終わります。
RESOURCE_STALLS.ROB_FULL
(Event A2H, Umask 10H) バッファ full を再順序付けするためのストールのサイクルをカウントします。
RESOURCE_STALLS.FPCW
(Event A2H, Umask 20H) 浮動小数点装置 (FPU) の制御ワードを書き込むために実行がストールされている間のサイクルの数をカウントします。
RESOURCE_STALLS.MXCSR
(Event A2H, Umask 40H) 前の MXCSR 改名の近くで生じる MXCSR レジスタの改名のためにストールします。 MXCSR は、MMX レジスタのための制御と状態を提供します。
RESOURCE_STALLS.OTHER
(Event A2H, Umask 80H) 実行が他のリソースの問題のためいストールされている間のサイクルをカウントします。
MACRO_INSTS.FUSIONS_DECODED
(Event A6H, Umask 01H) 必ずしも実行されるか、またはリタイアされていない、マクロの fused されたデコードされた命令のの数をカウントします。
BACLEAR_FORCE_IQ
(Event A7H, Umask 01H) Instruction Queue によって強制された BACLEAR の回数をカウントします。また、IQ は、L2 Branch Prediction Unit によって提供された静的なスキーマとダイナミックなデータに基づく条件付き分岐予測方向を提供するのに責任があります。条件付き分岐ターゲットが Target Array で見つけられず、 IQ が分岐が取られると予測するなら、IQ は、BACLEAR を発行するために Branch Address Calculator を強制します。 BAC によってアサートされた各 BACLEAR は、命令フェッチパイプラインでおよそ 8 サイクルのバブルを生成します。
LSD.UOPS
(Event A8H, Umask 01H) ループストリーム検出器 (detector) によって配信される micro-ops の数をカウントします。 cmask=1 を使用し、サイクルのカウントを反転します。
ITLB_FLUSH
(Event AEH, Umask 01H) ITLB フラッシュの数をカウントします。
OFFCORE_REQUESTS.DEMAND.READ_DATA
(Event B0H, Umask 01H) offcore デマンドデータ読み込み要求の数をカウントします。 L2 プリフェッチ要求をカウントしません。
OFFCORE_REQUESTS.DEMAND.READ_CODE
(Event B0H, Umask 02H) offcore デマンドコード読み込み要求の数をカウントします。 L2 プリフェッチ要求をカウントしません。
OFFCORE_REQUESTS.DEMAND.RFO
(Event B0H, Umask 04H) offcore デマンド RFO 要求の数をカウントします。 L2 プリフェッチ要求をカウントしません。
OFFCORE_REQUESTS.ANY.READ
(Event B0H, Umask 08H) offcore 読み込み要求の数をカウントします。 L2 プリフェッチ要求を含みます。
OFFCORE_REQUESTS.ANY.RFO
(Event 80H, Umask 10H) offcore RFO 要求の数をカウントします。 L2 プリフェッチ要求を含みます。
OFFCORE_REQUESTS.L1D_WRITEBACK
(Event B0H, Umask 40H) uncore への L1D の書き戻し (writeback) の数をカウントします。
OFFCORE_REQUESTS.ANY
(Event B0H, Umask 80H) すべての offcore 要求をカウントします。
UOPS_EXECUTED.PORT0
(Event B1H, Umask 01H) ポート 0 で発行された実行された Uops の数をカウントします。ポート 0 は、Uops の整数演算、SIMD と FP 加算を操作します。
UOPS_EXECUTED.PORT1
(Event B1H, Umask 02H) ポート 1 で発行された実行された Uops の数をカウントします。ポート 1 は、Uops の整数演算、SIMD、整数シフト、FP 乗算と FP 割り算を操作します。
UOPS_EXECUTED.PORT2_CORE
(Event B1H, Umask 04H) ポート 2 で発行された実行された Uops の数をカウントします。ポート 2 は、Uops のロードを操作します。これは、コアカウント専用であり、スレッド毎に集めることができません。
UOPS_EXECUTED.PORT3_CORE
(Event B1H, Umask 08H) ポート 3 で発行された実行された Uops の数をカウントします。ポート 3 は、Uops の格納を操作します。これは、コアカウント専用であり、スレッド毎に集めることができません。
UOPS_EXECUTED.PORT4_CORE
(Event B1H, Umask 10H) ポート 4 で発行された実行された Uops の数をカウントします。ポート 4 は、ポート 3 で発行された Uops の格納のために格納される値を操作します。これは、コアカウント専用であり、スレッド毎に集めることができません。
UOPS_EXECUTED.CORE_ACTIVE_CYCLES_NO_PORT5
(Event B1H, Umask 1FH) ポート 0-4 で発行された実行される 1 つ以上の uops があるサイクルの数をカウントします。これは、コアカウント専用であり、スレッド毎に集めることができません。
UOPS_EXECUTED.PORT5
(Event B1H, Umask 20H) ポート 5 で発行されているところで実行される Uops の数をカウントします。
UOPS_EXECUTED.CORE_ACTIVE_CYCLES
(Event B1H, Umask 3FH) 任意のポートで実行される 1 つ以上の uops があるサイクルの数をカウントします。これは、コアカウント専用であり、スレッド毎に集めることができません。
UOPS_EXECUTED.PORT015
(Event B1H, Umask 40H) ポート 0、1 または 5 で発行されているところで実行される Uops の数をカウントします。ストールサイクルをカウントするために cmask=1, invert=1 を使用します。
UOPS_EXECUTED.PORT234
(Event B1H, Umask 80H) ポート 2、3 または 4 で発行されているところで実行される Uops の数をカウントします。
OFFCORE_REQUESTS_SQ_FULL
(Event B2H, Umask 01H) off-core 要求を操作するために SQ が full のサイクルの数をカウントします。
SNOOPQ_REQUESTS_OUTSTANDING.DATA
(Event B3H, Umask 01H) データのための snoopq 要求の重み付けられたサイクルをカウントします。カウンタ 0 専用。空でないサイクルをカウントするために cmask=1 を使用します。
SNOOPQ_REQUESTS_OUTSTANDING.INVALIDATE
(Event B3H, Umask 02H) 無効の snoopq 要求の重み付けられたサイクルをカウントします。カウンタ 0 専用。空でないサイクルをカウントするために cmask=1 を使用します。
SNOOPQ_REQUESTS_OUTSTANDING.CODE
(Event B3H, Umask 04H) コードのための snoopq 要求の重み付けられたサイクルをカウントします。カウンタ 0 専用。空でないサイクルをカウントするために cmask=1 を使用します。
SNOOPQ_REQUESTS.CODE
(Event B4H, Umask 01H) snoop コード要求の数をカウントします。
SNOOPQ_REQUESTS.DATA
(Event B4H, Umask 02H) snoop データ要求の数をカウントします。
SNOOPQ_REQUESTS.INVALIDATE
(Event B4H, Umask 04H) snoop 無効の要求の数をカウントします。
OFF_CORE_RESPONSE_0
(Event B7H, Umask 01H) Processor Core のセクション 30.6.1.3, Off-core Response Performance Monitoring を参照してください。プログラミング MSR 01A6H が必要です。
SNOOP_RESPONSE.HIT
(Event B8H, Umask 01H) snoop 要求への応答でこのスレッドによって送られた HIT snoop 応答をカウントします。
SNOOP_RESPONSE.HITE
(Event B8H, Umask 02H) snoop 要求への応答でこのスレッドによって送られた HIT E snoop 応答をカウントします。
SNOOP_RESPONSE.HITM
(Event B8H, Umask 04H) snoop 要求への応答でこのスレッドによって送られた HIT M snoop 応答をカウントします。
OFF_CORE_RESPONSE_1
(Event BBH, Umask 01H) Processor Core のセクション 30.6.1.3, Off-core Response Performance Monitoring を参照してください。 MSR 01A7H を使用します。
INST_RETIRED.ANY_P
(Event C0H, Umask 01H) Table A-1 の注意: を参照してください。 INST_RETIRED.ANY は、指定された固定カウンタによってカウントされます。 INST_RETIRED.ANY_P は、プログラマブルカウンタによってカウントされる、アーキテクチャ上の性能イベントです。イベントは、CPUID.A.EBX[1] = 0 であるなら、サポートされます。 Counting: GETSEC/VM entry/VM Exit/MWait の誤った実行は、リタイアされる命令のようにカウントされません。
INST_RETIRED.X87
(Event C0H, Umask 02H) リタイアされた浮動小数点の計算演算の数をカウントします: アシストハンドラと超越数命令のような複素数の浮動小数点命令のサブ演算で実行された浮動小数点の計算演算。
INST_RETIRED.MMX
(Event C0H, Umask 04H) リタイアされた MMX 命令の数をカウントします。
UOPS_RETIRED.ANY
(Event C2H, Umask 01H) リタイアされた micro-ops の数をカウントする (macro-fused=1, micro- fused=2, others=1;サイクル毎に 8 の最大のカウント)。ほとんどの命令は、1 つまたは 2 つの micro-ops で構成されます。いくつかの命令は、繰り返し命令、浮動小数点の超越数命令とアシストのようなより長いシーケンスにデコードされます。 cmask=1 を使用し、アクティブなサイクルまたはストールしているサイクルをカウントするために反転します。
UOPS_RETIRED.RETIRE_SLOTS
(Event C2H, Umask 02H) 各サイクルで使用されたリタイアメントスロットの数をカウントします。
UOPS_RETIRED.MACRO_FUSED
(Event C2H, Umask 04H) リタイアされた macro-fused uops の数をカウントします。
MACHINE_CLEARS.CYCLES
(Event C3H, Umask 01H) マシンクリアがアサートされたサイクルをカウントします。
MACHINE_CLEARS.MEM_ORDER
(Event C3H, Umask 02H) メモリの順序の競合のためにマシンクリアの数をカウントします。
MACHINE_CLEARS.SMC
(Event C3H, Umask 04H) プログラムがコードセクションに書き込む回数をカウントします。自己を変更するコードによって、すべての Intel 64 と IA-32 プロセッサで sever のペナルティを引き起こします。変更されたキャッシュ線は、L2 と L3caches に書き戻されます。
BR_INST_RETIRED.ANY_P
(Event C4H, Umask 00H) Table A-1 を参照してください。
BR_INST_RETIRED.CONDITIONAL
(Event C4H, Umask 01H) リタイアされた条件付き分岐命令の数をカウントします。
BR_INST_RETIRED.NEAR_CALL
(Event C4H, Umask 02H) リタイアされた直接と間接の近い無条件呼び出しの数をカウントします。
BR_INST_RETIRED.ALL_BRANCHES
(Event C4H, Umask 04H) リタイアされた分岐命令の数をカウントします。
BR_MISP_RETIRED.ANY_P
(Event C5H, Umask 00H) Table A-1 を参照してください。
BR_MISP_RETIRED.CONDITIONAL
(Event C5H, Umask 01H) 予測ミスした条件付きのリタイアされた呼び出しをカウントします。
BR_MISP_RETIRED.NEAR_CALL
(Event C5H, Umask 02H) 予測ミスした直接と間接の近い無条件のリタイアされた呼び出しをカウントします。
BR_MISP_RETIRED.ALL_BRANCHES
(Event C5H, Umask 04H) すべての予測ミスしてリタイアされた呼び出しをカウントします。
SSEX_UOPS_RETIRED.PACKED_SINGLE
(Event C7H, Umask 01H) リタイアされた SIMD パックされた単精度浮動小数点 Uops をカウントします。
SSEX_UOPS_RETIRED.SCALAR_SINGLE
(Event C7H, Umask 02H) リタイアされた SIMD calar 単精度浮動小数点 Uops をカウントします。
SSEX_UOPS_RETIRED.PACKED_DOUBLE
(Event C7H, Umask 04H) リタイアされた SIMD パックされた倍精度浮動小数点 Uops をカウントします。
SSEX_UOPS_RETIRED.SCALAR_DOUBLE
(Event C7H, Umask 08H) リタイアされた SIMD スカラ倍精度浮動小数点 Uops をカウントします。
SSEX_UOPS_RETIRED.VECTOR_INTEGER
(Event C7H, Umask 10H) リタイアされた 128 ビット SIMD ベクトル整数 Uops をカウントします。
ITLB_MISS_RETIRED
(Event C8H, Umask 20H) 命令がフェッチされたとき、ITLB をミスしてリタイアされた命令の数をカウントします。
MEM_LOAD_RETIRED.L1D_HIT
(Event CBH, Umask 01H) L1 データキャッシュをヒットするリタイアされたロードの数をカウントします。
MEM_LOAD_RETIRED.L2_HIT
(Event CBH, Umask 02H) L2 データキャッシュをヒットするリタイアされたロードの数をカウントします。
MEM_LOAD_RETIRED.L3_UNSHARED_HIT
(Event CBH, Umask 04H) L3 キャッシュで共有されない線のそれら自体をヒットするリタイアされたロードの数をカウントします。
MEM_LOAD_RETIRED.OTHER_CORE_L2_HIT_HITM
(Event CBH, Umask 08H) (死んだ core で) 兄弟 core の L2 でヒットするリタイアされたロードの数をカウントします。 L3 は、パッケージのすべてのコアを含んでいるので、これは、L3 ヒットです。これは、クリーンまたは変更されたヒットの両方をカウントします。
MEM_LOAD_RETIRED.L3_MISS
(Event CBH, Umask 10H) L3 キャッシュをミスするリタイアされたロードの数をカウントします。ロードは、リモートソケット、ローカルメモリまたは IOH によって満たされました。
MEM_LOAD_RETIRED.HIT_LFB
(Event CBH, Umask 40H) L1D をミスするリタイアされたロードの数をカウントし、アドレスは、割り付けられた線 fill バッファに位置していて、すぐに、キャッシュにコミットされます。これは、二次 L1D ミスをカウントしています。
MEM_LOAD_RETIRED.DTLB_MISS
(Event CBH, Umask 80H) DTLB をミスするリタイアされたロードの数をカウントします。ロード操作が誤りを引き起こすなら、DTLB ミスは、カウントされません。このイベントは、キャッシュ可能なメモリだけからロードをカウントします。イベントは、ソフトウェアプリフェッチでロードをカウントしません。 TLB への第一と二次の両方のミスをカウントします。
FP_MMX_TRANS.TO_FP
(Event CCH, Umask 01H) 任意の MMX 命令に従って最初の浮動小数点の命令をカウントします。浮動小数点と MMX 技術状況の間の遷移のためのペナルティを見積もるためにこのイベントを使用することができます。
FP_MMX_TRANS.TO_MMX
(Event CCH, Umask 02H) 浮動小数点命令に従って最初の MMX 命令をカウントします。浮動小数点と MMX 技術状況の間の遷移のためのペナルティを見積もるためにこのイベントを使用することができます。
FP_MMX_TRANS.ANY
(Event CCH, Umask 03H) 浮動小数点から MMX 命令までと MMX 命令から浮動小数点命令までのすべての遷移をカウントします。浮動小数点と MMX 技術状況の間の遷移のためのペナルティを見積もるためにこのイベントを使用することができます。
MACRO_INSTS.DECODED
(Event D0H, Umask 01H) (必ずしも実行されないか、またはリタイアされない) デコードされた命令の数をカウントします。
UOPS_DECODED.STALL_CYCLES
(Event D1H, Umask 01H) デコーダのストールのサイクルをカウントします。
UOPS_DECODED.MS
(Event D1H, Umask 02H) Microcode Sequencer, MS によってデコードされた Uops の数をカウントします。命令が 4 以上の uops の長さまたはマイクロコードアシストであるとき、 MS deliver uops は、起こります。
UOPS_DECODED.ESP_FOLDING
(Event D1H, Umask 04H) デコードされたスタックポインタ (ESP) 命令の数をカウントします: push , pop , call , ret その他。 ESP 命令は、ESP を増加するか、または減少させるために Uop を生成しません。代わりに、それらは、ESP 力レジスタの現在の値にデルタの経過を追う ESP_Offset レジスタを更新します。
UOPS_DECODED.ESP_SYNC
(Event D1H, Umask 08H) ESP 命令が ESP レジスタの現在の値に ESP オフセットレジスタを追加することによって修正されるところで、スタックポインタ (ESP) の sync 操作の数をカウントします。
RAT_STALLS.FLAGS
(Event D2H, Umask 01H) 部分的なフラグレジスタのストールの 1 つのいくつかの理由のためにストールされた実行の間のサイクルの数をカウントします。部分的なレジスタのストールは、2 つの条件が満たされるとき、起こるかもしれません: 1) 命令は、フラグレジスタのフラグのすべてではなく、いくつかを変更します、そして、2) フラグに依存する次の命令は、この命令によって変更されなかったフラグに依存します。
RAT_STALLS.REGISTERS
(Event D2H, Umask 02H) このイベントは、命令が前の命令によって部分的に書き込まれたレジスタを使用したので、定義されたレイテンシより長くなった命令実行レイテンシのサイクル数をカウントします。
RAT_STALLS.ROB_READ_PORT
(Event D2H, Umask 04H) 新しい micro-ops が、故障しているパイプラインに入ることができなかった、 ROB が起こったポートのストールを読み込むときのサイクル数をカウントします。パイプラインのこのステージで、追加のストールが、同じサイクルで起こるかもしれなくて、パイプに入ることからストールしている micro-ops を防ぐかもしれないことに注意してください。このような場合には、micro-ops は、次のサイクルの実行パイプに入ることを再試行し、ROB 読み込みポートのストールは、再びカウントされます。
RAT_STALLS.SCOREBOARD
(Event D2H, Umask 08H) リタイアされたマイクロアークテクチャ上のシリアル化のためにストールするところのサイクルをカウントします。マイクロコードスコアボードは、ストールします。
RAT_STALLS.ANY
(Event D2H, Umask 0FH) 次のためにすべての Register Allocation Table ストールサイクルをカウントします: 新しい micro-ops が実行パイプに入ることができなかった、 ROB が起こったポートストールを読み込むとき、カウントします。部分的なレジスタのストールが起こったときのサイクル。フラグのストールが起こったときのサイクル。浮動小数点装置 (FPU) の状態ワードストールが起こったときのサイクル。これらの状態のそれぞれをカウントするためには、個別に次のイベントを使用します: RAT_STALLS.ROB_READ_PORT, RAT_STALLS.PARTIAL, RAT_STALLS.FLAGS と RAT_STALLS.FPSW。
SEG_RENAME_STALLS
(Event D4H, Umask 01H) ES、DS、FS と GS セグメントレジスタのための改名のリソースの不足のためにストールするサイクルの数をカウントします。セグメントが改名されるが、リタイアされないで、同じセグメントへの 2 番目の更新が起こるなら、ストールは、改名されたセグメントがリタイアされるまで、パイプラインのフロントエンドで起こります。
ES_REG_RENAMES
(Event D5H, Umask 01H) ES セグメントレジスタが改名される回数をカウントします。
UOP_UNFUSION
(Event DBH, Umask 01H) fused uop への浮動小数点例外のための unfusion イベントをカウントします。
BR_INST_DECODED
(Event E0H, Umask 01H) デコードされた分岐命令の数をカウントします。
BPU_MISSED_CALL_RET
(Event E5H, Umask 01H) 呼び出しまたはリターン分岐を予測することをミスした Branch Prediction Unit の回数をカウントします。
BACLEAR.CLEAR
(Event E6H, Umask 01H) 主に Branch Prediction Unit が正しい予測を提供できなくて、これがフロントエンドで Branch Address Calculator によって修正されるとき、フロントエンドが再操縦する回数をカウントします。コードに、BPU によってそれらを消費することができないくらい多くの分岐があるなら、これは、起こるかもしれません。 BAC によってアサートされた各 BACLEAR は、命令フェッチのパイプラインでほぼ 8 サイクルのバブルを生成します。合計の実行時間の効果は、周囲のコードに依存します。
BACLEAR.BAD_TARGET
(Event E6H, Umask 02H) ターゲットヒットがあるが、指示が間違っている条件付き分岐命令のためにアサートされた Branch Address Calculator クリア (BACLEAR) の数をカウントします。 BAC によってアサートされた各 BACLEAR は、命令フェッチのパイプラインでほぼ 8 サイクルのバブルを生成します。
BPU_CLEARS.EARLY
(Event E8H, Umask 01H) 前の (通常の) Branch Prediction Unit クリアをカウントします: BPU は、それが取られなかったと不正に仮定した後に、取られた分岐を予測しました。 BPU のクリアは、Front End で 2 サイクルのバブルに先導します。
BPU_CLEARS.LATE
(Event E8H, Umask 02H) Most Recently Used 競合のために遅い Branch Prediction Unit クリアをカウントします。 BPU のクリアは、Front End で 3 サイクルのバブルに先導します。
THREAD_ACTIVE
(Event ECH, Umask 01H) アクティブであるサイクルのスレッドをカウントします。
L2_TRANSACTIONS.LOAD
(Event F0H, Umask 01H) HW プリフェッチまたはデマンドロードのための L2 ロード操作をカウントします。
L2_TRANSACTIONS.RFO
(Event F0H, Umask 02H) HW プリフェッチまたはデマンド RFO のための L2 RFO 操作をカウントします。
L2_TRANSACTIONS.IFETCH
(Event F0H, Umask 04H) HW プリフェッチまたはデマンド ifetch のための L2 命令フェッチ操作をカウントします。
L2_TRANSACTIONS.PREFETCH
(Event F0H, Umask 08H) L2 プリフェッチ操作をカウントします。
L2_TRANSACTIONS.L1D_WB
(Event F0H, Umask 10H) L2 への L1D 書き戻し (writeback) 操作をカウントします。
L2_TRANSACTIONS.FILL
(Event F0H, Umask 20H) ロード、RFO、L1D 書き戻し (writeback) またはプリフェッチのためのキャッシュ線 fill 操作をカウントします。
L2_TRANSACTIONS.WB
(Event F0H, Umask 40H) L3 への L2 書き戻し (writeback) 操作をカウントします。
L2_TRANSACTIONS.ANY
(Event F0H, Umask 80H) すべての L2 キャッシュ操作をカウントします。
L2_LINES_IN.S_STATE
(Event F1H, Umask 02H) S (共有) 状態の L2 キャッシュで割り付けられたキャッシュ線の数をカウントします。
L2_LINES_IN.E_STATE
(Event F1H, Umask 04H) E (排他的) 状態の L2 キャッシュで割り付けられたキャッシュ線の数をカウントします。
L2_LINES_IN.ANY
(Event F1H, Umask 07H) L2 キャッシュで割り付けられたキャッシュ線の数をカウントします。
L2_LINES_OUT.DEMAND_CLEAN
(Event F2H, Umask 01H) デマンド要求によって退去された L2 クリーンキャッシュ線をカウントします。
L2_LINES_OUT.DEMAND_DIRTY
(Event F2H, Umask 02H) デマンド要求によって退去された L2 汚染 (変更された) キャッシュ線をカウントします。
L2_LINES_OUT.PREFETCH_CLEAN
(Event F2H, Umask 04H) プリフェッチ要求によって退去された L2 クリーンキャッシュ線をカウントします。
L2_LINES_OUT.PREFETCH_DIRTY
(Event F2H, Umask 08H) プリフェッチ要求によって退去された L2 変更されたキャッシュ線をカウントします。
L2_LINES_OUT.ANY
(Event F2H, Umask 0FH) なんらかの理由のために退去されたすべての L2 キャッシュ線をカウントします。
SQ_MISC.LRU_HINTS
(Event F4H, Umask 04H) L3 に送った Super Queue LRU ヒントの数をカウントします。
SQ_MISC.SPLIT_LOCK
(Event F4H, Umask 10H) キャッシュ線に渡って SQ ロック分割の数をカウントします。
SQ_FULL_STALL_CYCLES
(Event F6H, Umask 01H) Super Queue が full であるサイクルをカウントします。この core のスレッドのいずれも uncore にアクセスできません。
FP_ASSIST.ALL
(Event F7H, Umask 01H) micro-code アシスト介入を必要とする浮動小数点演算の実行の数をカウントします。アシストは、次の場合で必要です: SSE 命令、(FTZ フラグがオフであるとき、DAZ フラグがオフであるか、または Underflow の結果になるときの Denormal 入力): x87 命令、(NaN または非正規化は、レジスタにロードされるか、またはメモリ、Division by 0 または Underflow 出力から入力されるように使用されます)。
FP_ASSIST.OUTPUT
(Event F7H, Umask 02H) 出力値 (宛先レジスタ) が無効であるとき、浮動小数点 micro-code アシストの数をカウントします。
FP_ASSIST.INPUT
(Event F7H, Umask 04H) 入力値 (FP 命令へのソースオペランドの 1 つ) が無効であるときに、浮動小数点 micro-code アシストの数をカウントします。
SIMD_INT_64.PACKED_MPY
(Event FDH, Umask 01H) SID 整数の 64 ビットのパックされた乗算演算の数をカウントします。
SIMD_INT_64.PACKED_SHIFT
(Event FDH, Umask 02H) SID 整数の 64 ビットのパックされたシフト演算の数をカウントします。
SIMD_INT_64.PACK
(Event FDH, Umask 04H) SID 整数の 64 ビットのパック操作の数をカウントします。
SIMD_INT_64.UNPACK
(Event FDH, Umask 08H) SID 整数の 64 ビットのアンパック操作の数をカウントします。
SIMD_INT_64.PACKED_LOGICAL
(Event FDH, Umask 10H) SID 整数の 64 ビットの論理演算の数をカウントします。
SIMD_INT_64.PACKED_ARITH
(Event FDH, Umask 20H) SID 整数の 64 ビットの算術演算の数をカウントします。
SIMD_INT_64.SHUFFLE_MOVE
(Event FDH, Umask 40H) SID 整数の 64 ビットのシフトまたは移動操作の数をカウントします。

歴史

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

作者

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