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

Performance Counters and IMC Counter Not Matching

我有一个 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

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


P.S.: 当系统有更多加载。

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


更新:

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

这是相关的 PCM 输出: READWRITEIO 列的值根据 UNC_IMC_DRAM_DATA_READSUNC_IMC_DRAM_DATA_WRITES 和 [=34] 计算 =],分别。似乎 分类IO 的请求将 分类为 READWRITE。换句话说,在 depicted 一秒的时间间隔内,almost(因为 不准确 报告 in the above-mentioned doc) 2.01GB of 2.42GB READ and WRITE requests 属于IO。根据这个的解释,以上三个列似乎一致

问题是 IMCPMC 值之间仍然存在 差距!

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


更新 2:

我认为 错误 IO 列。 总是 运行ge [1.99,2.01]中的东西,不管系统中的负载量如何!


更新 3:

运行级别1中,平均uops_retired.all事件在1 秒间隔15,000,000。在same期间,关联IMC计数器记录的read请求数约为30,000,000。换句话说,假设 所有 内存访问是由cpu 指令直接引起,对于 each 退休的微操作,存在 two 内存访问。这似乎 不可能 特别是关于存在 多个 级别缓存的事实。因此,在空闲场景中,访问可能是由IO引起 .

其实主要是GPU设备造成的。这就是从性能计数器中排除的原因。以下是 PCM 在具有 分辨率 3840x2160 相对空闲 系统上的示例执行的相关输出21=]刷新率 60 使用 xrandr 这是针对分辨率800x600和相同刷新率(即60)的情况: 可以看出,更改屏幕分辨率大大减少了 readIO traffic(超过 100x!).