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

名称

pmc.coreIntel Core Solo と Core Duo ファミリ CPU のための測定イベント

ライブラリ

Performance Counters Library (libpmc, -lpmc)

書式

#include < pmc.h>

解説

Intel Core Solo と Core Duo CPU は、 Intel 性能測定アーキテクチャのバージョン 1 に準拠した PMC を含んでいます。

これらの PMC は、次に文書化されています。 IA-32 Intel® Architecture Software Developer's Manual, Volume 3: System Programming Guide, Order Number 253669-027US, Intel Corporation, July 2008.

PMC 機能

Intel 性能測定アーキテクチャのバージョン 1 に準拠している CPU は、クラス PMC_CLASS_IAP の 2 プログラマブル PMC を含んでいます。 PMC は、40 ビット幅であり、次のケーパビリティを提供します:
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 のためのイベント指定子は、次の共通の修飾子をサポートしています:
cmask= value
1 つのサイクルで測定される設定されたイベントの数が、 value 以上の場合のみ、増加するように PMC を設定します。
edge
他の修飾子によって表現された状態のアサートされた遷移をアサート停止する数をカウントするように PMC を設定します。指定されているなら、状態が真のままで残っている間クロックの数にかかわらず、状態が真になるときはいつも、カウンタは一度だけ増加します。
inv
cmask”修飾子が存在しているとき、比較の意味を逆にし、サイクルごとのイベントの数が、“ cmask”修飾子によって指定された値より小さいときに、カウンタを増加します。
os
特権レベル 0 で起こるイベントをカウントするように、PMC を設定します。
usr
特権レベル 1, 2 または 3 で起こるイベントをカウントするように、 PMC を設定します。

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

コア特異性が指定されることを必要とするイベントは、追加の修飾子“ core=value”を使用します、ここで、引数 value は、次の 1 つです:

all
すべてのコアでイベント状態を測定します。
this
このコアでイベント状態を測定します。
 

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

エージェントの修飾子が指定されることを必要とするイベントは、追加の修飾子“ agent=value”を使用します、ここで、引数 value は、次の 1 つです:

this
このバスエージェントに関連しているイベントを測定します。
any
任意のバスエージェントによって引き起こされたイベントを測定します。
 

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

ハードウェアプリフェッチ修飾子が指定されることを必要とするイベントは、追加の修飾子“ prefetch=value”を使用します、ここで、引数 value は、次の 1 つです:

both
すべてのプリフェッチを含めます。
only
ハードウェアプリフェッチのみをカウントします。
exclude
ハードウェアプリフェッチを除きます。
 

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

キャッシュコヒーレンス (一貫性) 修飾子が指定されることを必要とするイベントは、追加の修飾子“ cachestate=value”を使用します、ここで、引数 value 次の文字の 1 つ以上を含みます:

e
排他的な状態でキャッシュ線をカウントします。
i
無効の状態でキャッシュ線をカウントします。
m
変更された状態でキャッシュ線をカウントします。
s
共有された状態でキャッシュ線をカウントします。
 

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

イベント指定子

次のイベント名は、大文字と小文字を区別しません。これらの名前中の空白類、ハイフンと下線文字は、無視されます。

Core PMC は、次のイベントをサポートします:

