本文聚焦 Linux 服务器的 NUMA 优化,给出从拓扑识别、亲和绑定到延迟/带宽验证的可复现流程,帮助将关键服务部署在最优节点,降低远端访问开销。


## 硬件与内核前提


  • Linux(建议 5.x 内核),安装 `numactl`、`numastat`、`mbw`。
  • 多 NUMA 节点硬件(如双路/四路服务器,DDR4/DDR5/ECC 内存)。

## 识别 NUMA 拓扑(可验证)


numactl --hardware
lscpu | grep -E "socket|core|NUMA"
numastat

关注节点数量、每节点内存容量与 CPU 核心分布,为后续亲和做依据。


## 进程/线程亲和绑定


  • 仅绑定 CPU:

taskset -c 0-15 ./service               # 绑定到 0–15 号 CPU

  • 同时绑定 CPU 与内存(强制本地分配):

numactl --cpunodebind=0 --membind=0 ./service

  • 允许跨节点内存但偏好本地:

numactl --cpunodebind=0 --preferred=0 ./service

## 延迟与带宽验证


  • 延迟(`lat_mem_rd`,来自 numactl 示例):

lat_mem_rd 128 32  # 128MB 区间,32 字节步长,对比本地/远端节点

  • 带宽(`mbw`):

mbw 1024           # 1GiB 测试,观察 memcpy/memset 速度

  • 观测:在仅 CPU 绑定 vs 同时内存绑定两种模式下对比 P95/P99 延迟与平均带宽;远端访问通常显著增加延迟并降低带宽。

## 数据库与服务部署建议


  • 将数据库主实例与其热内存工作集绑定在同一 NUMA 节点;复制/从属实例可分配到其他节点以平衡负载。
  • 高并发服务按核心与内存容量划分到节点,避免跨节点锁争用与内存访存开销。
  • 使用 `--max-memory-policy local`(各框架/运行时具体策略不同)或显式 `membind` 强化本地分配。

## 大页与对齐


  • HugePages:

sysctl -w vm.nr_hugepages=1024
echo never > /sys/kernel/mm/transparent_hugepage/enabled

  • 对齐:数据库文件与 RAID/阵列建议使用 1MB 对齐以提升顺序访问稳定性。

## 注意事项


  • 亲和绑定需与调度器策略兼容,避免把系统关键线程绑定到资源紧张节点。
  • 在容器环境中使用 `--cpuset-cpus` 与 `--cpuset-mems` 显式控制(Kubernetes 对应 `cpuSet`/`memory` 策略)。
  • 变更策略前后务必进行延迟/带宽基线回归,记录核/节点与固件版本差异。

## 结语


通过合理的 NUMA 亲和与内存绑定,服务可显著降低远端访问带来的延迟与抖动。以 `numastat/lat_mem_rd/mbw` 的组合建立可复现基线,是工程化优化的关键。


点赞(0) 打赏

评论列表 共有 0 条评论

admin 6年前 回复TA

完全赞同这样的说法,欢迎提供你的意见或建议。

admin 6年前 回复TA

@admin 每个人都应该来尝试下的产品。

admin 6年前 回复TA

看起来的确很疯狂,很值得一试。谁让他们创造了一款人们可以使用的产品,与当今世界上大多数其他消费类产品不同。

立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部