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

名称

pmc.sandybridgeIntel Sandy Bridge ファミリの CPU のためのイベントを測定する

ライブラリ

Performance Counters Library (libpmc, -lpmc)

書式

#include < pmc.h>

解説

Intel Sandy Bridge CPU は、 Intel 性能測定アーキテクチャのバージョン 3 に適合する PMC を含んでいます。これらの CPU は、最大 3 つの PMC のクラスを含んでいます:
PMC_CLASS_IAF
カウンタごとのたった 1 つのハードウェアイベントをカウントする固定関数のカウンタ。
PMC_CLASS_IAP
ハードウェアイベントの定義されたセットのうちの 1 つをカウントするために設定されるプログラマブルカウンタ。
PMC_CLASS_TSC
これらの PMC は、 pmc.tsc(3) で文書化されています。

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

Intel Sandy Bridge PMC PMC は、次に文書化されています: Volume 3B: System Programming Guide, Part 2, Intel(R) 64 and IA-32 Architectures Software Developers Manual, Order Number: 253669-039US, Intel Corporation, May 2011.

SANDY BRIDGE 固定関数 PMC

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

SANDY BRIDGE プログラマブル PMC

プログラマブル PMC は、次のケーパビリティをサポートしています:
ケーパビリティ サポート
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 ビットを設定します。
REQ_DMND_DATA_RD
デマンドデータページテーブルエントリのキャッシュライン読み込みと同様に、デマンドとすべてと部分的なキャッシュラインの DCU のプリフェッチデータ読み込みの数をカウントします。 L2 データに読み込みプリフェッチまたは命令フェッチをカウントしません。
REQ_DMND_RFO
デマンドとデータキャッシュラインへの書き込みによって生成された所有権 (RFO) 要求のための DCU プリフェッチ読み込みの数をカウントします。 L2 RFO プリフェッチをカウントしません。
REQ_DMND_IFETCH
デマンドと DCU プリフェッチ命令のキャッシュライン読み込みの数をカウントします。 L2 コード読み込みプリフェッチをカウントしません。
REQ_WB
(排他的に修正された) ライトバックのトランザクションの数をカウントします。
REQ_PF_DATA_RD
L2 プリフェッチャ (prefetcher) によって生成されたデータキャッシュライン読み込みの数をカウントします。
REQ_PF_RFO
L2 プリフェッチャ (prefetcher) によって生成された RFO 要求の数をカウントします。
REQ_PF_IFETCH
L2 プリフェッチャ (prefetcher) によって生成されたコード読み込みの数をカウントします。
REQ_PF_LLC_DATA_RD
ロードのための L3 への L2 プリフェッチャ。
REQ_PF_LLC_RFO
L2 プリフェッチャによって生成された RFO 要求。
REQ_PF_LLC_IFETCH
命令フェッチのための L3 への L2 プリフェッチャ。
REQ_BUS_LOCKS
バスロックとスピリット (split) ロック要求。
REQ_STRM_ST
ストリーミング格納要求。
REQ_OTHER
I/O を含む、そのクロス IDI 任意の他の要求。
RES_ANY
任意の応答タイプのためのすべての値をキャッチする。
RES_SUPPLIER_NO_SUPP
利用可能なサプライヤ情報はありません。
RES_SUPPLIER_LLC_HITM
L3 の M-状態の初期検索状態。
RES_SUPPLIER_LLC_HITE
E-状態。
RES_SUPPLIER_LLC_HITS
S-状態。
RES_SUPPLIER_LLC_HITF
F-状態。
RES_SUPPLIER_LOCAL
ローカル DRAM コントローラ。
RES_SNOOP_SNP_NONE
snoop 関連の情報についての詳細はありません。
RES_SNOOP_SNP_NO_NEEDED
snoop は、要求を満たすために必要ではありませんでした。
RES_SNOOP_SNP_MISS
snoop は、必要で、ミスされたすべての snoop 化されたキャッシュ: - LLC ヒットについて、ReslHitl は、すべてのコアによって返されました。 - LLC ミスについて、Rspl は、すべてのソケットによって返され、データは、DRAM から返されました。
RES_SNOOP_HIT_NO_FWD
snoop は、必要で、それは、少なくとも 1 つの snoop 化されたキャッシュにヒットします。ヒットは、キャッシュラインが snoop の効果が生じる前に有効であったことを示します。これは、次を含んでいます: - snoop ヒット w/ 無効 (LLC ヒット、RFO) - snoop ヒット、共有されたまま (LLC ヒット/ミス、IFetch/Data_RD) - snoop ヒット w/ 無効と転送しない (LLC ミス、RFO ヒット S) LLC ミスの場合に、データは、DRAM から返されます。
RES_SNOOP_HIT_FWD
snoop は、必要で、データは、リモートのソケットから転送されました。これは、次を含んでいます: - snoop 転送クリーン、共有されたまま (LLC ヒット/ミス、IFetch/Data_RD/RFT)
RES_SNOOP_HITM
snoop は、必要で、ローカルまたはリモートキャッシュで HitM された。 HitM は、キャッシュラインが snoop の結果として効果が生じる前に、修正された状態であったことを示します。これは、次を含んでいます: - snoop HitM w/ WB (LLC ミス、IFetch/Data_RD) - snoop 転送修正された w/ 無効 (LLC ヒット/ミス、RFO) - snoop MtoS (LLC ヒット、IFetch/Data_RD)
RES_NON_DRAM
ターゲットは、非 DRAM システムアドレスでした。これは、MMIO トランザクションを含んでいます。
cmask= value
1 サイクルで測定される設定されたイベントの数が value 以上である場合のみ、増加する PMC を設定します。
edge
他の修飾子によって表現された条件のアサートされる転送にデアサート (de-asserted) された数をカウントする PMC を設定します。指定されるなら、カウンタは、条件が真のままである間にクロックの数に関係なく、条件が真になるときはいつでも一度だけ増加します。
inv
サイクルごとのイベントの数が“ cmask”修飾子によって指定された値未満であるとき、カウンタを増加して、“ cmask”修飾子が存在するとき、比較の意味を逆にします。
os
プロセッサ特権レベル 0 で起こるイベントをカウントするために PMC を設定します。
usr
特権レベル 1、2 または 3 で生じるイベントをカウントするために PMC を設定します。

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

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

