性能计数器和 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_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
这两个值似乎一致,因为后者排除 prefetch 请求和那些不 针对 DRAM
。但它们 不 匹配 IMC
中的读取计数器。此计数器称为 UNC_IMC_DRAM_DATA_READS
并记录在案 here。我 读取 计数器 重读 它 1
秒后。差异大约是 30,000,000
(EDITED)。如果乘乘以10
(估计10
秒),结果值将约为300
百万(已编辑),这是 100
倍 上述 性能计数器的值 (已编辑) 。 无处接近3
百万!我缺少什么?
P.S.: 当系统有更多加载。
更新:
请注意 PCM
输出与我的 IMC
计数器读数匹配。
这是相关的 PCM
输出:
READ
、WRITE
和 IO
列的值根据 UNC_IMC_DRAM_DATA_READS
、UNC_IMC_DRAM_DATA_WRITES
和 [=34] 计算 =],分别。似乎 分类 为 IO
的请求将 分类为 READ
或 WRITE
。换句话说,在 depicted 一秒的时间间隔内,almost(因为 不准确 报告 in the above-mentioned doc) 2.01
GB of 2.42
GB READ
and WRITE
requests 属于 到 IO
。根据这个的解释,以上三个列似乎一致。
问题是 IMC
和 PMC
值之间仍然存在 大 差距!
当我在运行级别 1
中启动时,情况与相同。调度程序上的 进程 是 swapper
、kworker
和 migration
之一。 磁盘IO几乎85
KB/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
)的情况:
可以看出,更改屏幕分辨率大大减少了 read 和 IO traffic(超过 100x
!).
我有一个 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
这两个值似乎一致,因为后者排除 prefetch 请求和那些不 针对 DRAM
。但它们 不 匹配 IMC
中的读取计数器。此计数器称为 UNC_IMC_DRAM_DATA_READS
并记录在案 here。我 读取 计数器 重读 它 1
秒后。差异大约是 30,000,000
(EDITED)。如果乘乘以10
(估计10
秒),结果值将约为300
百万(已编辑),这是 100
倍 上述 性能计数器的值 (已编辑) 。 无处接近3
百万!我缺少什么?
P.S.: 当系统有更多加载。
更新:
请注意 PCM
输出与我的 IMC
计数器读数匹配。
这是相关的 PCM
输出:
READ
、WRITE
和 IO
列的值根据 UNC_IMC_DRAM_DATA_READS
、UNC_IMC_DRAM_DATA_WRITES
和 [=34] 计算 =],分别。似乎 分类 为 IO
的请求将 分类为 READ
或 WRITE
。换句话说,在 depicted 一秒的时间间隔内,almost(因为 不准确 报告 in the above-mentioned doc) 2.01
GB of 2.42
GB READ
and WRITE
requests 属于 到 IO
。根据这个的解释,以上三个列似乎一致。
问题是 IMC
和 PMC
值之间仍然存在 大 差距!
当我在运行级别 1
中启动时,情况与相同。调度程序上的 进程 是 swapper
、kworker
和 migration
之一。 磁盘IO几乎85
KB/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
)的情况:
100x
!).