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

名称

pmc.ivybridgeIntel Ivy Bridge ファミリ CPU のための測定イベント

ライブラリ

Performance Counters Library (libpmc, -lpmc)

書式

#include < pmc.h>

解説

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

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

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

IVYBRIDGE 固定関数 PMC

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

IVYBRIDGE プログラマブル 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 応答ビットを設定します。
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 プリフェッチャによって生成されたデータキャッシュラインの読み込みの数をカウントします。
REQ_PF_RFO
L2 プリフェッチャによって生成された RFO 要求の数をカウントします。
REQ_PF_IFETCH
L2 プリフェッチャによって生成されたコード読み込みの数をカウントします。
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)

Ivy Bridge プログラマブル PMC は、次のイベントをサポートします:
LD_BLOCKS.STORE_FORWARD
(Event 03H, Umask 02H) 転送することができないバッファを格納してオーバラップすることによりブロックされたロード。
MISALIGN_MEM_REF.LOADS
(Event 05H, Umask 01H) L1D にディスパッチされた理論なキャッシュラインスプリット (split) ロード uops。
MISALIGN_MEM_REF.STORES
(Event 05H, Umask 02H) L1D にディスパッチされた理論なキャッシュラインスプリット (split) 格納アドレス。
LD_BLOCKS_PARTIAL.ADDRESS_ALIAS
(Event 07H, Umask 01H) アドレスで部分的な比較のための MOB の誤りの依存性。
DTLB_LOAD_MISSES.DEMAND_LD_MISS_CAUSES_A_WALK
(Event 08H, Umask 81H) デマンドロードから任意のページサイズのページウォーク (page walk) を引き起こす、すべての TLB レベルのミス。
DTLB_LOAD_MISSES.DEMAND_LD_WALK_COMPLETED
(Event 08H, Umask 82H) デマンドロードによって任意のサイズに完了したページウォーク (page walk) を引き起こす、すべての TLB レベルのミス。
DTLB_LOAD_MISSES.DEMAND_LD_WALK_DURATION
(Event 08H, Umask 84H) デマンドロードのために、サイクル PMH は、ウォーク (walk) でビジーです。
UOPS_ISSUED.ANY
(Event 0EH, Umask 01H) RS への RAT によって発行された Uops の番号を各サイクルで増加します。 stall したサイクルをカウントするために Cmask = 1、Inv = 1 に設定します。このコアの stall したサイクルをカウントするために Cmask = 1、Inv = 1、Any = 1 に設定します。
UOPS_ISSUED.FLAGS_MERGE
(Event 0EH, Umask 10H) 割り付けられたフラグマージ (flags-merge) uops の数。そのような uops は、ディレイ (delay) を追加します。
UOPS_ISSUED.SLOW_LEA
(Event 0EH, Umask 20H) 割り付けられた遅い LEA または同様の uops の数。 LEA 命令の結果として、またはそうでない場合と関係なく、そのような uop には、3 つのソース (例えば、2 つのソース + 直接) があります。
UOPS_ISSUED.SINGLE_MUL
(Event 0EH, Umask 40H) 割り付けられた乗算パックされた(packed)/スカラ単精度 uops の数。
ARITH.FPU_DIV_ACTIVE
(Event 14H, Umask 01H) INT と FP を含んで、ディバイダ (divider) がアクティブであるサイクル。割算 (divide) の数をカウントするために 'edge = 1, cmask = 1' に設定します。
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 HW プリフェッチャの要求をカウントします。
L2_RQSTS.PF_MISS
(Event 24H, Umask 80H) L2 をミスしたすべての L2 HW プリフェッチャの要求をカウントします。
L2_RQSTS.ALL_PF
(Event 24H, Umask C0H) すべての L2 HW プリフェッチャの要求をカウントします。
L2_STORE_LOCK_RQSTS.MISS
(Event 27H, Umask 01H) キャッシュラインをミスした 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.MISS
(Event 28H, Umask 01H) LLC をミスした拒否されないライトバック。
L2_L1D_WB_RQSTS.HIT_E
(Event 28H, Umask 04H) E 状態の L1D から L2 キャッシュラインへの拒否されないライトバック。
L2_L1D_WB_RQSTS.HIT_M
(Event 28H, Umask 08H) M 状態の L1D から L2 キャッシュラインへの拒否されないライトバック。
L2_L1D_WB_RQSTS.ALL
(Event 28H, Umask 0FH) あらゆる状態の L1D から L2 キャッシュラインへの拒否されないライトバック。
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) 状態に入ります。コア周波数は、電源または熱の絞りのために時々変わるかもしれません。
CPU_CLK_THREAD_UNHALTED.REF_XCLK
(Event 3CH, Umask 01H) 停止 (halt) されなかったとき、XCLK (100MHz) の周波数を増加します。
L1D_PEND_MISS.PENDING
(Event 48H, Umask 01H) すべてのサイクルの未解決の L1D ミスの数を増加します。発生をカウントするために Cmaks = 1 と Edge = 1 を設定します。カウンタ 2 のみ。サイクルをカウントするために Cmask = 1 を設定します。
DTLB_STORE_MISSES.MISS_CAUSES_A_WALK
(Event 49H, Umask 01H) あらゆるページサイズ (4K/2M/4M/1G) のページウォーク (page walk) を引き起こすすべての TLB レベルのミス。
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 は、このウォークでビジーです。
DTLB_STORE_MISSES.STLB_HIT
(Event 49H, Umask 10H) 最初の TLB レベルをミスする格納演算ですが、second をヒットし、ページウォークを引き起こさしません。
LOAD_HIT_PRE.SW_PF
(Event 4CH, Umask 01H) S/W プリフェッチのための割り付けられた満杯のバッファをヒットする SW プリフェッチでないロードのディスパッチ。
LOAD_HIT_PRE.HW_PF
(Event 4CH, Umask 02H) H/W プリフェッチのための割り付けられた満杯のバッファをヒットする SW プリフェッチでないロードのディスパッチ。
L1D.REPLACEMENT
(Event 51H, Umask 01H) L1 データキャッシュにもたらされるラインの数をカウントします。
MOVE_ELIMINATION.INT_NOT_ELIMINATED
(Event 58H, Umask 01H) 削除されなかった整数 Move Elimination 候補 uops の数。
MOVE_ELIMINATION.SIMD_NOT_ELIMINATED
(Event 58H, Umask 02H) 削除されなかった SIMD Move Elimination 候補 uops の数。
MOVE_ELIMINATION.INT_ELIMINATED
(Event 58H, Umask 04H) 削除された整数 Move Elimination 候補 uops の数。
MOVE_ELIMINATION.SIMD_ELIMINATED
(Event 58H, Umask 08H) 削除された SIMD Move Elimination 候補 uops の数。
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 がスレッドのために空であるサイクル。
TLB_ACCESS.LOAD_STLB_HIT
(Event 5FH, Umask 01H) ミスされた最初のレベルの DTLB であるが、2 番目のレベルにヒットするロード操作をカウントする。
OFFCORE_REQUESTS_OUTSTANDING.DEMAND_DATA_RD
(Event 60H, Umask 01H) uncore する SQ の Offcore 未解決 Demand Data Read トランザクション。サイクルをカウントするために Cmask=1 に設定します。
OFFCORE_REQUESTS_OUTSTANDING.DEMAND_CODE_RD
(Event 60H, Umask 02H) uncore する SQ の Offcore 未解決 Demand Code 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 が空であるサイクルをカウントします。
IDQ.MITE_UOPS
(Event 79H, Umask 04H) MITE パスから IDQ に配信された uops の各サイクル番号を増加します。 Umask 04H と 20H を組み合わせることができます。サイクルをカウントするために Cmask = 1 に設定します。
IDQ.DSB_UOPS
(Event 79H, Umask 08H) 各サイクルを増加します。 DSB パスから IDQ に配信する uops の数。 Umask 08H と 10H を組み合わせることができます。サイクルをカウントするために Cmask = 1 に設定します。
IDQ.MS_DSB_UOPS
(Event 79H, Umask 10H) DSB による MS_busy のとき、IDQ に配信された uops の各サイクルの番号を増加します。サイクルをカウントするために Cmask = 1 に設定します。配信の番号をカウントするために Edge=1 を追加します。 Umask 04H、08H を組み合わせることができます。
IDQ.MS_MITE_UOPS
(Event 79H, Umask 20H) MITE による MS_busy のとき、IDQ に配信された uops の各サイクルの番号を増加します。サイクルをカウントするために Cmask = 1 に設定します。 Umask 04H、08H を組み合わせることができます。
IDQ.MS_UOPS
(Event 79H, Umask 30H) DSB または MITE による MS から、IDQ に配信された uops の各サイクルの番号を増加します。サイクルをカウントするために Cmask = 1 に設定します。 Umask 04H、08H を組み合わせることができます。
IDQ.ALL_DSB_CYCLES_ANY_UOPS
(Event 79H, Umask 18H) DSB が少なくとも 1 つ uops に配信されたサイクルをカウントします。 Cmask = 1 に設定します。
IDQ.ALL_DSB_CYCLES_4_UOPS
(Event 79H, Umask 18H) DSB が 4 つの uops に配信されたサイクルをカウントします。 Cmask = 4 に設定します。
IDQ.ALL_MITE_CYCLES_ANY_UOPS
(Event 79H, Umask 24H) MITE が少なくとも 1 つ uops に配信されたサイクルをカウントします。 Cmask = 1 に設定します。
IDQ.ALL_MITE_CYCLES_4_UOPS
(Event 79H, Umask 24H) MITE が 4 つの uops に配信されたサイクルをカウントします。 Cmask = 4 に設定します。
IDQ.MITE_ALL_UOPS
(Event 79H, Umask 3CH) あらゆるパスから IDQ に配信された uops の数。
ICACHE.MISSES
(Event 80H, Umask 02H) Instruction Cache、Streaming Buffer と Victim Cache Misses の数。 UC アクセスを含んでいます。
ITLB_MISSES.MISS_CAUSES_A_WALK
(Event 85H, Umask 01H) ページウォークを引き起こす、すべての ITLB レベルのミス。
ITLB_MISSES.WALK_COMPLETED
(Event 85H, Umask 02H) 完了したページウォークを引き起こす、すべての ITLB レベルのミス。
ITLB_MISSES.WALK_DURATION
(Event 85H, Umask 04H) PMH がウォークでビジーであるサイクル。
ITLB_MISSES.STLB_HIT
(Event 85H, Umask 10H) キャッシュロード STLB ヒットの数。ページウォークなし。
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_EXEC.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.RS
(Event A2H, Umask 04H) 利用可能な適任でない RS エントリのためにストールされたサイクル。
RESOURCE_STALLS.SB
(Event A2H, Umask 08H) 利用可能な store バッファがないためにストールされたサイクル。 (ドレイン形式 sync を含まない)。
RESOURCE_STALLS.ROB
(Event A2H, Umask 10H) re-order バッファ full のためにストールされたサイクル。
DSB2MITE_SWITCHES.COUNT
(Event ABH, Umask 01H) MITE スイッチへの DSB の数。
DSB2MITE_SWITCHES.PENALTY_CYCLES
(Event ABH, Umask 02H) DSB が遅延を引き起こした MITE スイッチのサイクル。
DSB_FILL.EXCEED_DSB_LINES
(Event ACH, Umask 08H) > 3 DSB ラインに遭遇した 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_CODE_RD
(Event B0H, Umask 02H) 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_EXECUTED.THREAD
(Event B1H, Umask 01H) 実行されたスレッドごとの各サイクルのための uops の合計数をカウントします。ストールサイクルをカウントするために Cmask = 1, INV = 1 に設定します。
UOPS_EXECUTED.CORE
(Event B1H, Umask 02H) 実行されたコアごとの各サイクルのための uops の合計数をカウントします。 ANY の設定を必要としません。
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 フラッシュの試みの数をカウントします。
INST_RETIRED.ANY_P
(Event C0H, Umask 00H) リタイアメント (retirement) での命令の数。
INST_RETIRED.ALL
(Event C0H, Umask 01H) IP 配信の PEBS shadow の影響を縮小する HW がある正確な命令リタイアされたイベント。 PMC1 のみ。他の PMC を quiesce (休止) しなければなりません。
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 を使用し、アクティブなサイクルまたはストールされたサイクルのカウントを逆にします。コア粒度 (granular) のために Any=1 を使用して、PEBS をサポートする。
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_BRANCHES
(Event C4H, Umask 00H) リタイアメントでの分岐命令。
BR_INST_RETIRED.CONDITIONAL
(Event C4H, Umask 01H) リタイアされた条件分岐命令の数をカウントします。 PEBS をサポートします。
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) リタイアされた予測ミスされた条件分岐命令。 PEBS をサポートします。
BR_MISP_RETIRED.NEAR_CALL
(Event C5H, Umask 02H) リタイアされた直接と間接の予測ミスされた near call 命令。
BR_MISP_RETIRED.ALL_BRANCHES
(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 アシストの数。
FP_ASSIST.X87_INPUT
(Event CAH, Umask 04H) 値を入力するための X87 FP アシストの数。
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 と組み合わせます。 PEBS をサポートします。
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。 PEBS をサポートします。
MEM_LOAD_UOPS_RETIRED.L2_HIT
(Event D1H, Umask 02H) データソースとして L2 キャッシュ hits があるリタイアされた load uops。
MEM_LOAD_UOPS_RETIRED.LLC_HIT
(Event D1H, Umask 04H) データソースとして LLC キャッシュ 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。 PEBS をサポートします。
MEM_LOAD_UOPS_LLC_HIT_RETIRED.XSNP_HIT
(Event D2H, Umask 02H) データソースが LLC で、on-pkg core cache の cross-core snoop hits であったリタイアされた load uops。 PEBS をサポートします。
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_MISS_RETIRED.LOCAL_DRAM
(Event D3H, Umask 01H) データソースが LLC をミスしたが、ローカルの dram からサービスされたリタイアされた load uops。 PEBS をサポートします。
L2_TRANS.DEMAND_DATA_RD
(Event F0H, Umask 01H) L2 キャッシュをアクセスする Demand Data Read 要求。
L2_TRANS.RFO
(Event F0H, Umask 02H) L2 キャッシュをアクセスする RFO 要求。
L2_TRANS.CODE_RD
(Event F0H, Umask 04H) 命令をフェッチするとき、アクセスする L2 キャッシュ。
L2_TRANS.ALL_PF
(Event F0H, Umask 08H) rejects を含む、L2 をアクセスするあらゆる MLC または 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) MLC プリフェッチャによって立ち退かせられたクリーン L2 キャッシュライン。
L2_LINES_OUT.PF_DIRTY
(Event F2H, Umask 08H) MLC プリフェッチャによって立ち退かせられた汚い L2 キャッシュライン。

歴史

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

作者

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