【发布时间】:2014-12-28 05:40:29
【问题描述】:
我正在尝试使用 perf 分析应用程序,我现在只对进出 DRAM 的流量感兴趣。我无法从结果中了解此应用程序从 DRAM 获得的吞吐量是多少。
这就是我调用 perf 命令的方式:
perf stat -av -e LLC-misses,cache-misses,L1-dcache-load-misses <application>
我正在使用 -a,因为此应用程序确实与另一个正在运行的守护进程通信。
我得到的结果如下:
LLC-misses: 0 288628898 288606144
cache-misses: 373507 287154835 287143402
L1-dcache-load-misses: 3831372 286357135 286357135
Performance counter stats for './mclient -d tpch-sf1 /home/lottarini/Desktop/DPU/queries/tpch-monetdb/02.sql':
0 LLC-misses [99.99%]
373,507 cache-misses [100.00%]
3,831,372 L1-dcache-load-misses
0.035855129 seconds time elapsed
我的理解是 cache-misses 是在整个缓存层次结构中丢失的内存引用的数量。这与我得到的 L1 未命中数比缓存未命中数多的事实是一致的。
首先,为什么该工具不输出 L1 未命中的置信度值?
为什么缓存未命中数与 LLC-misses 值不同?如果在整个缓存层次结构中遗漏了某些内容,则它必须在 LLC 中遗漏。
此外,如果我想提取由于这些未命中而传输的数量数据,我该如何计算呢?是否有我可以指定的 perf 事件选项,或者我是否需要将这些数字乘以内存块的大小 [谁知道] 以防丢失?
【问题讨论】:
-
你能说出你在哪个 CPU 架构上运行它吗? perf 输出完全取决于 Linux 内核是如何为该架构配置的。
-
Proc: ark.intel.com/products/52213/… uname -a: Linux c1 3.2.0-70-generic #105-Ubuntu SMP Wed Sep 24 19:49:16 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
标签: linux caching memory profiling perf