Linux 使用perf理解内存压力
我正在尝试使用perf评测一个应用程序,目前我只对进出DRAM的流量感兴趣。我无法从结果中了解此应用程序从DRAM获得的吞吐量 以下是我调用perf命令的方式:Linux 使用perf理解内存压力,linux,caching,memory,profiling,perf,Linux,Caching,Memory,Profiling,Perf,我正在尝试使用perf评测一个应用程序,目前我只对进出DRAM的流量感兴趣。我无法从结果中了解此应用程序从DRAM获得的吞吐量 以下是我调用perf命令的方式: perf stat -av -e LLC-misses,cache-misses,L1-dcache-load-misses <application> 我的理解是,cache misses是在整个缓存层次结构中丢失的内存引用数。这与我得到的一级未命中比缓存未命中多得多的事实是一致的 首先,为什么工具不输出L1未命中的置信
perf stat -av -e LLC-misses,cache-misses,L1-dcache-load-misses <application>
我的理解是,cache misses是在整个缓存层次结构中丢失的内存引用数。这与我得到的一级未命中比缓存未命中多得多的事实是一致的
首先,为什么工具不输出L1未命中的置信值
为什么缓存未命中数与LLC未命中值不同?如果某个东西在整个缓存层次结构中丢失,那么它必须在LLC中丢失
此外,如果我想提取由于这些未命中而传输的数据量,我该如何计算?是否有一个perf-event选项可以指定,或者是否需要将这些数字与内存块大小相乘[谁知道]以防丢失时传输的内存块大小相乘 perf list列出的事件并不是系统中可以监控的所有事件 您可以安装libpfm,使用命令
showevtinfo
获取系统中所有可用事件计数器的列表。对于砂桥机器,将有三组计数器显示EVTINFO显示:
Requested Event: LAST_LEVEL_CACHE_MISSES
Actual Event: snb::L3_LAT_CACHE:MISS:k=1:u=1:e=0:i=0:c=0:t=0
PMU : Intel Sandy Bridge
IDX : 142606383
Codes : 0x53012e
然后使用结尾处的代码:
sudo perf stat -r 10 -a -e cache-misses,r53012e,r53412e <command>
10,553,469 cache-misses ( +- 1.60% ) [100.00%]
10,556,094 r53012e ( +- 1.60% ) [100.00%]
10,557,004 r53412e ( +- 1.60% )
sudo perf stat-r 10-a-e缓存未命中、r53012e、r53412e
10553469缓存未命中(+-1.60%)[100.00%]
10556094 r53012e(+-1.60%)[100.00%]
10557004 r53412e(+-1.60%)
这证实了所有这些计数器实际上是如何指向同一事物的
最后,您可以将这些值与缓存块的大小相乘,以获得传输的实际数据量。您能告诉我们您在哪个CPU体系结构上运行此功能吗?性能输出完全取决于Linux内核在该体系结构中的配置方式。Proc: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
sudo perf stat -r 10 -a -e cache-misses,r53012e,r53412e <command>
10,553,469 cache-misses ( +- 1.60% ) [100.00%]
10,556,094 r53012e ( +- 1.60% ) [100.00%]
10,557,004 r53412e ( +- 1.60% )