Performance 使用perf监视每个CPU的内存访问

Performance 使用perf监视每个CPU的内存访问,performance,perf,numa,Performance,Perf,Numa,我正在尝试使用linux perf工具对程序中的内存访问进行采样。具体来说,我使用perf来监视NUMA中每个CPU的读/写访问 现在,我可以监控每个CPU的读写内存访问,但我还必须知道访问是本地内存访问还是远程内存访问 我已经使用perf list浏览了事件列表,但我只是找到了一些关于套接字内存访问的事件 问题 当使用perf时,是否有任何方法可以获得每个CPU的远程内存访问 是否有比性能更好的选项 是的,CPU中的PMU单元可能可以通过各种非核心计数器执行您想要的操作,特别是它们可以计算非本

我正在尝试使用
linux perf工具
对程序中的内存访问进行采样。具体来说,我使用perf来监视NUMA中每个CPU的读/写访问

现在,我可以监控每个CPU的读写内存访问,但我还必须知道访问是本地内存访问还是远程内存访问

我已经使用perf list浏览了事件列表,但我只是找到了一些关于套接字内存访问的事件

问题

  • 当使用
    perf
    时,是否有任何方法可以获得每个CPU的远程内存访问
  • 是否有比性能更好的选项

  • 是的,CPU中的PMU单元可能可以通过各种非核心计数器执行您想要的操作,特别是它们可以计算非本地内存访问的各种非核心响应。这是一个合理的起点

    主要的问题是,通常与特定内核版本相关的
    perf
    工具在支持现代处理器1方面会落后,尤其是在涉及uncore和NUMA相关事件2时

    为了解决这个问题,您可以使用Andi Kleen的,它提供了一个
    ocperf
    包装脚本,该脚本使用系统上的任何底层
    perf
    ,但直接从Intel下载最新的事件ID。这通常会使您能够访问所需的uncore事件

    当然,即使当你开始工作时,这些事件通常也很难解释,特别是因为你的需求内存请求的心理模型由于大量因素而变得复杂,比如预取行为、所有权请求、在填充过程中“命中”行缓冲区的访问等


    1这两个原因都是因为添加新的处理器/事件有一定的滞后性,但特别是因为该工具与内核绑定,并且您可能不在最前沿的内核上,因此即使主线
    perf
    可能有支持,您仍然会被与内核相关联的
    perf
    版本所困扰

    2可能是因为大多数内核开发人员,像一般的开发人员一样,没有在NUMA系统上工作