问题描述
我有一个 Intel(R) Core(TM) i7-4720HQ cpu @ 2.60GHz
(Haswell
) 处理器。在相对空闲的情况下,我运行了以下 Perf
命令并显示了它们的输出,下面。计数器是 offcore_response.all_data_rd.l3_miss.any_response
和 mem_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
并记录为 here。 UNC_IMC_DRAM_DATA_READS
秒后,我阅读计数器重读。差异大约是 1
(EDITED)。如果乘以 30,000,000
(估计 10
秒),结果值将约为 10
百万 (EDITED),即是上述性能计数器(已编辑)的300
倍值。它无处接近 100
百万!我缺少什么?
P.S.:当系统具有更多负载时,差异小得多(但仍然很大)。
更新:
这是相关的 PCM
输出:
IMC
、READ
和 WRITE
列的值根据 IO
、UNC_IMC_DRAM_DATA_READS
和 UNC_IMC_DRAM_DATA_WRITES
计算,分别。似乎请求分类为UNC_IMC_DRAM_IO_REQUESTS
将成为 IO
或 READ
。换句话说,在描述一秒间隔内,几乎(因为不准确报告了in the above-mentioned doc)WRITE
GB of 2.01
GB 2.42
和 READ
请求 属于 WRITE
。根据这个的解释,上面的三列看起来彼此一致。
问题在于 IO
和 IMC
值之间仍然存在LARGE 差距!
当我以运行级别 PMC
启动时,情况与相同。调度程序上的进程是 1
、swapper
和 kworker
之一。 磁盘 IO 几乎是 migration
KB/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 (将#修改为@)