温馨提示×

Linux CPUInfo中的NUMA架构是什么

小樊
47
2025-11-15 10:19:29
栏目: 智能运维

Linux CPUInfo中的NUMA架构概念与定位

NUMA架构的核心要点

  • NUMA(Non-Uniform Memory Access,非一致性内存访问)将CPU与内存划分为多个NUMA节点(Node)。每个节点包含一组CPU核心与其“本地内存”,节点内访问延迟更低;访问其他节点的“远程内存”需经节点间互连(如 Intel UPI/QPI、AMD Infinity Fabric),延迟与带宽通常劣于本地访问。系统用“距离(distance)”描述跨节点访问成本,距离越大性能越低。为提升性能,应尽量让任务与数据“就近”匹配,减少远程访存。

在Linux中如何识别NUMA

  • 使用lscpu快速查看:关注输出中的NUMA node(s)字段,若大于1则为NUMA系统;同时可查看节点与CPU的对应关系。示例:lscpu | grep -E “NUMA node(s)|CPU(s)”。
  • 使用numactl --hardware查看节点拓扑与内存:显示如“available: 2 nodes (0-1)”、各节点包含的CPU列表及每节点内存大小,便于确认是否存在跨节点访问成本。
  • 在**/proc/cpuinfo**中定位拓扑线索:虽无直接的“numa node”字段,但可用以下字段组合判断:
    • physical id:物理插槽(Socket)编号;
    • core id:物理核心编号;
    • cpu cores:每个Socket的物理核心数;
    • siblings:每个物理核心的超线程(逻辑CPU)数;
    • processor:逻辑CPU编号。 结合这些字段可推断出CPU与Socket/Core/Thread的层级关系,再配合numactl确认节点归属。

CPUInfo字段与NUMA节点映射示例

  • 典型字段含义与用途(示例命令:grep -E “physical id|core id|cpu cores|siblings|processor” /proc/cpuinfo):
    • processor:逻辑CPU编号(如0…N-1),用于观察逻辑处理器列表;
    • physical id:物理插槽编号,帮助识别Socket
    • cpu cores:单个Socket上的物理核心数;
    • core id:该逻辑CPU在其Socket内的物理核心编号;
    • siblings:同一物理核心的超线程兄弟线程数。
  • 常见映射关系(以2路服务器、每路10核、开启超线程为例):
    • 若每Socket ≈ 1 个 NUMA Node,则每个Node通常包含2 × cpu cores个逻辑CPU(因超线程);
    • 同一物理核心的两个线程(同core id、不同processor)通常共享L1/L2,而同Node内所有逻辑CPU共享L3
    • 通过numactl可见如“node 0 cpus: 0-19;node 1 cpus: 20-39”的分配,从而把/proc/cpuinfo中的逻辑CPU归属到具体Node。上述规律有助于从CPUInfo推断NUMA布局。

性能影响与优化建议

  • 影响:当任务与数据不在同一Node时会发生远程访存,常见现象是延迟上升、带宽受限,进而拖累吞吐与尾时延。
  • 优化要点:
    • 使用numactl进行CPU与内存亲和性绑定:如“numactl --cpunodebind=0 --membind=0 ./app”将进程绑定到Node 0的CPU与内存,尽量实现“本地分配、本地运行”。
    • 启用或调优NUMA Balancing:通过“echo 1 > /proc/sys/kernel/numa_balancing”开启自动迁移页靠近使用它的CPU;对延迟敏感负载可结合应用特性选择开启或关闭。
    • 监控numastat观察跨节点访问比例(如numa_hit、numa_miss),当远程访问偏高时优先调整线程绑定与内存分配策略。

0