性能计数器和 IMC 计数器不匹配

问题描述

我有一个 Intel(R) Core(TM) i7-4720HQ cpu @ 2.60GHz (Haswell) 处理器。在相对空闲的情况下,我运行了以下 Perf 命令并显示了它们的输出下面。计数器是 offcore_response.all_data_rd.l3_miss.any_responsemem_load_uops_retired.l3_miss

sudo perf stat -a -e offcore_response.all_data_rd.l3_miss.any_response,mem_load_uops_retired.l3_miss sleep 10

 Performance counter stats for 'system wide':

     3,713,037      offcore_response.all_data_rd.l3_miss.any_response                                   

     2,909,573      mem_load_uops_retired.l3_miss


  10.016644133 seconds time elapsed

这两个值似乎一致,因为后者排除预取请求和那些针对{{ 1}}。但它们确实匹配 DRAM 中的读取计数器。此计数器称为 IMC 并记录为 hereUNC_IMC_DRAM_DATA_READS 秒后,我阅读计数器重读。差异大约是 1 (EDITED)。如果乘以 30,000,000(估计 10 秒),结果值将约为 10 百万 (EDITED),即是上述性能计数器(已编辑)300值。它无处接近 100 百万!我缺少什么


P.S.:当系统具有更多负载时,差异小得多(但仍然很大)。

这里也有人问了这个问题: https://community.intel.com/t5/Software-Tuning-Performance/Performance-Counters-and-IMC-Counter-Not-Matching/m-p/1288832


更新:

请注意,PCM 输出与我的 3 计数器读数相匹配。

这是相关的 PCM 输出

enter image description here

IMCREADWRITE 列的值根据 IOUNC_IMC_DRAM_DATA_READSUNC_IMC_DRAM_DATA_WRITES 计算,分别。似乎请求分类UNC_IMC_DRAM_IO_REQUESTS成为 IOREAD。换句话说,在描述一秒间隔内,几乎(因为不准确报告了in the above-mentioned docWRITE GB of 2.01GB 2.42READ 请求 属于 WRITE。根据这个的解释,上面的三列看起来彼此一致

问题在于 IOIMC 值之间仍然存在LARGE 差距!

当我以运行级别 PMC 启动时,情况与相同。调度程序上的进程 1swapperkworker 之一。 磁盘 IO 几乎是 migrationKB/s。我想知道是什么导致了如此(相对)巨大85。是否可以检测(例如,使用IO工具)?


更新 2:

我认为 counter 列存在错误。它总是IO范围内,不管系统中的负载量如何!


更新 3:

运行级别 [1.99,2.01] 中,1 秒间隔内 1 事件的平均出现次数uops_retired.all。在同一期间,相关15,000计数器记录的读取请求数量约为IMC。换句话说,假设所有内存访问都是由cpu指令直接引起的,对于每个退休的微操作,存在两次内存访问。这似乎不可能,特别是关于存在多级缓存的事实。因此,在空闲场景中,访问可能是由30,000引起的。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)