【问题标题】:Performance Counters and IMC Counter Not Matching性能计数器和 IMC 计数器不匹配
【发布时间】:2021-08-03 09:43:24
【问题描述】:

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

这两个值似乎一致,因为后者排除 预取请求和那些以@987654334为目标的请求@。但它们确实IMC 中的读取计数器匹配。此计数器称为UNC_IMC_DRAM_DATA_READS,并记录在案here。我阅读计数器重读1 秒后。差异在30,000,000 (EDITED) 左右。如果 乘以 10(估计 10 秒),结果值将在 300 百万 (EDITED) 左右,即 100 times 上述性能计数器(EDITED)的值。它在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_WRITESUNC_IMC_DRAM_IO_REQUESTS计算。似乎 分类IO 的请求将 成为 READWRITE。换句话说,在描述的一秒间隔内,几乎(由于不准确报告in the above-mentioned doc2.01GB 2.42GB READWRITE请求属于IO。根据this的解释,上面的三个列似乎一致彼此。

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

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


更新 2:

我认为IO 列存在错误。它总是[1.99,2.01] 范围内,无论系统中的负载量如何!


更新 3:

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

【问题讨论】:

  • 为什么要显示perf 的两个不同运行(来自不同的时间间隔),而不是像-e foo,bar-e foo -e bar 那样对同一运行使用两个事件?大概有一个 10 秒的间隔与另一个类似,但没有必要假设,这会使您的问题更加紧凑。

标签: linux-kernel performancecounter perf memory-access intel-pmu


【解决方案1】:

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

【讨论】:

  • iGPU 可能正在利用 L3 缓存。总之,很有趣;让屏幕进入睡眠状态可能会进一步减少竞争。 (例如sleep 0.4; xset dpms force off 让您有机会在 xset 运行之前释放输入,让intel_gpu_top -l 在监视器关闭时产生一些行)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多