gpt4 book ai didi

linux - PERF STAT 不计算内存加载但计算内存存储

转载 作者:IT王子 更新时间:2023-10-29 00:31:33 25 4
gpt4 key购买 nike

Linux 内核:4.10.0-20-generic(也在 4.11.3 上试过)

Ubuntu:17.04

我一直在尝试使用 perf stat 收集内存访问的统计信息。我能够收集内存存储的统计数据,但内存加载的计数返回 0 值

以下是内存存储的详细信息:-

perf stat -e cpu/mem-stores/u ./libquantum_base.arnab 100
N = 100, 37 qubits required
Random seed: 33
Measured 3277 (0.200012), fractional approximation is 1/5.
Odd denominator, trying to expand by 2.
Possible period is 10.
100 = 4 * 25

Performance counter stats for './libquantum_base.arnab 100':

158,115,510 cpu/mem-stores/u

0.559922797 seconds time elapsed

对于内存负载,我计数为 0,如下所示:-

perf stat -e cpu/mem-loads/u ./libquantum_base.arnab 100
N = 100, 37 qubits required
Random seed: 33
Measured 3277 (0.200012), fractional approximation is 1/5.
Odd denominator, trying to expand by 2.
Possible period is 10.
100 = 4 * 25

Performance counter stats for './libquantum_base.arnab 100':

0 cpu/mem-loads/u

0.563806170 seconds time elapsed

我不明白为什么这不算正确。 我是否应该以任何方式使用不同的事件来获取正确的数据

最佳答案

mem-loads 事件映射到 Intel 处理器上的 MEM_TRANS_RETIRED.LOAD_LATENCY_GT_3 性能监控单元事件。 MEM_TRANS_RETIRED.LOAD_LATENCY_* 事件比较特殊,只能使用 p 修饰符进行计数。也就是说,您必须指定 mem-loads:p 才能正确使用事件。

MEM_TRANS_RETIRED.LOAD_LATENCY_* 是一个精确事件,只有在精确级别进行计数才有意义。根据this英特尔文章(强调我的):

When a user elects to sample one of these events, special hardware is used that can keep track of a data load from issue to completion. This is more complicated than simply counting instances of an event (as with normal event-based sampling), and so only some loads are tracked. Loads are randomly chosen, the latency determined for each, and the correct event(s) incremented (latency >4, >8, >16, etc). Due to the nature of the sampling for this event, only a small percentage of an application's data loads can be tracked at any one time.

如您所见,MEM_TRANS_RETIRED.LOAD_LATENCY_* 绝不计算负载总数,它根本不是为此目的而设计的。

如果您想确定代码中的哪些指令正在发出需要超过特定周期数才能完成的加载请求,那么 MEM_TRANS_RETIRED.LOAD_LATENCY_* 是要使用的正确性能事件。事实上,这正是 perf-mem 的目的,它通过 using this event 实现了它的目的。 .

如果你想统计退役的load uops总数,那么你应该使用L1-dcache-loads,它映射到MEM_UOPS_RETIRED.ALL_LOADS性能事件在英特尔处理器上。

另一方面,mem-storesL1-dcache-stores 映射到所有当前英特尔处理器上完全相同的性能事件,即 MEM_UOPS_RETIRED.ALL_STORES,它计算所有退役的商店 uops。

所以总而言之,如果您正在使用 perf-stat,您应该(几乎)总是使用 L1-dcache-loadsL1-dcache-stores 分别计算退休的负载和商店。这些映射到您在发布的答案中使用的原始事件,只是更便携,因为它们也适用于 AMD 处理器。

关于linux - PERF STAT 不计算内存加载但计算内存存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44466697/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com