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系统上工作