BAClears
(Event E6H, Umask 00H) アサートされた BAClear 状態の数。
BTB_Misses
(Event E2H, Umask 00H) 分岐テーブルバッファが予測を生じなかった分岐の数。
Br_BAC_Missp_Exec
(Event 8AH, Umask 00H) フロントエンドで予測ミスされ実行された分岐命令の数。
Br_Bogus
(Event E4H, Umask 00H) 偽の分岐の数。
Br_Call_Exec
(Event 92H, Umask 00H) 実行された CALL 命令の数。
Br_Call_Missp_Exec
(Event 93H, Umask 00H) 予測ミスされ実行された CALL 命令の数。
Br_Cnd_Exec
(Event 8BH, Umask 00H) 実行された条件分岐命令の数。
Br_Cnd_Missp_Exec
(Event 8CH, Umask 00H) 予測ミスされ実行された条件分岐命令の数。
Br_Ind_Call_Exec
(Event 94H, Umask 00H) 実行された間接 CALL 命令の数。
Br_Ind_Exec
(Event 8DH, Umask 00H) 実行された間接分岐の数。
Br_Ind_Missp_Exec
(Event 8EH, Umask 00H) 予測ミスされ実行された間接分岐命令の数。
Br_Inst_Exec
(Event 88H, Umask 00H) 投機的な分岐を含む実行された分岐命令の数。
Br_Instr_Decoded
(Event E0H, Umask 00H) デコードされた分岐命令の数。
Br_Instr_Ret
(Event C4H, Umask 00H) (Alias “Branch Instruction Retired”) リタイアされた分岐命令の数。これは、アーキテクチャの性能イベントです。
Br_MisPred_Ret
(Event C5H, Umask 00H) (Alias “Branch Misses Retired”) リタイアされ予測ミスされた分岐命令の数。これは、アーキテクチャの性能イベントです。
Br_MisPred_Taken_Ret
(Event CAH, Umask 00H) リタイアされ取られた予測ミスされた分岐の数。
Br_Missp_Exec
(Event 89H, Umask 00H) 予測されなかった分岐を含む実行で、実行され予測ミスされた分岐命令の数。
Br_Ret_BAC_Missp_Exec
(Event 91H, Umask 00H) フロントエンドで予測ミスされた return 分岐命令の数。
Br_Ret_Exec
(Event 8FH, Umask 00H) 実行された return 分岐命令の数。
Br_Ret_Missp_Exec
(Event 90H, Umask 00H) 予測ミスされた実行された return 分岐命令の数。
Br_Taken_Ret
(Event C9H, Umask 00H) リタイアされ取られた分岐の数。
Bus_BNR_Clocks
(Event 61H, Umask 00H) BNR (bus not ready) がアサートされた間の外部バスサイクルの数。
Bus_DRDY_Clocks [ ,agent= agent]
(Event 62H, Umask 00H) DRDY がアサートされた間の外部バスサイクルの数。
Bus_Data_Rcv
(Event 64H, Umask 40H) プロセッサがデータの受け取りでビジー (busy) である間のサイクル数。
Bus_Locks_Clocks [ ,core= core]
(Event 63H) バスロックシグナルがアサートされた間の外部バスサイクルの数。
Bus_Not_In_Use [ ,core= core]
(Event 7DH) コアからのトランザクションがないときのサイクルの数。
Bus_Req_Outstanding [ ,agent= agent][ ,core= core]
(Event 60H) データキャッシュユニットまたはハードウェアプリフェッチャからの要求を読み込むキャッシュ可能なバスデータの負荷のあるサイクル。
Bus_Snoop_Stall
(Event 7EH, Umask 00H) バス snoop がストールされる間のバスサイクルの数。
Bus_Snoops [ ,agent= agent][ ,cachestate= mesi]
(Event 77H) バストランザクションへの snoop 応答の数。
Bus_Trans_Any [ ,agent= agent]
(Event 70H) 完了したバストランザクションの数。
Bus_Trans_Brd [ ,core= core]
(Event 65H) 読み込みバストランザクションの数。
Bus_Trans_Burst [ ,agent= agent]
(Event 6EH) 完了したバーストトランザクションの数。リタイアされたトランザクションは、2 回以上カウントされるかもしれません。
Bus_Trans_Def [ ,core= core]
(Event 6DH) 完了した延期されたトランザクションの数。
Bus_Trans_IO [ ,agent= agent][ ,core= core]
(Event 6CH) 読み込みと書き込みの両方をカウントする完了した I/O トランザクションの数。
Bus_Trans_Ifetch [ ,agent= agent][ ,core= core]
(Event 68H) 完了した命令フェッチトランザクション。
Bus_Trans_Inval [ ,agent= agent][ ,core= core]
(Event 69H) 完了した無効のトランザクションの数。
Bus_Trans_Mem [ ,agent= agent]
(Event 6FH) 完了したメモリトランザクションの数。
Bus_Trans_P [ ,agent= agent][ ,core= core]
(Event 6BH) 完了した部分的なトランザクションの数。
Bus_Trans_Pwr [ ,agent= agent][ ,core= core]
(Event 6AH) 完了した部分的な書き込みトランザクションの数。
Bus_Trans_RFO [ ,agent= agent][ ,core= core]
(Event 66H) 完了した read-for-ownership (所有権のための読み込み) トランザクションの数。
Bus_Trans_WB [ ,agent= agent]
(Event 67H) L2 書き戻し (writeback) を除いた、データキャッシュユニットからの完了した書き戻しトランザクションの数。
Cycles_Div_Busy
(Event 14H, Umask 00H) デバイダ (divider) がビジーであるサイクルの数。このイベントは、PMC0 だけで利用可能です。
Cycles_Int_Masked
(Event C6H, Umask 00H) 割り込みが無効にされた間のサイクルの数。
Cycles_Int_Pending_Masked
(Event C7H, Umask 00H) 割り込みが無効にされ、割り込みが保留中 (pending) である間のサイクルの数。
DCU_Snoop_To_Share [ ,core=core]
(Event 78H) 共有された状態の L1 キャッシュ線へのデータキャッシュユニット snoop の数。
DCache_Cache_Lock [ ,cachestate= mesi]
(Event 42H) 無効の状態にされたキャッシュ可能なロックされた読み込み操作の数。
DCache_Cache_LD [ ,cachestate= mesi]
(Event 40H) キャッシュ可能な L1 データ読み込み操作の数。
DCache_Cache_ST [ ,cachestate= mesi]
(Event 41H) キャッシュ可能な L1 データ書き込み操作の数。
DCache_M_Evict
(Event 47H, Umask 00H) 退去された M 状態のデータキャッシュ線の数。
DCache_M_Repl
(Event 46H, Umask 00H) 割り付けられた M 状態のデータキャッシュ線の数。
DCache_Pend_Miss
(Event 48H, Umask 00H) 負荷のあるサイクル L1 ミスは、未解決 (outstanding) でした。
DCache_Repl
(Event 45H, Umask 0FH) データキャッシュ線の置換の数。
Data_Mem_Cache_Ref
(Event 44H, Umask 02H) L1 データキャッシュへのキャッシュ可能な読み込みと書き込み操作の数。
Data_Mem_Ref
(Event 43H, Umask 01H) キャッシュ可能とキャッシュ不可能の両方の L1 データ読み込みと書き込みの数。
Dbus_Busy [ ,core= core]
(Event 22H) データバスがビジーであった間のコアサイクルの数。
Dbus_Busy_Rd [ ,core= core]
(Event 23H) データバスがデータをコアへ移送することがビジーであった間のサイクルの数。
Div
(Event 13H, Umask 00H) 整数と浮動小数点除算のための投機的な操作を含む除算操作の数。このイベントは、PMC1 だけでカウントされます。
Dtlb_Miss
(Event 49H, Umask 00H) ミスされた TLB のデータ参照の数。
ESP_Uops
(Event D7H, Umask 00H) デコードされた ESP 折り畳み命令の数。
EST_Trans [ ,trans= transition]
(Event 3AH) Intel Enhanced SpeedStep 遷移の数をカウントします。引数 transition は、次の値の 1 つを指定できます:
any
(Umask 00H) すべての遷移をカウントします。
frequency
(Umask 01H) 頻繁な遷移をカウントします。
デフォルトは、“ any”です。
FP_Assist
(Event 11H, Umask 00H) マイクロコードの補助を必要とした浮動小数点操作の数。このイベントは、PMC1 だけで利用可能です。
FP_Comp_Instr_Ret
(Event C1H, Umask 00H) リタイアされた X87 浮動小数点計算命令の数。このイベントは、PMC0 だけで利用可能です。
FP_Comps_Op_Exe
(Event 10H, Umask 00H) 実行された浮動小数点計算命令の数。
FP_MMX_Trans
(Event CCH, Umask 01H) X87 から MMX までの遷移の数。
Fused_Ld_Uops_Ret
(Event DAH, Umask 01H) リタイアされ融合された (fused) ロード uops の数。
Fused_St_Uops_Ret
(Event DAH, Umask 02H) リタイアされ融合された (fused) 格納 uops の数。
Fused_Uops_Ret
(Event DAH, Umask 00H) リタイアされ融合された (fused) uops の数。
HW_Int_Rx
(Event C8H, Umask 00H) リタイアされたハードウェア割り込みの数。
ICache_Misses
(Event 81H, Umask 00H) 命令キャッシュとストリーミングバッファでミスされた命令フェッチの数。
ICache_Reads
(Event 80H, Umask 00H) キャッシュ可能とキャッシュ不可能なフェッチをカウントする命令キャッシュとストリーミングバッファからの命令フェッチの数。
IFU_Mem_Stall
(Event 86H, Umask 00H) メモリからのデータを待っている間に命令フェッチユニットがストールされたサイクルの数。
ILD_Stall
(Event 87H, Umask 00H) ストールした命令長さデコーダの数。
ITLB_Misses
(Event 85H, Umask 00H) 命令 TLB ミスの数。
Instr_Decoded
(Event D0H, Umask 00H) デコードされた命令の数。
Instr_Ret
(Event C0H, Umask 00H) (Alias “Instruction Retired”) リタイアされた命令の数。これは、アーキテクチャの性能イベントです。
L1_Pref_Req
(Event 4FH, Umask 00H) データキャッシュミスのための L1 プリフェッチ要求の数。
L2_ADS [ ,core=core]
(Event 21H) L2 アドレスストローブ (strobe) の数。
L2_IFetch [ ,cachestate= mesi][ ,core= core]
(Event 28H) 投機的なフェッチを含む L2 キャッシュからの命令フェッチユニットによってフェッチされた命令の数。
L2_LD [ ,cachestate= mesi][ ,core= core]
(Event 29H) L2 キャッシュ読み込みの数。
L2_Lines_In [ ,core= core][ ,prefetch= prefetch]
(Event 24H) 割り付けられた L2 キャッシュ線の数。
L2_Lines_Out [ ,core= core][ ,prefetch= prefetch]
(Event 26H) 退去された L2 キャッシュ線の数。
L2_M_Lines_In [ ,core= core]
(Event 25H) 割り付けられた L2M 状態キャッシュ線の数。
L2_M_Lines_Out [ ,core= core][ ,prefetch= prefetch]
(Event 27H) 退去された L2 M 状態キャッシュ線の数。
L2_No_Request_Cycles [ ,cachestate= mesi][ ,core= core][ ,prefetch= prefetch]
(Event 32H) L2 キャッシュをアクセスする要求がなかったサイクルの数。
L2_Reject_Cycles [ ,cachestate= mesi][ ,core= core][ ,prefetch= prefetch]
(Event 30H) L2 キャッシュがビジーで新しい要求を拒絶するサイクルの数。
L2_Rqsts [ ,cachestate= mesi][ ,core= core][ ,prefetch= prefetch]
(Event 2EH) L2 キャッシュ要求の数。
L2_ST [ ,cachestate= mesi][ ,core= core]
(Event 2AH) 投機的な書き込みを含む L2 キャッシュ書き込みの数。
LD_Blocks
(Event 03H, Umask 00H) バッファブロックを格納するため遅延されたロード操作の数。
LLC_Misses
(Event 2EH, Umask 41H) ハードウェアプリフェッチのためのミスを除いて、最後のレベルのキャッシュへの参照のためのキャッシュミスの数。これは、アーキテクチャの性能イベントです。
LLC_Reference
(Event 2EH, Umask 4FH) ハードウェアプリフェッチのための参照を除いて、最後のレベルのキャッシュへの参照の数。これは、アーキテクチャの性能イベントです。
MMX_Assist
(Event CDH, Umask 00H) 実行された EMMX 命令の数。
MMX_FP_Trans
(Event CCH, Umask 00H) MMX から X87 までの遷移の数。
MMX_Instr_Exec
(Event B0H, Umask 00H) MOVQMOVD 格納を除いて、実行された MMX 命令の数。
MMX_Instr_Ret
(Event CEH, Umask 00H) リタイアされた MMX 命令の数。
Misalign_Mem_Ref
(Event 05H, Umask 00H) 整列ミスされたデータメモリ参照、ロードと格納のカウントの数。
Mul
(Event 12H, Umask 00H) 投機的な浮動小数点と整数の乗算を含む乗算操作の数。このイベントは、PMC1 だけで利用可能です。
NonHlt_Ref_Cycles
(Event 3CH, Umask 01H) (Alias “Unhalted Reference Cycles”) 停止していないバスサイクルの数。これは、アーキテクチャの性能イベントです。
Pref_Rqsts_Dn
(Event F8H, Umask 00H) 後方のストリームで発行されたハードウェアプリフェッチ要求の数。
Pref_Rqsts_Up
(Event F0H, Umask 00H) 前方のストリームで発行されたハードウェアプリフェッチ要求の数。
Resource_Stall
(Event A2H, Umask 00H) リソース関連のストールがあるところでのサイクル数。
SD_Drains
(Event 04H, Umask 00H) 格納バッファがあふれる間のサイクルの数。
SIMD_FP_DP_P_Ret
(Event D8H, Umask 02H) リタイアされた SSE/SSE2 パックされた倍精度命令の数。
SIMD_FP_DP_P_Comp_Ret
(Event D9H, Umask 02H) リタイアされた SSE/SSE2 パックされた倍精度計算命令の数。
SIMD_FP_DP_S_Ret
(Event D8H, Umask 03H) リタイアされた SSE/SSE2 のスカラ倍精度命令の数。
SIMD_FP_DP_S_Comp_Ret
(Event D9H, Umask 03H) リタイアされた SSE/SSE2 スカラ倍精度計算命令の数。
SIMD_FP_SP_P_Comp_Ret
(Event D9H, Umask 00H) リタイアされた SSE/SSE2 パックされた単精度計算命令の数。
SIMD_FP_SP_Ret
(Event D8H, Umask 00H) パックされたものとスカラの両方の、リタイアされた SSE/SSE2 スカラ単精度命令の数。
SIMD_FP_SP_S_Ret
(Event D8H, Umask 01H) リタイアされた SSE/SSE2 スカラの単精度命令の数。
SIMD_FP_SP_S_Comp_Ret
(Event D9H, Umask 01H) リタイアされた SSE/SSE2 単精度計算命令の数。
SIMD_Int_128_Ret
(Event D8H, Umask 04H) リタイアされた SSE2 128 ビット整数命令の数。
SIMD_Int_Pari_Exec
(Event B3H, Umask 20H) 実行された SIMD 整数パックされた算術命令の数。
SIMD_Int_Pck_Exec
(Event B3H, Umask 04H) 実行された SIMD 整数パックされた操作命令の数。
SIMD_Int_Plog_Exec
(Event B3H, Umask 10H) 実行された SIMD 整数パックされた論理命令の数。
SIMD_Int_Pmul_Exec
(Event B3H, Umask 01H) 実行された SIMD 整数パックされた乗算命令の数。
SIMD_Int_Psft_Exec
(Event B3H, Umask 02H) 実行された SIMD 整数パックされたシフト命令の数。
SIMD_Int_Sat_Exec
(Event B1H, Umask 00H) 実行された SIMD 整数飽和 (saturate) 命令の数。
SIMD_Int_Upck_Exec
(Event B3H, Umask 08H) 実行された SIMD 整数アンパックされた命令の数。
SMC_Detected
(Event C3H, Umask 00H) 検出された自己変更コードの回数。
SSE_NTStores_Miss
(Event 4BH, Umask 03H) すべてのキャッシュをミスした SSE ストリーミング格納命令の回数。
SSE_NTStores_Ret
(Event 07H, Umask 03H) 実行された SSE ストリーミング格納命令の数。
SSE_PrefNta_Miss
(Event 4BH, Umask 00H) すべてのキャッシュをミスした PREFETCHNTA の回数。
SSE_PrefNta_Ret
(Event 07H, Umask 00H) リタイアされた PREFETCHNTA 命令の数。
SSE_PrefT1_Miss
(Event 4BH, Umask 01H) すべてのキャッシュをミスした PREFETCHT1 の回数。
SSE_PrefT1_Ret
(Event 07H, Umask 01H) リタイアされた PREFETCHT1 命令の数。
SSE_PrefT2_Miss
(Event 4BH, Umask 02H) すべてのキャッシュをミスした PREFETCHNT2 の回数。
SSE_PrefT2_Ret
(Event 07H, Umask 02H) リタイアされた PREFETCHT2 命令の数。
Seg_Reg_Loads
(Event 06H, Umask 00H) セグメントレジスタロードの数。
Serial_Execution_Cycles
(Event 3CH, Umask 02H) 片方のコアが停止している間のこのコードの停止していないバスサイクルの数。
Thermal_Trip
(Event 3BH, Umask C0H) 現在のコアクロックに基づいている温度 trip (訳注: トラップの誤りか?) の持続時間。
Unfusion
(Event DBH, Umask 00H) 非融合イベントの数。
Unhalted_Core_Cycles
(Event 3CH, Umask 00H) 特定のコアでクロックシグナルが halt されないときのコアクロックサイクルの数。これは、アーキテクチャの性能イベントです。
Uops_Ret
(Event C2H, Umask 00H) リタイアされたマイクロオペレーション (micro-ops) の数。

