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
我不明白为什么计数不正确。我是否应该以某种方式使用不同的事件来获取正确的数据?
perf
硬件事件都映射到某个真实事件(我认为其中约一半没有;某些 CPU 可能根本没有原始 L1 加载/存储计数器)。对于英特尔 CPU,请使用 pmu-tools 的 ocperf.py https://github.com/andikleen/pmu-tools/blob/master/ocperf.py 将真正支持的事件编码为 perf_event API(perf_event_open、perf CLI 工具的-e rXXXXX
事件说明符)的原始编码。 - osgxmem-loads
事件在这个硬件上是有问题的。 - BeeOnRope