解説
Intel Haswell CPU は、 Intel 性能測定アーキテクチャのバージョン 3 に準拠した PMC を含んでいます。これらの CPU は、2 つのクラスの PMC を含んでいます:
-
PMC_CLASS_UCF
-
1 つのカウンタごとに 1 つのハードウェアイベントだけカウントする固定関数カウンタ。
-
PMC_CLASS_UCP
-
定義されたハードウェアイベントのセットの 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 Developers Manual, Order Number: 325462-045US, Intel Corporation, January 2013.
HASWELL UNCORE 固定関数 PMC
これらの PMC とそれらのサポートイベントは、
pmc.ucf(3) に文書化されています。このファミリのすべての CPU が固定関数カウンタを実装しているというわけではありません。
HASWELL UNCORE プログラマブル PMC
プログラマブル PMC は、次のケーパビリティをサポートしています:
Capability |
Support |
PMC_CAP_CASCADE |
No |
PMC_CAP_EDGE |
Yes |
PMC_CAP_INTERRUPT |
No |
PMC_CAP_INVERT |
Yes |
PMC_CAP_READ |
Yes |
PMC_CAP_PRECISE |
No |
PMC_CAP_SYSTEM |
No |
PMC_CAP_TAGGING |
No |
PMC_CAP_THRESHOLD |
Yes |
PMC_CAP_USER |
No |
PMC_CAP_WRITE |
Yes |
イベント修飾子
これらの PMC のためのイベント指定子は、次の共通の修飾子をサポートしています:
-
cmask=
value
-
1 つのサイクルで測定される設定されたイベントの数が、
value 以上の場合のみ、増加するように PMC を設定します。
-
edge
-
他の修飾子によって表現された状態のアサートされた遷移をアサート停止する数をカウントするように PMC を設定します。指定されているなら、状態が真のままで残っている間クロックの数にかかわらず、状態が真になるときはいつも、カウンタは一度だけ増加します。
-
inv
-
“
cmask
”修飾子が存在しているとき、比較の意味を逆にし、サイクルごとのイベントの数が、“
cmask
”修飾子によって指定された値より小さいときに、カウンタを増加します。
イベント指定子 (プログラマブル PMC)
Haswell プログラマブル PMC は、次のイベントをサポートしています:
-
UNC_CBO_XSNP_RESPONSE.MISS
-
(Event 22H, Umask 01H) snoop は、いくつかのプロセッサコアで失敗します。
-
UNC_CBO_XSNP_RESPONSE.INVAL
-
(Event 22H, Umask 02H) snoop は、いくつかのプロセッサコアで修正されない線を無効にします。
-
UNC_CBO_XSNP_RESPONSE.HIT
-
(Event 22H, Umask 04H) snoop は、いくつかのプロセッサコアで修正されない線にヒットします。
-
UNC_CBO_XSNP_RESPONSE.HITM
-
(Event 22H, Umask 08H) snoop は、いくつかのプロセッサコアで修正された線にヒットします。
-
UNC_CBO_XSNP_RESPONSE.INVAL_M
-
(Event 22H, Umask 10H) snoop は、いくつかのプロセッサコアで修正された線を無効にします。
-
UNC_CBO_XSNP_RESPONSE.EXTERNAL_FILTER
-
(Event 22H, Umask 20H) 外部の snoop の要求のために、この Cbox によって開始されたクロスコア (cross-core) snoop をフィルタリングします。
-
UNC_CBO_XSNP_RESPONSE.XCORE_FILTER
-
(Event 22H, Umask 40H) プロセッサのコアメモリの要求のために、この Cbox によって開始されたクロスコア (cross-core) snoop をフィルタリングします。
-
UNC_CBO_XSNP_RESPONSE.EVICTION_FILTER
-
(Event 22H, Umask 80H) LLC 立ち退きのために、この Cbox によって開始されたクロスコア (cross-core) snoop をフィルタリングします。
-
UNC_CBO_CACHE_LOOKUP.M
-
(Event 34H, Umask 01H) キャッシュをアクセスし、M 状態の線を見つける LLC 検索要求。
-
UNC_CBO_CACHE_LOOKUP.ES
-
(Event 34H, Umask 06H) キャッシュをアクセスし、E または S 状態の線を見つける LLC 検索要求。
-
UNC_CBO_CACHE_LOOKUP.I
-
(Event 34H, Umask 08H) キャッシュをアクセスし、I 状態の線を見つける LLC 検索要求。
-
UNC_CBO_CACHE_LOOKUP.READ_FILTER
-
(Event 34H, Umask 10H) キャッシュ可能な読み込み要求を開始するプロセッサのコアでフィルタリングします。 01H、02H、04H、08H の少なくとも 1 つと組み合わせなければなりません。
-
UNC_CBO_CACHE_LOOKUP.WRITE_FILTER
-
(Event 34H, Umask 20H) キャッシュ可能な書き込み要求を開始するプロセッサのコアでフィルタリングします。 01H、02H、04H、08H の少なくとも 1 つと組み合わせなければなりません。
-
UNC_CBO_CACHE_LOOKUP.EXTSNP_FILTER
-
(Event 34H, Umask 40H) 外部 snoop 要求でフィルタリングします。 01H、02H、04H、08H の少なくとも 1 つと組み合わせなければなりません。
-
UNC_CBO_CACHE_LOOKUP.ANY_REQUEST_FILTER
-
(Event 34H, Umask 80H) キャッシュ不可能、一貫性のない要求を含んで、あらゆる IRQ または IPQ の開始された要求でフィルタリングします。 01H、02H、04H、08H の少なくとも 1 つと組み合わせなければなりません。
-
UNC_ARB_TRK_OCCUPANCY.ALL
-
(Event 80H, Umask 01H) メモリコントローラから返るデータを待つ要求の数によって重みつけられたサイクルをカウントします。 IA コア、プロセッサのグラフィックユニットまたは LLC によって開始された一貫性ある要求と一貫性のない要求を計上します。
-
UNC_ARB_TRK_REQUEST.ALL
-
(Event 81H, Umask 01H) IA コア、プロセッサのグラフィックユニットまたは LLC によって開始された一貫性ある要求と一貫性のない要求をカウントします。
-
UNC_ARB_TRK_REQUEST.WRITES
-
(Event 81H, Umask 20H) 全部、一部分と LLC 追い立て (eviction) を含んで割り付けられた書き込みエントリの数をカウントします。
-
UNC_ARB_TRK_REQUEST.EVICTIONS
-
(Event 81H, Umask 80H) 割り付けられた LLC 追い立て (eviction) の数をカウントします。
-
UNC_ARB_COH
,
Umask TRK_OCCUPANCY.ALL
-
(Event 83H, Umask 01H) Coherency Tracker の保留中の要求の数によって重みつけられたサイクル。
-
UNC_ARB_COH
,
Umask TRK_REQUEST.ALL
-
(Event 84H, Umask 01H) Coherency Tracker で割り付けられた要求のの数。