イベント名の別名

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

プロセッサのエラッタ (訂正表)

次のエラッタ (訂正表) は、これらのプロセッサで性能測定に影響します。これらのエラッタは、次に文書化されています。 Intel® CoreTM Duo Processor and Intel® CoreTM Solo Processor on 65 nm Process, Specification Update, Order Number 309222-017, Intel Corporation, July 2008.
AE19
単一のコアでデータのプリフェッチ性能モニタリングイベントのみを有効にすることができます。
AE25
外部のバスイベントをカウントする性能モニタリングカウンタは、プロセッサの電源の状態が移行した後に、不正確な値を報告するかもしれません。
AE28
リタイアされた浮動小数点操作 (C1H) のための性能モニタリングイベントは、正確でないかもしれません。
AE29
MOVD/MOVQ/MOVNTQ メモリ格納命令での DR3 アドレス一致は、リタイアされた SIMD 命令 (Event CFH) のための性能モニタリングカウントを不正確に増加するかもしれません。
AE33
ハードウェアプリフェッチ性能モニタリングイベントは、不正確にカウントされるかもしれません。
AE36
プロセッサが C1/C2 プロセッサ電力状態であるとき、 CPU_CLK_UNHALTED 性能モニタリングイベント (Event 3CH) は、クロックをカウントします。
AE39
バスに関連する特定の性能モニタリングカウンタ、L2 キャッシュ、と電源管理は、不正確です。
AE51
リタイアされた命令 (Event C0H) のための性能モニタリングイベントは、正確でないかもしれません。
AE67
性能モニタリングイベント FP_ASSIST は、正確でないかもしれません。
AE78
ハードウェアプリフェッチ要求 (Event 4EH) とハードウェアプリフェッチ要求キャッシュミス (Event 4FH) のための性能モニタリングイベントは、正確でないかもしれません。
AE82
性能モニタリングイベント FP_MMX_TRANS_TO_MMX は、いくつかの遷移をカウントしないかもしれません。

歴史

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

作者

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