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

名称

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

ライブラリ

Performance Counters Library (libpmc, -lpmc)

書式

#include < pmc.h>

解説

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

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

Intel Haswell PMC は、次に文書化されています。 Combined Volumes: 1, 2A, 2B, 2C, 3A, 3B and 3C, Intel(R) 64 and IA-32 Architectures Software Developer's Manual, Order Number: 325462-045US, Intel Corporation, January 2013.

HASWELL 固定関数 PMC

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

HASWELL プログラマブル 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 データ読み込みプリフェッチまたは命令のフェッチをカウントしません。
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)

Haswell プログラマブル 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) 格納アドレス uops。
LD_BLOCKS_PARTIAL.ADDRESS_ALIAS
(Event 07H, Umask 01H) アドレスで部分的な比較のための MOB の誤りの依存性。
DTLB_LOAD_MISSES.MISS_CAUSES_A_WALK
(Event 08H, Umask 01H) 任意のページサイズのページウォーク (page walk) を引き起こす、すべての TLB レベルのミス。
DTLB_LOAD_MISSES.WALK_COMPLETED_4K
(Event 08H, Umask 02H) 任意の TLB レベルで 4K ページウォークを引き起こしたデマンドロードミスのための完了したページウォーク。
DTLB_LOAD_MISSES.WALK_COMPLETED_2M_4K
(Event 08H, Umask 02H) 任意の TLB レベルで 2M/4M ページウォークを引き起こしたデマンドロードミスのための完了したページウォーク。
DTLB_LOAD_MISSES.WALK_COMPLETED
(Event 08H, Umask 0EH) デマンドロードミスのために任意のページサイズの任意の TLB の完了したページウォーク。
DTLB_LOAD_MISSES.WALK_DURATION
(Event 08H, Umask 10H) サイクル PMH は、ウォーク (walk) でビジーです。
DTLB_LOAD_MISSES.STLB_HIT_4K
(Event 08H, Umask 20H) ミスされた DTLB だが STLB (4K) をヒットしたロードミス。
DTLB_LOAD_MISSES.STLB_HIT_2M
(Event 08H, Umask 40H) ミスされた DTLB だが STLB (2M) をヒットしたロードミス。
DTLB_LOAD_MISSES.STLB_HIT
(Event 08H, Umask 60H) キャッシュロード STLB ヒットの数。ページウォーク (page walk) はありません。
DTLB_LOAD_MISSES.PDE_CACHE_MISS
(Event 08H, Umask 80H) ミスされた線形から物理アドレス変換の低い部分がある DTLB デマンドロードミス。
INT_MISC.RECOVERY_CYCLES
(Event 0DH, Umask 03H) JEClear を除いて Machine Clears の後に、復旧するのをウェートするサイクル。 Cmask = 1 に設定します。
UOPS_ISSUED.ANY
(Event 0EH, Umask 01H) RS への RAT によって発行された Uops の番号を各サイクルで増加します。このコアの 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 の数。
L2_RQSTS.DEMAND_DATA_RD_MISS
(Event 24H, Umask 21H) リジェクトなしの L2 をミスした Demand Data Read 要求。
L2_RQSTS.DEMAND_DATA_RD_HIT
(Event 24H, Umask 41H) L2 キャッシュをヒットする Demand Data Read 要求。
L2_RQSTS.ALL_DEMAND_DATA_RD
(Event 24H, Umask E1H) あらゆるデマンドと L2 への L1 HW プリフェッチデータのロード要求をカウントします。
L2_RQSTS.RFO_HIT
(Event 24H, Umask 42H) L2 キャッシュをヒットする格納 RFO 要求の数をカウントします。
L2_RQSTS.RFO_MISS
(Event 24H, Umask 22H) L2 キャッシュをミスする格納 RFO 要求の数をカウントします。
L2_RQSTS.ALL_RFO
(Event 24H, Umask E2H) すべての L2 格納 RFO 要求をカウントします。
L2_RQSTS.CODE_RD_HIT
(Event 24H, Umask 44H) L2 キャッシュをヒットする命令フェッチの数。
L2_RQSTS.CODE_RD_MISS
(Event 24H, Umask 24H) L2 キャッシュをミスした命令フェッチの数。
L2_RQSTS.ALL_DEMAND_MISS
(Event 24H, Umask 27H) L2 キャッシュをミスした Demand 要求。
L2_RQSTS.ALL_DEMAND_REFERENCES
(Event 24H, Umask E7H) L2 キャッシュへの Demand 要求。
L2_RQSTS.ALL_CODE_RD
(Event 24H, Umask E4H) すべての L2 コード要求をカウントします。
L2_RQSTS.L2_PF_HIT
(Event 24H, Umask 50H) L2 をヒットするすべての L2 HW プリフェッチャの要求をカウントします。
L2_RQSTS.L2_PF_MISS
(Event 24H, Umask 30H) L2 をミスしたすべての L2 HW プリフェッチャの要求をカウントします。
L2_RQSTS.ALL_PF
(Event 24H, Umask F8H) すべての L2 HW プリフェッチャの要求をカウントします。
L2_RQSTS.MISS
(Event 24H, Umask 3FH) L2 をミスしたすべての要求。
L2_RQSTS.REFERENCES
(Event 24H, Umask FFH) L2 キャッシュへのすべての要求。
L2_DEMAND_RQSTS.WB_HIT
(Event 27H, Umask 50H) 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 を設定します。
DTLB_STORE_MISSES.MISS_CAUSES_A_WALK
(Event 49H, Umask 01H) あらゆるページサイズ (4K/2M/4M/1G) のページウォーク (page walk) を引き起こすすべての TLB レベルのミス。
DTLB_STORE_MISSES.WALK_COMPLETED_4K
(Event 49H, Umask 02H) 4K ページの構造の 1 つ以上の TLB レベルでミスを格納するための完了したページウォーク。
DTLB_STORE_MISSES.WALK_COMPLETED_2M_4M
(Event 49H, Umask 04H) 2M/4M ページの構造の 1 つ以上の TLB レベルでミスを格納するための完了したページウォーク。
DTLB_STORE_MISSES.WALK_COMPLETED
(Event 49H, Umask 0EH) あらゆるページサイズ (4K/2M/4M/1G) のあらゆる TLB レベルのミスを格納するための完了するページウォーク (page walk)。
DTLB_STORE_MISSES.WALK_DURATION
(Event 49H, Umask 10H) サイクル PMH は、このウォークでビジーです。
DTLB_STORE_MISSES.STLB_HIT_4K
(Event 49H, Umask 20H) DTLB をミスしたが、STLB (4K) をヒットするミスを格納します。
DTLB_STORE_MISSES.STLB_HIT_2M
(Event 49H, Umask 40H) DTLB をミスしたが、STLB (2M) をヒットする格納ミス。
DTLB_STORE_MISSES.STLB_HIT
(Event 49H, Umask 60H) 最初の TLB レベルをミスする格納演算ですが、second をヒットし、ページウォークを引き起こさしません。
DTLB_STORE_MISSES.PDE_CACHE_MISS
(Event 49H, Umask 80H) ミスした線形から物理アドレス変換の低い部分がある DTLB 格納ミス。
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 04H) 削除されなかった整数 Move Elimination 候補 uops の数。
MOVE_ELIMINATION.SMID_NOT_ELIMINATED
(Event 58H, Umask 08H) 削除されなかった SIMD Move Elimination 候補 uops の数。
MOVE_ELIMINATION.INT_ELIMINATED
(Event 58H, Umask 01H) スレッドがリング 0 にあるとき、停止されていないコアサイクル。
MOVE_ELIMINATION.SMID_ELIMINATED
(Event 58H, Umask 02H) 削除された SIMD Move Elimination 候補 uops の数。
CPL_CYCLES.RING0
(Event 5CH, Umask 02H) スレッドがリング 0 にあるとき、停止されていないコアサイクル。
CPL_CYCLES.RING123
(Event 5CH, Umask 01H) スレッドがリング 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_CORE_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 の各サイクル番号を増加します。サイクルをカウントするために Cmask = 1 に設定します。
IDQ.DSB_UOPS
(Event 79H, Umask 08H) 各サイクルを増加します。 DSB パスから IDQ に配信する uops の数。サイクルをカウントするために Cmask = 1 に設定します。
IDQ.MS_DSB_UOPS
(Event 79H, Umask 10H) DSB による MS_busy のとき、IDQ に配信された uops の各サイクルの番号を増加します。サイクルをカウントするために Cmask = 1 に設定します。配信の番号をカウントするために Edge=1 を追加します。
IDQ.MS_MITE_UOPS
(Event 79H, Umask 20H) MITE による MS_busy のとき、IDQ に配信された uops の各サイクルの番号を増加します。サイクルをカウントするために Cmask = 1 に設定します。
IDQ.MS_UOPS
(Event 79H, Umask 30H) DSB または MITE による MS から、IDQ に配信された uops の各サイクルの番号を増加します。サイクルをカウントするために Cmask = 1 に設定します。
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_4K
(Event 85H, Umask 02H) ITLB 4K ページエントリのミスのために完了するページウォーク (page walk)。
TLB_MISSES.WALK_COMPLETED_2M_4M
(Event 85H, Umask 04H) ITLB 2M/4M ページエントリのミスのために完了するページウォーク (page walk)。
ITLB_MISSES.WALK_COMPLETED
(Event 85H, Umask 0EH) あらゆるページサイズの ITLB の完了するページウォーク (page walk)。
ITLB_MISSES.WALK_DURATION
(Event 85H, Umask 10H) PMH がウォークでビジーであるサイクル。
ITLB_MISSES.STLB_HIT_4K
(Event 85H, Umask 20H) STLB (4K) をヒットした ITLB ミス。
ITLB_MISSES.STLB_HIT_2M
(Event 85H, Umask 40H) STLB (2K) をヒットした ITLB ミス。
ITLB_MISSES.STLB_HIT
(Event 85H, Umask 60H) STLB をヒットした TLB ミス。ページウォーク (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) しません。
BR_INST_EXEC.DIRECT_JMP
(Event 88H, Umask 02H) call と間接分岐を除いて、すべての無条件の near 分岐命令を制限します。
BR_INST_EXEC.INDIRECT_JMP_NON_CALL_RET
(Event 88H, Umask 04H) call でも return でもない、実行さる間接 near 分岐命令を制限します。
BR_INST_EXEC.RETURN_NEAR
(Event 88H, Umask 08H) return ニーモニックがある間接 near 分岐を制限します。
BR_INST_EXEC.DIRECT_NEAR_CALL
(Event 88H, Umask 10H) 実行された call 分岐でないものを除いて、無条件の near call 分岐命令を制限します。
BR_INST_EXEC.INDIRECT_NEAR_CALL
(Event 88H, Umask 20H) 実行されたレジスタとメモリ間接の両方を含んでいる間接 near call を制限します。
BR_INST_EXEC.NONTAKEN
(Event 88H, Umask 40H) 実行された non-taken near 分岐を制限します。
BR_INST_EXEC.TAKEN
(Event 88H, Umask 80H) 実行された taken near 分岐を制限します。 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 分岐命令を制限します。
BR_MISP_EXEC.INDIRECT_JMP_NON_CALL_RET
(Event 89H, Umask 04H) call でも return でもない、予測ミスされた間接 near 分岐命令を制限します。
BR_MISP_EXEC.RETURN_NEAR
(Event 89H, Umask 08H) return ニーモニックがある予測ミスされた間接 near 分岐を制限します。
BR_MISP_EXEC.DIRECT_NEAR_CALL
(Event 89H, Umask 10H) 実行された、non call 分岐を除いて、予測ミスされた無条件 near call 分岐命令を制限します。
BR_MISP_EXEC.INDIRECT_NEAR_CALL
(Event 89H, Umask 20H) 実行された、レジスタとメモリ間接の両方を含めて、予測ミスされた間接 near call を制限します。
BR_MISP_EXEC.NONTAKEN
(Event 89H, Umask 40H) 実行された予測ミスされた non-taken near 分岐を制限します。
BR_MISP_EXEC.TAKEN
(Event 89H, Umask 80H) 実行された予測ミスされた taken near 分岐を制限します。 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 の数をカウントします。
UOPS_EXECUTED_PORT.PORT_0
(Event A1H, Umask 01H) このスレッドで Uop がポート 0 でディスパッチされるサイクル。
UOPS_EXECUTED_PORT.PORT_1
(Event A1H, Umask 02H) このスレッドで Uop がポート 1 でディスパッチされるサイクル。
UOPS_EXECUTED_PORT.PORT_2
(Event A1H, Umask 04H) このスレッドで Uop がポート 2 でディスパッチされるサイクル。
UOPS_EXECUTED_PORT.PORT_3
(Event A1H, Umask 08H) このスレッドで Uop がポート 3 でディスパッチされるサイクル。
UOPS_EXECUTED_PORT.PORT_4
(Event A1H, Umask 10H) このスレッドで Uop がポート 4 でディスパッチされるサイクル。
UOPS_EXECUTED_PORT.PORT_5
(Event A1H, Umask 20H) このスレッドで Uop がポート 5 でディスパッチされるサイクル。
UOPS_EXECUTED_PORT.PORT_6
(Event A1H, Umask 40H) このスレッドで Uop がポート 6 でディスパッチされるサイクル。
UOPS_EXECUTED_PORT.PORT_7
(Event A1H, Umask 80H) このスレッドで Uop がポート 7 でディスパッチされるサイクル。
RESOURCE_STALLS.ANY
(Event A2H, Umask 01H) 割り付けが Resource Related の理由のためにストールされたサイクル。
RESOURCE_STALLS.RS
(Event A2H, Umask 04H) 利用可能な適任でない RS エントリのためにストールされたサイクル。
RESOURCE_STALLS.SB
(Event A2H, Umask 08H) (ドレイン形式 sync を含まない) 利用可能な store バッファがないためにストールされたサイクル。
RESOURCE_STALLS.ROB
(Event A2H, Umask 10H) re-order バッファ full のためにストールされたサイクル。
CYCLE_ACTIVITY.CYCLES_L2_PENDING
(Event A3H, Umask 01H) 保留中の L2 ミスロードがあるサイクル。サイクルをカウントするために Cmask = 2 に設定します。
CYCLE_ACTIVITY.CYCLES_LDM_PENDING
(Event A3H, Umask 02H) 保留中のメモリロードがあるサイクル。サイクルをカウントするために Cmask = 2 に設定します。
CYCLE_ACTIVITY.STALLS_L2_PENDING
(Event A3H, Umask 05H) ミスされた L2 ロードの数。
CYCLE_ACTIVITY.CYCLES_L1D_PENDING
(Event A3H, Umask 08H) 保留中の L1 キャッシュミスロードがあるサイクル。サイクルをカウントするために Cmask = 8 に設定します。
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.CORE
(Event B1H, Umask 02H) 実行されたスレッドごとの各サイクルのための uops の合計数をカウントします。
OFF_CORE_RESPONSE_0
(Event B7H, Umask 01H) MSR 01A6H を要求します。
OFF_CORE_RESPONSE_1
(Event BBH, Umask 01H) MSR 01A7H を要求します。
PAGE_WALKER_LOADS.DTLB_L1
(Event BCH, Umask 11H) L1+FB でヒットした DTLB ページウォーカ (page walker) ロードの数。
PAGE_WALKER_LOADS.ITLB_L1
(Event BCH, Umask 21H) L1+FB でヒットした ITLB ページウォーカ (page walker) ロードの数。
PAGE_WALKER_LOADS.DTLB_L2
(Event BCH, Umask 12H) L2 でヒットした DTLB ページウォーカ (page walker) ロードの数。
PAGE_WALKER_LOADS.ITLB_L2
(Event BCH, Umask 22H) L2 でヒットした ITLB ページウォーカ (page walker) ロードの数。
PAGE_WALKER_LOADS.DTLB_L3
(Event BCH, Umask 14H) L3 でヒットした DTLB ページウォーカ (page walker) ロードの数。
PAGE_WALKER_LOADS.ITLB_L3
(Event BCH, Umask 24H) L3 でヒットした ITLB ページウォーカ (page walker) ロードの数。
PAGE_WALKER_LOADS.DTLB_MEMORY
(Event BCH, Umask 18H) メモリからロードされる DTLB ページウォーカ (page walker) の数。
PAGE_WALKER_LOADS.ITLB_MEMORY
(Event BCH, Umask 28H) メモリからロードされる ITLB ページウォーカ (page walker) の数。
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 がある正確な命令リタイアされたイベント。
OTHER_ASSISTS.AVX_TO_SSE
(Event C1H, Umask 08H) 適用可能なペナルティのとき、AVX-256 から古い SSE までの遷移の数。
OTHER_ASSISTS.SSE_TO_AVX
(Event C1H, Umask 10H) 適用可能なペナルティのとき、SSE から AVX-256 までの遷移の数。
OTHER_ASSISTS.ANY_WB_ASSIST
(Event C1H, Umask 40H) uop ライトバック (writeback) で HW によって呼び出されたマイクロコードアシストの数。
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_BRANCHES
(Event C4H, Umask 00H) リタイアメントでの分岐命令。
BR_INST_RETIRED.CONDITIONAL
(Event C4H, Umask 01H) リタイアされた条件分岐命令 Supports 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) リタイアされた予測ミスされた条件分岐命令。
BR_MISP_RETIRED.CONDITIONAL
(Event C5H, Umask 04H) リタイアされた予測ミスされたマクロ分岐命令。
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)がユーザ定義のしきい値を越えるランダムにサンプリングされたロード。ランダム化のためにサンプリングされる全体的なロードの小さな断片のロード。
MEM_UOP_RETIRED.LOADS
(Event D0H, Umask 01H) ロードされるリタイアされたメモリ uops を制限します。 Supports PEBS と 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 を制限します。カウントを生成するために Supports PEBS と 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 を制限します。カウントを生成するために Supports PEBS と umask 01H、02H を組み合わせなければなりません。
MEM_LOAD_UOPS_RETIRED.L1_HIT
(Event D1H, Umask 01H) データソースとして L1 キャッシュ hits があるリタイアされた load uops。
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.L2_MISS
(Event D1H, Umask 10H) L2 ミスされたリタイアされたロード 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_MISS_RETIRED.LOCAL_DRAM
(Event D3H, Umask 01H) データソースが LLC をミスしたが、ローカルの dram からサービスされたリタイアされた load uops。
BACLEARS.ANY
(Event E6H, Umask 1FH) BPU 予測ミスのためのフロントエンド re-steers の数。
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 キャッシュライン。
L2_LINES_IN.S
(Event F1H, Umask 02H) S 状態 filling L2 の L2 キャッシュライン。
L2_LINES_IN.E
(Event F1H, Umask 04H) E 状態 filling L2 の L2 キャッシュライン。
L2_LINES_IN.ALL
(Event F1H, Umask 07H) L2 キャッシュライン filling L2。
L2_LINES_OUT.DEMAND_CLEAN
(Event F2H, Umask 05H) demand によって立ち退かせられたクリーン L2 キャッシュライン。
L2_LINES_OUT.DEMAND_DIRTY
(Event F2H, Umask 06H) demand によって立ち退かせられた汚い L2 キャッシュライン。

歴史

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

作者

Performance Counters Library (libpmc, -lpmc) ライブラリは、 Joseph Koshy <jkoshy@FreeBSD.org>によって書かれました。 Haswell マイクロアーキテクチャのサポートは、 Hiren Panchasara <hiren.panchasara@gmail.com>によって追加されました。
March 22, 2013 FreeBSD