LLC-prefetch-misses perf 事件的含义是什么

Ori*_*kis 5 linux caching prefetch perf

我正在尝试了解LLC-prefetch-missesSandy Bridge 性能事件的含义。

\n

从linux内核源代码我看到了事件的定义:

\n
[ C(OP_PREFETCH) ] = {\n    [ C(RESULT_ACCESS) ] = SNB_DMND_PREFETCH|SNB_L3_ACCESS,\n    [ C(RESULT_MISS)   ] = SNB_DMND_PREFETCH|SNB_L3_MISS,\n},\n
Run Code Online (Sandbox Code Playgroud)\n

其中:\nSNB_DMND_PREFETCH = (SNB_PF_DATA_RD|SNB_PF_RFO)指向事件寄存器的位 4-5,而\nSNB_L3_MISS = (SNB_DRAM_ANY|SNB_NON_DRAM)指向事件寄存器的位 22-36。

\n

阅读Intel\xc2\xae 64 and IA-32 Architectures Software Developer\xe2\x80\x99s Manual,第 3 卷,第 18.3.4.5 章,我发现:

\n

SNB_DMND_PREFETCH代表事件寄存器的“Request_Type”字段和SNB_L3_MISS“Response_Type”字段MSR_OFFCORE_RSP_x

\n

要求:

\n

在此输入图像描述

\n

回复:

\n

在此输入图像描述\n在此输入图像描述

\n

但是,我无法理解预取上下文中“响应”的含义。

\n

此外,我在一些课程幻灯片中发现了这个定义:

\n

Prefetch Hit: Prefetched line that was hit in the cache before being replaced (miss avoided)

\n

Prefetch Miss: Prefetched line that was replaced before being accessed

\n

LLC-prefetch关于事件的意义有什么建议吗LLC-prefetch-misses?上述定义是否相关?

\n

谢谢。

\n

Had*_*ais 2

LLC-prefetch-misses当目标缓存行不是由 CPU 缓存提供时,任何类型(DATA_RD 或 RFO)的 L2 硬件预取都会发生该事件。仅当目标行不存在于处于所需一致性状态的同一 L2 缓存中时(对于 RFO 预取为 E 或 M,对于 DATA_RD 预取为 S),才会生成 L2 硬件预取。

处理预取事务可能需要窥探同一 NUMA 域中的其他核心的私有高速缓存或窥探其他 NUMA 域中的高速缓存。事件定义中的标志SNB_DRAM_ANY表示该事件包括所有窥探情况。事件类型的唯一两个要求LLC-prefetch-misses是它是 L2 硬件预取请求并且提供者不是 CPU 缓存。这种情况下的供应商通常是本地或远程 DRAM 控制器。

该事件LLC-prefetch是包容性的LLC-prefetch-misses,因为它包括供应商是 CPU 数据缓存(L3、L2 或 L1D)的情况。在 L3 中命中的 L2 预取由 计数,LLC-prefetch但不由 计数LLC-prefetch-misses。计数LLC-prefetch至少一样大LLC-prefetch-misses