NUMA架构感知的Nginx在多路服务器中如何进行核心绑定(CPU Affinity)的进阶调优?

2026-04-27 18:080阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计935个文字,预计阅读时间需要4分钟。

NUMA架构感知的Nginx在多路服务器中如何进行核心绑定(CPU Affinity)的进阶调优?

在配置双路或多路CPU插卡的服务器上,`worker_processes auto` 会将总逻辑核数(如64核)全部用于工作进程。但实际上,每个NUMA节点可能只有32个物理核心,跨节点调度会导致内存访问延迟翻倍。测试中,QPS下降40%以上时,`perf` 显示 `mem_load_retired.l3_miss` 指标上升,表明内存访问延迟显著。

正确做法是先确认拓扑:

  • lscpu | grep -E "(Socket|Core|NUMA)" → 查 Socket 数与每 Socket 物理核数
  • numactl --hardware → 看每个 node 的 CPU 列表和本地内存容量
  • cat /sys/devices/system/node/node*/cpulist → 精确到每个核心编号归属

例如双路 16 核/插槽(共 32 物理核),应设:worker_processes 32,而非 64(超线程数)或 auto。

worker_cpu_affinity 手动分段绑定比 auto 更可靠

Nginx 的 auto 模式在 NUMA 场景下不感知节点边界,可能把 worker 0–15 分配到 node 0 的 CPU 0–15,但 worker 16–31 却落到 node 1 的 CPU 32–47 —— 表面“绑了”,实则跨节点访问内存。必须手动按 node 切分掩码。

阅读全文
标签:Nginx

本文共计935个文字,预计阅读时间需要4分钟。

NUMA架构感知的Nginx在多路服务器中如何进行核心绑定(CPU Affinity)的进阶调优?

在配置双路或多路CPU插卡的服务器上,`worker_processes auto` 会将总逻辑核数(如64核)全部用于工作进程。但实际上,每个NUMA节点可能只有32个物理核心,跨节点调度会导致内存访问延迟翻倍。测试中,QPS下降40%以上时,`perf` 显示 `mem_load_retired.l3_miss` 指标上升,表明内存访问延迟显著。

正确做法是先确认拓扑:

  • lscpu | grep -E "(Socket|Core|NUMA)" → 查 Socket 数与每 Socket 物理核数
  • numactl --hardware → 看每个 node 的 CPU 列表和本地内存容量
  • cat /sys/devices/system/node/node*/cpulist → 精确到每个核心编号归属

例如双路 16 核/插槽(共 32 物理核),应设:worker_processes 32,而非 64(超线程数)或 auto。

worker_cpu_affinity 手动分段绑定比 auto 更可靠

Nginx 的 auto 模式在 NUMA 场景下不感知节点边界,可能把 worker 0–15 分配到 node 0 的 CPU 0–15,但 worker 16–31 却落到 node 1 的 CPU 32–47 —— 表面“绑了”,实则跨节点访问内存。必须手动按 node 切分掩码。

阅读全文
标签:Nginx