AMD Zen 2(Rome)每通道内存流量追踪及NUMA节点归属排查
双路AMD EPYC 7H12的NUMA节点内存流量追踪方案
1. 利用perf结合AMD Data Fabric事件追踪NUMA级内存请求
AMD EPYC 7H12的Data Fabric PMU提供了可区分目标NUMA节点的内存请求事件,能直接定位LLC缺失对应的目标节点:
- 先通过
perf list amd_df列出所有Data Fabric相关事件,找到对应每个NUMA节点的内存请求事件(例如mem_req_to_numaX,X为0-7,对应系统8个NUMA节点)。 - 运行perf命令统计工作负载向各NUMA节点发起的内存请求:
输出结果会直接给出每个NUMA节点的内存请求数,对应工作负载在该节点产生的内存流量占比。perf stat -e amd_df::mem_req_to_numa0,amd_df::mem_req_to_numa1,amd_df::mem_req_to_numa2,amd_df::mem_req_to_numa3,amd_df::mem_req_to_numa4,amd_df::mem_req_to_numa5,amd_df::mem_req_to_numa6,amd_df::mem_req_to_numa7 -p <你的工作负载PID>
2. 单缓存缺失级别的NUMA节点定位
如果需要追踪每次LLC缓存缺失对应的目标NUMA节点:
- 使用
perf record采样LLC缺失事件并记录细节:perf record -e amd_l3::llc_miss -n -p <你的工作负载PID> - 用
perf report分析采样数据,结合AMD PMU文档中事件的额外字段(如目标NUMA节点ID),即可定位单条缓存缺失请求的目标NUMA节点。部分版本的perf会直接在采样数据中解析出NUMA节点信息,若没有则需参考AMD官方的PMU编程手册映射字段。
3. 推算通道级工作负载流量占比
由于Data Fabric通道计数器是聚合值,可通过NUMA亲和性绑定间接拆分工作负载在对应通道的流量:
- 每个NUMA节点对应一对内存通道,使用
numactl --cpunodebind=X --membind=X <你的工作负载命令>将进程绑定到特定NUMA节点X。 - 同时统计该NUMA节点的内存请求数(用步骤1的perf命令)和对应通道的聚合流量(Data Fabric计数器),计算两者的比值,即为工作负载在该通道的流量占比。
- 依次对所有NUMA节点重复上述操作,即可得到所有通道的工作负载流量占比。
内容的提问来源于stack exchange,提问作者smz
相关产品推荐
相关产品推荐