Sandy Bridge プログラマブル PMC は、次のイベントをサポートします:
LD_BLOCKS.DATA_UNKNOWN
(EVENT_03H, Umask 01H) 未知のデータがあるバッファブロックを格納するためにブロックされたロード。
LD_BLOCKS.STORE_FORWARD
(Event 03H, Umask 02H) 転送することができないバッファを格納してオーバラップすることによりブロックされたロード。
LD_BLOCKS.NO_SR
(Event 03H, Umask 08H) 利用可能でないリソースのためにブロックされたロードの分割された数。
LD_BLOCKS.ALL_BLOCK
(EVENT_03H, Umask 10H) あらゆるロードがブッロックされるが、DCU ミスがない場合の数。
MISALIGN_MEM_REF.LOADS
(Event 05H, Umask 01H) L1D にディスパッチされた理論なキャッシュラインスピリット (split) ロード uops。
MISALIGN_MEM_REF.STORES
(Event 05H, Umask 02H) L1D にディスパッチされた理論なキャッシュラインスピリット (split) 格納アドレス uops。
LD_BLOCKS_PARTIAL.ADDRESS_ALIAS
(Event 07H, Umask 01H) アドレスで部分的な比較のための MOB の誤りの依存性。
LD_BLOCKS_PARTIAL.ALL_STA_BLOCK
(Event 07H, Umask 08H) オペレーションをロードする回数は、まだ知られていないアドレスでより古い格納のために一時的にブロックされます。ロードオペレーションは、このタイプの 1 つ以上のブロックを負担します。
LI DTLB_LOAD_MISSES.MISS_CAUSES_A_WALK
(Event 08H, Umask 01H) 任意のページサイズのページウォーク (page walk) を引き起こす、すべての TLB レベルのミス。
DTLB_LOAD_MISSES.WALK_COMPLETED
(Event 08H, Umask 02H) 任意のサイズに完了したページウォーク (page walk) を引き起こす、すべての TLB レベルのミス。
DTLB_LOAD_MISSES.WALK_DURATION
(Event 08H, Umask 04H) サイクル PMH は、ウォーク (walk) でビジーです。
DTLB_LOAD_MISSES.STLB_HIT
(Event 08H, Umask 10H) キャッシュロード STLB ヒットの数。ページウォーク (page walk) はありません。
INT_MISC.RECOVERY_CYCLES
(Event 0DH, Umask 03H) Machine Clears または JEClear の後に、復旧するのをウェートするサイクル。 Cmask = 1 に設定します。発生をカウントするために Edge を設定する。
INT_MISC.RAT_STALL_CYCLES
(Event 0DH, Umask 40H) サイクル RAT 外部 stall は、このスレッドのために IDQ に送られます。
UOPS_ISSUED.ANY
(Event 0EH, Umask 01H) RS への RAT によって発行された Uops の番号を各サイクルで増加します。このコアの stall したサイクルをカウントするために Cmask = 1、Inv = 1、Any = 1 に設定します。 stall したサイクルをカウントするために Cmask = 1、Inv = 1 に設定します。
FP_COMP_OPS_EXE.X87
(Event 10H, Umask 01H) 実行された X87 uops の数をカウントします。
FP_COMP_OPS_EXE.SSE_FP_PACKED_DOUBLE
(Event 10H, Umask 10H) 実行された SSE* 倍精度 FP パックされた uops の数をカウントします。
FP_COMP_OPS_EXE.SSE_FP_SCALAR_SINGLE
(Event 10H, Umask 20H) 実行された SSE* 単精度 FP スカラ uops の数をカウントします。
FP_COMP_OPS_EXE.SSE_PACKED_SINGLE
(Event 10H, Umask 40H) 実行された SSE* 単精度 FP パックされた uops の数をカウントします。
LiFP_COMP_OPS_EXE.SSE_SCALAR_DOUBLE
(Event 10H, Umask 80H) 実行された SSE* 倍精度 FP スカラ uops の数をカウントします。
SIMD_FP_256.PACKED_SINGLE
(Event 11H, Umask 01H) 256 ビットのパックされたの単精度浮動小数点命令をカウントします。
SIMD_FP_256.PACKED_DOUBLE
(Event 11H, Umask 02H) 256 ビットのパックされた倍精度浮動小数点命令をカウントします。
ARITH.FPU_DIV_ACTIVE
(Event 14H, Umask 01H) INT と FP を含んで、ディバイダ (divider) がアクティブであるサイクル。割算のの数をカウントするために 'edge = 1, cmask = 1' を設定する。
INSTS_WRITTEN_TO_IQ.INSTS
(Event 17H, Umask 01H) IQ のすべてのサイクルに書き込まれた命令の数をカウントします。
L2_RQSTS.DEMAND_DATA_RD_HIT
(Event 24H, Umask 01H) L2 キャッシュをヒットする Demand Data Read 要求。
L2_RQSTS.ALL_DEMAND_DATA_RD
(Event 24H, Umask 03H) あらゆるデマンドと L2 への L1 HW プリフェッチデータのロード要求をカウントします。
L2_RQSTS.RFO_HITS
(Event 24H, Umask 04H) L2 キャッシュをヒットする格納 RFO 要求の数をカウントします。
L2_RQSTS.RFO_MISS
(Event 24H, Umask 08H) L2 キャッシュをミスする格納 RFO 要求の数をカウントします。
L2_RQSTS.ALL_RFO
(Event 24H, Umask 0CH) すべての L2 格納 RFO 要求をカウントします。
L2_RQSTS.CODE_RD_HIT
(Event 24H, Umask 10H) L2 キャッシュをヒットする命令フェッチの数。
L2_RQSTS.CODE_RD_MISS
(Event 24H, Umask 20H) L2 キャッシュをミスした命令フェッチの数。
L2_RQSTS.ALL_CODE_RD
(Event 24H, Umask 30H) すべての L2 コード要求をカウントします。
L2_RQSTS.PF_HIT
(Event 24H, Umask 40H) L2 をヒットする L2 ハードウェアプリフェッチからの要求。
L2_RQSTS.PF_MISS
(Event 24H, Umask 80H) L2 をミスした L2 ハードウェアプリフェッチからの要求。
L2_RQSTS.ALL_PF
(Event 24H, Umask C0H) L2 ハードウェアプリフェッチャ (prefetcher) からのあらゆる要求。
L2_STORE_LOCK_RQSTS.MISS
(Event 27H, Umask 01H) キャッシュラインをミスする RFO。
L2_STORE_LOCK_RQSTS.HIT_E
(Event 27H, Umask 04H) E 状態でキャッシュラインをヒットする RFO。
L2_STORE_LOCK_RQSTS.HIT_M
(EVENT_27H, Umask 08H) M 状態でキャッシュラインをヒットする RFO。
L2_STORE_LOCK_RQSTS.ALL
(EVENT_27H, Umask 0FH) あらゆる状態のキャッシュラインをアクセスする RFO。
L2_L1D_WB_RQSTS.HIT_E
(Event 28H, Umask 04H) L1D から E 状態の L2 キャッシュラインまで拒否されないライトバック (writeback)。
L2_L1D_WB_RQSTS.HIT_M
(Event 28H, Umask 08H) L1D から M 状態の L2 キャッシュラインまで拒否されないライトバック (writeback)。
LONGEST_LAT_CACHE.REFERENCE
(Event 2EH, Umask 4FH) このイベントは、最後のレベルのキャッシュのキャッシュラインを参照するコアを起源とする要求をカウントします。
LONGEST_LAT_CACHE.MISS
(Event 2EH, Umask 41H) このイベントは、最後のレベルのキャッシュへの参照のための各キャッシュミス条件をカウントします。
CPU_CLK_UNHALTED.THREAD_P
(Event 3CH, Umask 00H) スレッドが halt 状態でない間のスレッドサイクルの数をカウントします。スレッドは、HLT 命令を実行しているとき、halt 状態に入ります。コアの周波数は、電源または熱の絞り (throttling) のために時々変更されます。
CPU_CLK_THREAD_UNHALTED.REF_XCLK
(Event 3CH, Umask 01H) 停止されなかったとき、XCLK (100MHz) の周波数を増加する。
L1D_PEND_MISS.PENDING
(Event 48H, Umask 01H) すべてのサイクルで、未解決の L1D ミスの数を増加します。発生をカウントするために Cmask = 1 と Edge = 1 を設定します。カウンタ 2 のみ。サイクルをカウントするために Cmask = 1 に設定します。
DTLB_STORE_MISSES.MISS_CAUSES_A_WALK
(Event 49H, Umask 01H Miss in all TLB levels causes an page walk of any) ページサイズ (4K/2M/4M/1G)。
DTLB_STORE_MISSES.WALK_COMPLETED
(Event 49H, Umask 02H) あらゆるページサイズ (4K/2M/4M/1G) の完了するページウォーク (page walk) を引き起こす、すべての TLB レベルのミス。
DTLB_STORE_MISSES.WALK_DURATION
(Event 49H, Umask 04H) サイクル PMH は、このウォーク (walk) でビジーです。
DTLB_STORE_MISSES.STLB_HIT
(Event 49H, Umask 10H) 最初の TLB レベルをミスする格納操作ですが、2 番目をヒットし、ページウォーク (page walk) を引き起こしません。
LOAD_HIT_PRE.SW_PF
(Event 4CH, Umask 01H) S/W プリフェッチのために割り付けられたバッファを満たすヒットする S/W プリフェッチロードのディスパッチはありません。
LOAD_HIT_PER.HW_PF
(Event 4CH, Umask 02H) H/W プリフェッチのために割り付けられたバッファを満たすヒットする S/W プリフェッチロードのディスパッチはありません。
HW_PRE_REQ.DL1_MISS
(Event 4EH, Umask 02H) L1D キャッシュをミスする Hardware Prefetch 要求。要求は、ブロックが適用可能であるなら、または、例えば、Fill Buffer をヒットする場合を含めて、キャッシュをアクセスして、それをミスするたびにカウントされます。これは、L1 ストリーマと IP に基づいた (IPP) HW プリフェッチャの両方から成ります。
L1D.REPLACEMENT
(Event 51H, Umask 01H) L1 データキャッシュにもたらされるラインの数をカウントします。
L1D.ALLOCATED_IN_M
(Event 51H, Umask 02H) 修正された L1D キャッシュラインの割付けの数をカウントします。
L1D.EVICTION
(Event 51H, Umask 04H) 置換のために L1 データキャッシュから退去された (evicted) 修正されたラインの数をカウントします。
L1D.ALL_M_REPLACEMENT
(Event 51H, Umask 08H) Snoop HitM または汚いラインの置換のために L1D の M 状態の退去された出力のキャッシュライン。
PARTIAL_RAT_STALLS.FLAGS_MERGE_UOP
(Event 59H, Umask 20H) flight 各サイクルで flags-merge uops の数を増加します。サイクルをカウントするために Cmask = 1 に設定します。
PARTIAL_RAT_STALLS.SLOW_LEA_WINDOW
(Event 59H, Umask 40H) 割り付けられた少なくとも 1 つの遅い LEA uop があるサイクル。
PARTIAL_RAT_STALLS.MUL_SINGLE_UOP
(Event 59H, Umask 80H) 割り付けられた複数のパックされた/スカラ単精度 uops の番号。
RESOURCE_STALLS2.ALL_FL_EMPTY
(Event 5BH, Umask 0CH) フリーリストが空のために stall したサイクル。
RESOURCE_STALLS2.ALL_PRF_CONTROL
(Event 5BH, Umask 0FH) 物理的なレジスタのために満杯の制御を構造のために stall したサイクル。
RESOURCE_STALLS2.BOB_FULL
(Event 5BH, Umask 40H) Cycles Allocator は、Branch Order Buffer のために stall されました。
RESOURCE_STALLS2.OOO_RSRC
(Event 5BH, Umask 4FH) 満杯のリソースの異常のために stall したサイクル。
CPL_CYCLES.RING0
(Event 5CH, Umask 01H) スレッドがリング 0 にあるとき、停止されていないコアサイクル。遷移をカウントするために Edge を使用します。
CPL_CYCLES.RING123
(Event 5CH, Umask 02H) スレッドがリング 0 にないとき、停止されていないコアサイクル。
RS_EVENTS.EMPTY_CYCLES
(Event 5EH, Umask 01H) RS がスレッドのために空であるサイクル。
OFFCORE_REQUESTS_OUTSTANDING.DEMAND_DATA_RD
(Event 60H, Umask 01H) uncore への SQ の Offcore 未解決 Demand Data Read トランザクション。サイクルをカウントするために Cmask=1 に設定します。
OFFCORE_REQUESTS_OUTSTANDING.DEMAND_RFO
(Event 60H, Umask 04H) uncore への SQ の Offcore 未解決 RFO 格納トランザクション。サイクルをカウントするために Cmask=1 に設定します。
OFFCORE_REQUESTS_OUTSTANDING.ALL_DATA_RD
(Event 60H, Umask 08H) uncore への SQ の Offcore 未解決キャッシュ可能なデータ読み込みトランザクション。サイクルをカウントするために Cmask=1 に設定します。
LOCK_CYCLES.SPLIT_LOCK_UC_LOCK_DURATION
(Event 63H, Umask 01H) UC ロックまたは split ロックのために L1D と L2 がロックされるサイクル。
LOCK_CYCLES.CACHE_LOCK_DURATION
(Event 63H, Umask 02H) L1D がロックされるサイクル。
IDQ.EMPTY
(Event 79H, Umask 02H) IDQ が空であるサイクルをカウントします。
IQD.MITE_UOPS
(Event 79H, Umask 04H) MITE パスから IDQ に配信された uops の各サイクルの番号を増加します。サイクルをカウントするために Cmask = 1 に設定します。 Umask 04H と 20H を組み合わせることができます。
IDQ.DSB_UOPS
(Event 79H, Umask 08H) 各サイクルを増加します。 DSB パスから IDQ に配信される uops の番号。サイクルをカウントするために Cmask = 1 に設定します。 Umask 08H と 10H を組み合わせることができます。
IDQ.MS_DSB_UOPS
(Event 79H, Umask 10H) DSB によって MS ビジーのとき、IDQ に配信された uops の各サイクルの番号を増加します。 MS がビジーのサイクルをカウントするために Cmask = 1 に設定します。 MS の活性化をカウントするために Cmask = 1 と Edge = 1 に設定します。 Umask 08H と 10H を組み合わせることができます。
IDQ.MS_MITE_UOPS
(Event 79H, Umask 20H) MITE によって MS がビジーのとき、IDQ に配信された uops の各サイクルの番号を増加します。サイクルをカウントするために Cmask = 1 に設定します。 Umask 04H と 20H を組み合わせることができます。
IDQ.MS_UOPS
(Event 79H, Umask 30H) DSB または MITE のいずれかによって MS から IDQ に配信された uops の各サイクルの番号を増加します。サイクルをカウントするために Cmask = 1 に設定します。 Umask 04H、08H と 30H を組み合わせることができます。
ICACHE.MISSES
(Event 80H, Umask 02H) Instruction Cache、Streaming Buffer と Victim Cache Misses の番号。 UC アクセスを含みます。
ITLB_MISSES.MISS_CAUSES_A_WALK
(Event 85H, Umask 01H) ページウォーク (page walk) を引き起こす、すべての ITLB レベルのミス。
ITLB_MISSES.WALK_COMPLETED
(Event 85H, Umask 02H) 完了したページウォーク (page walk) を引き起こす、すべての ITLB レベルのミス。
ITLB_MISSES.WALK_DURATION
(Event 85H, Umask 04H) PMH がウォーク (page walk) でビジーのサイクル。
ITLB_MISSES.STLB_HIT
(Event 85H, Umask 10H) キャッシュロード STLB ヒットの番号。ページウォーク (page walk) しません。
ILD_STALL.LCP
(Event 87H, Umask 01H) 命令の接頭辞の長さの変更により引き起こされた stall。
ILD_STALL.IQ_FULL
(Event 87H, Umask 04H) IQ が満杯のために stall したサイクル。
BR_INST_EXEC.COND
(Event 88H, Umask 01H) 実行された条件 near 分岐命令を制限しますが、必ずしもリタイア (retire) しません。 umask 40H、80H と組み合わせなければなりません。
BR_INST_EXEC.DIRECT_JMP
(Event 88H, Umask 02H) call と間接分岐を除いて、すべての無条件の near 分岐命令を制限します。 umask 80H と組み合わせなければなりません。
BR_INST_EXEC.INDIRECT_JMP_NON_CALL_RET
(Event 88H, Umask 04H) call でも return でもない、実行される間接 near 分岐命令を制限します。 umask 80H と組み合わせなければなりません。
BR_INST_EXEC.RETURN_NEAR
(Event 88H, Umask 08H) return ニーモニックがある間接 near 分岐を制限します。 umask 80H と組み合わせなければなりません。
BR_INST_EXEC.DIRECT_NEAR_CALL
(Event 88H, Umask 10H) 実行された call 分岐でないものを除いて、無条件の near call 分岐命令を制限します。 umask 80H と組み合わせなければなりません。
BR_INST_EXEC.INDIRECT_NEAR_CALL
(Event 88H, Umask 20H) 実行されたレジスタとメモリ間接の両方を含んでいる間接 near call を制限します。 umask 80H と組み合わせなければなりません。
BR_INST_EXEC.NONTAKEN
(Event 88H, Umask 40H) 実行された non-taken near 分岐を制限します。 umask 01H のみに適用可能です。
BR_INST_EXEC.TAKEN
(Event 88H, Umask 80H) 実行された taken near 分岐を制限します。 umask 01H、02H、04H、08H、10H、20H と組み合わせなければなりません。
BR_INST_EXE.ALL_BRANCHES
(Event 88H, Umask FFH) (必ずしもリタイアされない) すべての実行された near 分岐をカウントします
BR_MISP_EXEC.COND
(Event 89H, Umask 01H) 予測ミスされた条件付き near 分岐命令を制限します。 umask 40H、80H と組み合わせなければなりません。
BR_MISP_EXEC.INDIRECT_JMP_NON_CALL_RET
(Event 89H, Umask 04H) call でも return でもない、予測ミスされた間接 near 分岐命令を制限します。 umask 80H と組み合わせなければなりません。
BR_MISP_EXEC.RETURN_NEAR
(Event 89H, Umask 08H) return ニーモニックがある予測ミスされた間接 near 分岐を制限します。 umask 80H と組み合わせなければなりません。
BR_MISP_EXEC.DIRECT_NEAR_CALL
(Event 89H, Umask 10H) 実行された、non call 分岐を除いて、予測ミスされた無条件 near call 分岐命令を制限します。 umask 80H と組み合わせなければなりません。
BR_MISP_EXEC.INDIRECT_NEAR_CALL
(Event 89H, Umask 20H) 実行された、レジスタとメモリ間接の両方を含めて、予測ミスされた間接 near call を制限します。 umask 80H と組み合わせなければなりません。
BR_MISP_EXEC.NONTAKEN
(Event 89H, Umask 40H) 実行された予測ミスされた non-taken near 分岐を制限します。 umask 01H のみに適用可能です。
BR_MISP_EXEC.TAKEN
(Event 89H, Umask 80H) 実行された予測ミスされた taken near 分岐を制限します。 umask 01H、02H、04H、08H、10H、20H と組み合わせなければなりません。
BR_MISP_EXEC.ALL_BRANCHES
(Event 89H, Umask FFH) (必ずしもリタイアされない) すべての near 実行された分岐をカウントします。
IDQ_UOPS_NOT_DELIVERED.CORE
(Event 9CH, Umask 01H) スレッドごとの RAT に配信されない uops の数をカウントします。 uop b/w を制限する Cmask を使用します。
UOPS_DISPATCHED_PORT.PORT_0
(Event A1H, Umask 01H) Uop がポート 0 でディスパッチされるサイクル。
UOPS_DISPATCHED_PORT.PORT_1
(Event A1H, Umask 02H) Uop がポート 1 でディスパッチされるサイクル。
UOPS_DISPATCHED_PORT.PORT_2_LD
(Event A1H, Umask 04H) load uop がポート 2 でディスパッチされるサイクル。
UOPS_DISPATCHED_PORT.PORT_2_STA
(Event A1H, Umask 08H) store アドレス uop がポート 2 でディスパッチされるサイクル。
UOPS_DISPATCHED_PORT.PORT_2
(Event A1H, Umask 0CH) Uop がポート 2 でディスパッチされるサイクル。
UOPS_DISPATCHED_PORT.PORT_3_LD
(Event A1H, Umask 10H) load uop がポート 3 でディスパッチされるサイクル。
UOPS_DISPATCHED_PORT.PORT_3_STA
(Event A1H, Umask 20H) store アドレス uop がポート 3 でディスパッチされるサイクル。
UOPS_DISPATCHED_PORT.PORT_3
(Event A1H, Umask 30H) Uop がポート 3 でディスパッチされるサイクル。
UOPS_DISPATCHED_PORT.PORT_4
(Event A1H, Umask 40H) Uop がポート 4 でディスパッチされるサイクル。
UOPS_DISPATCHED_PORT.PORT_5
(Event A1H, Umask 80H) Uop がポート 5 でディスパッチされるサイクル。
RESOURCE_STALLS.ANY
(Event A2H, Umask 01H) 割り付けが Resource Related の理由のためにストールされたサイクル。
RESOURCE_STALLS.LB
(Event A2H, Umask 02H) ロードバッファの不足のためのストールのサイクルをカウントします。
RESOURCE_STALLS.LB
(Event A2H, Umask 04H) 利用可能な適任でない RS エントリのためにストールされたサイクル。
RESOURCE_STALLS.SB
(Event A2H, Umask 08H) 利用可能な store バッファがないためにストールされたサイクル。 (ドレイン形式 sync を含まない)
RESOURCE_STALLS.ROB
(Event A2H, Umask 10H) re-order バッファ full のためにストールされたサイクル。
RESOURCE_STALLS.FCSW
(Event A2H, Umask 20H) FPU 制御ワードを書き込むためにストールされたサイクル。
RESOURCE_STALLS.MXCSR
(Event A2H, Umask 40H) 前の MXCSR 改名をクローズするために生じる MXCSR レジスタ改名のためにストールされたサイクル。
RESOURCE_STALLS.OTHER
(Event A2H, Umask 80H) 実行が、他のリソース問題のためにストールされた間にストールされたサイクル。
DSB2MITE_SWITCHES.COUNT
(Event ABH, Umask 01H) MITE スイッチへの DSB の数。
DSB2MITE_SWITCHES.PENALTY_CYCLES
(Event ABH, Umask 02H) DSB が遅延を引き起こした MITE スイッチのサイクル。
DSB_FILL.OTHER_CANCEL
(Event ACH, Umask 02H) 異常な方法の制限のためでない有効な DSB fill の取り消しの状況。
DSB_FILL.EXCEED_DSB_LINES
(Event ACH, Umask 08H) > 3 DSB ラインに遭遇した DSB Fill。
DSB_FILL.ALL_CANCEL
(Event ACH, Umask 0AH) 異常な方法の制限のためでない有効な Decode Stream Buffer (DSB) fill の取り消しの状況。
ITLB.ITLB_FLUSH
(Event AEH, Umask 01H) 4k/2M/4M ページを含む、ITLB フラッシュの数をカウントします。
OFFCORE_REQUESTS.DEMAND_DATA_RD
(Event B0H, Umask 01H) uncore に送られた Demand データ読み込み要求。
OFFCORE_REQUESTS.DEMAND_RFO
(Event B0H, Umask 04H) 正規の RFO、locks、ItoM を含む、uncore に送られた Demand RFO 読み込み要求。
OFFCORE_REQUESTS.ALL_DATA_RD
(Event B0H, Umask 08H) uncore に送られたデータ読み込み要求 (デマンドとプリフェッチ)。
UOPS_DISPATCHED.THREAD
(Event B1H, Umask 01H) ディスパッチされたスレッドごとの各サイクルのための uops の合計数をカウントします。ストールサイクルをカウントするために Cmask = 1, INV = 1 に設定します。
UOPS_DISPATCHED.CORE
(Event B1H, Umask 02H) ディスパッチされた core ごとの各サイクルのために uops の合計数をカウントします。 ANY の設定を必要としません。
OFFCORE_REQUESTS_BUFFER.SQ_FULL
(Event B2H, Umask 01H) このスレッドコアのためにより多くのエントリをとることができない Offcore 要求バッファ。
AGU_BYPASS_CANCEL.COUNT
(Event B6H, Umask 01H) すべての次の特性がある実行された load オペレーションをカウントします: 1. format [base + offset] のアドレシング、 2. オフセットは、1 と 2047 の間です、 3. ベースレジスタで指定されたアドレスは、1 つのページにあり、アドレス [base+offset] は、別のページにあります。
OFF_CORE_RESPONSE_0
(Event B7H, Umask 01H) Off-core Response Performance Monitoring (Off-core レスポンス性能監視)。 PMC0 のみ。プログラミング MSR 01A6H を要求します。
OFF_CORE_RESPONSE_1
(Event BBH, Umask 01H) Off-core Response Performance Monitoring (Off-core レスポンス性能監視)。 PMC3 のみ。プログラミング MSR 01A7H を要求します。
TLB_FLUSH.DTLB_THREAD
(Event BDH, Umask 01H) スレッド特有のエントリの DTLB フラッシュの試み。
TLB_FLUSH.STLB_ANY
(Event BDH, Umask 20H) STLB フラッシュの試みの数をカウントします。
L1D_BLOCKS.BANK_CONFLICT_CYCLES
(Event BFH, Umask 05H) ディスパッチされた load が他の load ポートと矛盾する L1D bank のために取り消されるときのサイクル。 cmask=1。
INST_RETIRED.ANY_P
(Event C0H, Umask 00H) リタイアメント (retirement) での命令の数。
INST_RETIRED.PREC_DIST
(Event C0H, Umask 01H) IP 配信の PEBS shadow の影響を縮小する HW がある正確な命令リタイアされたイベント。 PMC1 のみ。他の PMC を quiesce (休止) しなければなりません。
INST_RETIRED.X87
(Event C0H, Umask 02H) X87 命令リタイアされたイベント。
OTHER_ASSISTS.ITLB_MISS_RETIRED
(Event C1H, Umask 02H) ITLB ミスを経験した命令。
OTHER_ASSISTS.AVX_STORE
(Event C1H, Umask 08H) 256 ビットの AVX store 操作に関連するアシストの数。
OTHER_ASSISTS.AVX_TO_SSE
(Event C1H, Umask 10H) 適用可能なペナルティのとき、AVX-256 から古い SSE までの遷移の数。
OTHER_ASSISTS.SSE_TO_AVX
(Event C1H, Umask 20H) 適用可能なペナルティのとき、SSE から AVX-256 までの遷移の数。
UOPS_RETIRED.ALL
(Event C2H, Umask 01H) リタイアされた micro-ops の数をカウントします。 cmask=1 を使用し、アクティブなサイクルまたはストールされたサイクルのカウントを逆にします。
UOPS_RETIRED.RETIRE_SLOTS
(Event C2H, Umask 02H) 各サイクルを使用するスロットのリタイアメントの数をカウントします。
MACHINE_CLEARS.MEMORY_ORDERING
(Event C3H, Umask 02H) メモリ順序が矛盾するためにクリアするマシンの数をカウントします。
MACHINE_CLEARS.SMC
(Event C3H, Umask 04H) プログラムがコードセクションに書き込む回数をカウントします。
MACHINE_CLEARS.MASKMOV
(Event C3H, Umask 20H) 0 に設定されたマスクビットがある不正なアドレス範囲を参照する実行された AVX のマスクされた load 操作の数をカウントします。
BR_INST_RETIRED.ALL_BRANCH
(Event C4H, Umask 00H) リタイアメントでの分岐命令。
BR_INST_RETIRED.CONDITIONAL
(Event C4H, Umask 01H) リタイアされた条件分岐命令の数をカウントします。
BR_INST_RETIRED.NEAR_CALL
(Event C4H, Umask 02H) リタイアされた直接と間接 near call 命令。
BR_INST_RETIRED.ALL_BRANCHES
(Event C4H, Umask 04H) リタイアされた分岐命令の数をカウントします。
BR_INST_RETIRED.NEAR_RETURN
(Event C4H, Umask 08H) リタイアされた near return 命令の数をカウントします。
BR_INST_RETIRED.NOT_TAKEN
(Event C4H, Umask 10H) リタイアされた not taken 分岐命令の数をカウントします。
BR_INST_RETIRED.NEAR_TAKEN
(Event C4H, Umask 20H) リタイアされた near taken 分岐の数。
BR_INST_RETIRED.FAR_BRANCH
(Event C4H, Umask 40H) リタイアされた far 分岐の数。
BR_MISP_RETIRED.ALL_BRANCHES
(Event C5H, Umask 00H) リタイアメントでの予測ミスされた分岐命令。
BR_MISP_RETIRED.CONDITIONAL
(Event C5H, Umask 01H) リタイアされた予測ミスされた条件分岐命令。
BR_MISP_RETIRED.NEAR_CALL
(Event C5H, Umask 02H) リタイアされた直接と間接の予測ミスされた near call 命令。
BR_MISP_RETIRED.ALL_BRANCH
(Event C5H, Umask 04H) リタイアされた予測ミスされた macro 分岐命令。
BR_MISP_RETIRED.NOT_TAKEN
(Event C5H, Umask 10H) リタイアされた予測ミスされた not taken 分岐命令。
BR_MISP_RETIRED.TAKEN
(Event C5H, Umask 20H) リタイアされた予測ミスされた taken 分岐命令。
FP_ASSIST.X87_OUTPUT
(Event CAH, Umask 02H) 値を出力するための X87 アシストの数。
FP_ASSIST.X87_INPUT
(Event CAH, Umask 04H) 値を入力するための X87 アシストの数。
FP_ASSIST.SIMD_OUTPUT
(Event CAH, Umask 08H) 値を出力するための SIMD FP アシストの数。
FP_ASSIST.SIMD_INPUT
(Event CAH, Umask 10H) 値を入力するための SIMD FP アシストの数。
FP_ASSIST.ANY
(Event CAH, Umask 1EH) あらゆる input/output SSE* または FP アシストがあるサイクル。
ROB_MISC_EVENTS.LBR_INSERTS
(Event CCH, Umask 20H) ハードウェアによって新しい LBR レコードを保存する状況をカウントします。
MEM_TRANS_RETIRED.LOAD_LATENCY
(Event CDH, Umask 01H) 指定されたレイテンシ (latency) しきい値があるサンプル load。 PMC3 のみ。 MSR 0x3F6 のしきい値を指定します。
MEM_TRANS_RETIRED.PRECISE_STORE
(Event CDH, Umask 02H) PEBS レコードによってサンプル store と collect precise store 操作。 PMC3 のみ。
MEM_UOP_RETIRED.LOADS
(Event D0H, Umask 01H) ロードされるリタイアされたメモリ uops を制限します。 umask 10H、20H、40H、80H と組み合わせます。
MEM_UOP_RETIRED.STORES
(Event D0H, Umask 02H) 格納されるリタイアされたメモリ uops を制限します。 umask 10H、20H、40H、80H と組み合わせます。
MEM_UOP_RETIRED.STLB_MISS
(Event D0H, Umask 10H) STLB ミスがあるリタイアされたメモリ uops を制限します。カウントを生成するために umask 01H、02H と組み合わせなければなりません。
MEM_UOP_RETIRED.LOCK
(Event D0H, Umask 20H) ロックがあるリタイアされたメモリ uops を制限します。カウントを生成するために umask 01H、02H と組み合わせなければなりません。
MEM_UOP_RETIRED.SPLIT
(Event D0H, Umask 40H) ラインスピリット (split) があるリタイアされたメモリ uops を制限します。カウントを生成するために umask 01H、02H と組み合わせなければなりません。
MEM_UOP_RETIRED_ALL
(Event D0H, Umask 80H) あらゆるリタイアされたメモリ uops を制限します。カウントを生成するために umask 01H、02H と組み合わせなければなりません。
MEM_LOAD_UOPS_RETIRED.L1_HIT
(Event D1H, Umask 01H) データソースとして L1 キャッシュ hits があるリタイアされた load uops。カウントを生成するために umask 01H、02H と組み合わせなければなりません。
MEM_LOAD_UOPS_RETIRED.L2_HIT
(Event D1H, Umask 02H) データソースとして L2 キャッシュ hits があるリタイアされた load uops。
MEM_LOAD_UOPS_RETIRED.LLC_HIT
(Event D1H, Umask 04H) データソースが要求された snoops がない LLC の data hits であったリタイアされた load uops。
MEM_LOAD_UOPS_RETIRED.HIT_LFB
(Event D1H, Umask 40H) レディ (ready) でないデータがある同じキャッシュラインへのミスに先行するためにデータソースが load uops ミスされた L1 であるが hit FB であるリタイアされた load uops。
MEM_LOAD_UOPS_LLC_HIT_RETIRED.XSNP_MISS
(Event D2H, Umask 01H) データソースが LLC hit で、on-pkg core cache の cross-core snoop ミスされたリタイアされた load uops。
MEM_LOAD_UOPS_LLC_HIT_RETIRED.XSNP_HIT
(Event D2H, Umask 02H) データソースが LLC で、on-pkg core cache の cross-core snoop hits であったリタイアされた load uops。
MEM_LOAD_UOPS_LLC_HIT_RETIRED.XSNP_HITM
(Event D2H, Umask 04H) データソースが共有された LLC から HitM 応答であったリタイアされた load uops。
MEM_LOAD_UOPS_LLC_HIT_RETIRED.XSNP_NONE
(Event D2H, Umask 08H) データソースが要求された snoops なしの LLC で hits した、リタイアされた load uops。
MEM_LOAD_UOPS_LLC_HIT_RETIRED.LLC_MISS
(Event D4H, Umask 02H) load をサービスしたキャッシュのデータソースとしての未知情報があるリタイアされた load uops。
L2_TRANS.DEMAND_DATA_RD
(Event F0H, Umask 01H) L2 キャッシュをアクセスする Demand Data Read 要求。
L2_TRANS.RF0
(Event F0H, Umask 02H) L2 キャッシュをアクセスする RFO 要求。
L2_TRANS.CODE_RD
(Event F0H, Umask 04H) 命令をフェッチするとき、アクセスする L2 キャッシュ。
L2_TRANS.ALL_PF
(Event F0H, Umask 08H) L2 キャッシュをアクセスする L2 または LLC の HW プリフェッチ。
L2_TRANS.L1D_WB
(Event F0H, Umask 10H) L2 キャッシュをアクセスする L1D ライトバック (writeback)。
L2_TRANS.L2_FILL
(Event F0H, Umask 20H) L2 キャッシュをアクセスする L2 fill 要求。
L2_TRANS.L2_WB
(Event F0H, Umask 40H) L2 キャッシュをアクセスする L2 ライトバック (writeback)。
L2_TRANS.ALL_REQUESTS
(Event F0H, Umask 80H) L2 パイプにアクセスするトランザクション。
L2_LINES_IN.I
(Event F1H, Umask 01H) I 状態 filling L2 の L2 キャッシュライン。カウントすることは、rejects をカバーしません。
L2_LINES_IN.S
(Event F1H, Umask 02H) S 状態 filling L2 の L2 キャッシュライン。カウントすることは、rejects をカバーしません。
L2_LINES_IN.E
(Event F1H, Umask 04H) E 状態 filling L2 の L2 キャッシュライン。カウントすることは、rejects をカバーしません。
L2_LINES-IN.ALL
(Event F1H, Umask 07H) L2 キャッシュライン filling L2。カウントすることは、rejects をカバーしません。
L2_LINES_OUT.DEMAND_CLEAN
(Event F2H, Umask 01H) demand によって立ち退かせられたクリーン L2 キャッシュライン。
L2_LINES_OUT.DEMAND_DIRTY
(Event F2H, Umask 02H) demand によって立ち退かせられた汚い L2 キャッシュライン。
L2_LINES_OUT.PF_CLEAN
(Event F2H, Umask 04H) L2 プリフェッチによって立ち退かせられたクリーン L2 キャッシュライン。
L2_LINES_OUT.PF_DIRTY
(Event F2H, Umask 08H) L2 プリフェッチによって立ち退かせられた汚い L2 キャッシュライン。
L2_LINES_OUT.DIRTY_ALL
(Event F2H, Umask 0AH) 汚い L2 キャッシュライン filling L2。カウントすることは、rejects をカバーしません。
SQ_MISC.SPLIT_LOCK
(Event F4H, Umask 10H) SQ のスプリット (split) ロック。

歴史

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

作者

Performance Counters Library (libpmc, -lpmc) ライブラリは、 Joseph Koshy <jkoshy@FreeBSD.org>によって書かれました。 Sandy Bridge マイクロアーキテクチャのサポートは、 Davide Italiano <davide@FreeBSD.org>によって書かれました。
October 19, 2012 FreeBSD