You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux下如何监控进程的NUMA互联(QPI/UPI)带宽使用情况

Linux下测量双路Skylake平台进程跨NUMA节点UPI/QPI带宽落地方案

以下方案适用于你描述的「NUMA0、NUMA1各运行1个线程,双线程跨节点访问对端内存」场景,在搭载2颗Skylake处理器的UPI平台验证可用,老款QPI架构双路平台仅需替换对应事件名即可复用。

前置校验(必做,否则测量结果无效)

  • 先确认NUMA拓扑:执行lscpu | grep NUMA查看两个NUMA节点对应的CPU核心范围,执行numactl -H查看各节点内存范围。
  • 测试进程启动时直接通过numactl绑定核心和内存,避免内核调度、内存自动迁移干扰结果:
    # 启动NUMA0上的线程:核心绑定在node0,内存强制分配在node1
    numactl --cpunodebind=0 --membind=1 ./your_worker_0 &
    # 启动NUMA1上的线程:核心绑定在node1,内存强制分配在node0
    numactl --cpunodebind=1 --membind=0 ./your_worker_1 &
    
  • 记录进程PID,后续测量直接绑定该PID,避免统计到其他进程的流量。
  • 内核版本要求4.14以上,可直接读取UPI/QPI的uncore硬件计数器,无需额外安装驱动。

方法1:perf工具精确测量(推荐,结果最准)

该方法直接读取CPU UPI控制器的硬件计数寄存器,仅统计目标进程触发的跨链路流量,不掺杂系统其他进程的干扰,是最准确的测量方式。

  1. 先确认平台对应事件名:
    • Skylake UPI平台:执行perf list | grep upi找到upi_tx_flits.ALL(UPI出方向传输单元计数)、upi_rx_flits.ALL(UPI入方向传输单元计数),单个flit固定为64字节,是UPI链路的最小传输单元。
    • 老款QPI平台:替换为qpi_tx_flits.ALL、qpi_rx_flits.ALL即可,flit长度同样为64字节,计算逻辑完全一致。
  2. 执行perf统计命令,每1秒输出一次计数:
    perf stat -I 1000 -p <你的测试进程PID> \
    uncore_upi_0/upi_tx_flits.ALL/,uncore_upi_0/upi_rx_flits.ALL/ \
    uncore_upi_1/upi_tx_flits.ALL/,uncore_upi_1/upi_rx_flits.ALL/
    
    双路平台共2个UPI控制器,对应uncore_upi_0、uncore_upi_1两个事件目录,需要同时统计两个控制器的收发流量。
  3. 带宽计算:将每秒输出的4个计数值(两个控制器的tx、rx)求和,乘以64得到每秒传输总字节数,除以1024*1024即可换算为MB/s的实时带宽值。

例:某秒统计到upi0 tx=2e6 flit、upi0 rx=1.9e6 flit、upi1 tx=1.9e6 flit、upi1 rx=2e6 flit,总flit数7.8e6,总带宽=7.8e6*64/1024/1024≈476MB/s。

方法2:PCM工具实时观测链路利用率

如果需要同时查看UPI/QPI链路的总利用率、目标进程流量占比,可以用Intel PCM工具,同样读取硬件计数器,结果和perf一致:

  • 直接从系统源安装pcm工具后,执行pcm-upi 1即可每1秒输出两条UPI链路的实时总带宽、链路占用率。
  • 执行pcm -p <你的测试进程PID> 1,可单独输出目标进程触发的跨NUMA访存流量占比,方便快速判断进程对链路资源的挤占程度。

方法3:numastat粗粒度校验

如果不需要秒级精度,仅需快速估算跨节点流量规模,可以用numastat做粗测:

  • 执行numastat -p <你的测试进程PID>,查看输出中Numa_Miss列的计数,该值为进程本地NUMA节点访存未命中、到远端节点取数据的内存页数,默认单页大小4KB。
  • 用总页数*4KB除以进程总运行时长,即可得到粗粒度的跨节点访存带宽。
    注意:该方法无法统计cache一致性流量、非缺页触发的跨节点访存,结果会比实际UPI带宽偏小,仅适合做快速校验,不能作为精确测量结果。

避坑提醒

  • 不要尝试用iftop、nethogs等网卡工具测量UPI/QPI带宽,UPI是CPU片上互联链路,不属于网卡设备,这类工具完全无法识别流量。
  • 如果执行全局统计(不指定PID绑定),结果会包含系统所有进程的跨节点流量,测量单进程带宽时必须加-p参数绑定目标PID。
  • 测量前尽量关闭其他会产生跨NUMA访存的无关进程,避免后台流量干扰结果。

内容的提问来源于stack exchange,提问作者Mohammad Siavashi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.05 16:15:46