numactl介绍和使用

张开发
2026/4/9 21:05:32 15 分钟阅读

分享文章

numactl介绍和使用
文章目录一、NUMA 与 numactl 作用二、安装三、核心命令查看拓扑与状态1. 查看硬件 NUMA 拓扑最常用2. 查看当前进程默认策略四、核心功能进程绑定与内存策略常用参数1. CPU 绑定两种粒度(1) 绑定到 **NUMA 节点**推荐按 Socket 绑定(2) 绑定到 **物理 CPU 核心**精确绑核2. 内存分配策略4 种核心(1) --membind / -m**仅从指定节点分配内存**严格绑定(2) --preferred**优先从指定节点分配**不足则 fallback(3) --interleave / -i**内存轮询交错分配**适合大内存、带宽敏感(4) --localalloc**强制本地节点分配**当前 CPU 所在 Node3. 完整常用组合HPC/MPI/数据库五、高级共享内存 / tmpfs / hugepage 策略六、numactl vs taskset区别七、性能优化要点HPC/CFD 必看八、关于 numctl九、快速示例清单直接复制用下面完整介绍numactl 原理、核心功能、常用参数、使用场景与示例。一、NUMA 与 numactl 作用NUMANon-Uniform Memory Access多路服务器多 CPU 插槽下每个 CPU Socket 对应一个NUMA 节点Node自带本地内存跨节点访问内存延迟高本地 ~10跨节点 ~20–30。numactl 作用查看系统 NUMA 拓扑节点、CPU、内存、节点距离绑定进程到指定 CPU / NUMA 节点运行控制进程内存只从指定节点分配避免跨节点访问为共享内存 / tmpfs / hugepage 设置 NUMA 策略性能优化必备HPC、数据库、存储、MPI 程序二、安装# RHEL/CentOS/Rockysudoyuminstallnumactl-y# Ubuntu/Debiansudoaptupdatesudoaptinstallnumactl-y三、核心命令查看拓扑与状态1. 查看硬件 NUMA 拓扑最常用numactl--hardware# 或简写numactl-H典型输出2 节点available: 2 nodes (0-1) node 0 cpus: 0 1 2 3 4 5 6 7 node 0 size: 7804 MB node 0 free: 6800 MB node 1 cpus: 8 9 10 11 12 13 14 15 node 1 size: 7804 MB node 1 free: 6700 MB node distances: node 0 1 0: 10 20 1: 20 10node distances10本地20跨节点延迟成本2. 查看当前进程默认策略numactl--show# 或numactl-s四、核心功能进程绑定与内存策略常用参数1. CPU 绑定两种粒度(1) 绑定到NUMA 节点推荐按 Socket 绑定--cpunodebind节点列表-N节点列表示例# 进程只在 Node 0 上的 CPU 运行numactl--cpunodebind0./my_app# Node 01numactl-N0-1 ./my_app(2) 绑定到物理 CPU 核心精确绑核--physcpubindCPU列表-CCPU列表示例# 绑定到 CPU 0,1,2,3numactl--physcpubind0-3 ./my_app# 绑定到 0,2,4,6,8,10numactl-C0,2,4,6,8,10 ./my_app2. 内存分配策略4 种核心(1) --membind / -m仅从指定节点分配内存严格绑定内存不足则分配失败适合确保本地访问# 内存只从 Node 0 分配numactl--membind0./my_app# CPU内存同节点最常用优化numactl--cpunodebind0--membind0./my_app(2) --preferred优先从指定节点分配不足则 fallbacknumactl--preferred0./my_app(3) --interleave / -i内存轮询交错分配适合大内存、带宽敏感# 所有节点轮询numactl--interleaveall ./my_app# Node 01 轮询numactl-i0,1./my_app(4) --localalloc强制本地节点分配当前 CPU 所在 Nodenumactl--localalloc./my_app3. 完整常用组合HPC/MPI/数据库# 最佳实践CPU内存同节点本地访问最优numactl--cpunodebind0--membind0./cfd_solver# MPI 多进程绑核每个进程绑一个节点mpiexec-n2numactl--cpunodebind0--membind0./sim:\-n2numactl--cpunodebind1--membind1./sim# 大内存带宽交错所有节点numactl--interleaveall ./memory_bandwidth_test# 精确绑核本地内存numactl-C0-7--membind0./database五、高级共享内存 / tmpfs / hugepage 策略# 为 /dev/shm 文件设置交错适合共享内存应用numactl--interleaveall--file/dev/shm/my_shm# 为 hugepage 设置绑定numactl--membind0--huge--file/mnt/hugepages/my_huge六、numactl vs taskset区别taskset仅绑 CPU无 NUMA 内存控制numactlCPU 内存节点双控制真正 NUMA 优化多路服务器必须用numactl才能避免跨节点内存访问七、性能优化要点HPC/CFD 必看同节点绑定--cpunodebindN --membindN本地访问延迟最低MPI 多节点每个进程绑对应 NUMA 节点 本地内存带宽型应用如流场、大矩阵--interleaveall低延迟应用求解器、数据库严格--membind用numastat观察 NUMA 命中率miss 高跨节点过多八、关于 numctl标准 Linux 无 numctl一般是numactl 的笔误某些自定义脚本/别名少数闭源工具非主流生产环境一律用 numactl稳定、标准、全发行版支持九、快速示例清单直接复制用# 1. 查看拓扑numactl-H# 2. 进程绑 Node 0CPU内存numactl-N0-m0./app# 3. 绑物理核 0-7 内存 Node 0numactl-C0-7--membind0./app# 4. 内存交错所有节点numactl-iall ./app# 5. MPI 双节点优化mpiexec-n4numactl-N0-m0./solver:-n4numactl-N1-m1./solver绑核内存策略

更多文章