Linux 使用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评测一个应用程序,目前我只对进出DRAM的流量感兴趣。我无法从结果中了解此应用程序从DRAM获得的吞吐量

以下是我调用perf命令的方式:

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显示:

  • 性能事件通用PMU:这些事件对应于性能列表中列出的事件
  • ix86arch(英特尔X86体系结构PMU):这些是所有英特尔X86体系结构中可用的性能计数器
  • snb(英特尔桑迪桥):桑迪桥体系结构特有的计数器
  • 在识别出一个有趣的计数器之后,您可以将其作为选项传递给perf stat和-e。 对于LLC未命中的具体情况,我发现三个计数器似乎与三个不同的集合相关:

  • 性能列表的标准列表中的缓存未命中
  • L3_LAT_缓存:未命中
  • 有限责任公司
  • showevtinfo的优点在于为每个特定于机器的计数器添加了一个描述。此外,如果您试图在英特尔计算机上配置文件,您可以在 您可以使用libpfm附带的check_events程序将计数器名称转换为可传递给perf的代码,例如:

    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% )