【操作系统百科】NUMA 内存

💡 原文中文,约7400字,阅读约需18分钟。
📝

内容提要

NUMA架构中,每个CPU socket连接本地DRAM,访问远端内存延迟和带宽不同。Linux通过mempolicy、AutoNUMA和调度器管理内存分配,CXL扩展了多级内存层次。生产调优需结合numastat和perf诊断,数据库常用interleave策略,低延迟服务倾向membind加绑核,容器用topology-manager。诊断命令包括numactl、numastat和perf node事件。

🔎

延伸解读

NUMA 调优的误区:别迷信固定延迟数字

文章强调,ACPI SLIT 中的 node distance(如 10/21/31)是归一化权重,并非可直接换算为纳秒的线性标尺。Intel UPI 与 AMD Infinity Fabric 的本地/远端带宽比随代际变化,因此调优时应依据 numastat 的 numa_miss 计数和 perf 的 node-miss 事件,而非背诵固定延迟值。这提醒读者,在评估 NUMA 性能时,应基于实际测量和工具输出,而非依赖过时或笼统的经验数据。

AutoNUMA 并非万能:默认开关因环境而异

AutoNUMA 通过 hint fault 迁移页或任务,但会带来 CPU 开销(约 1–3%)。文章指出,kernel.numa_balancing 并非所有发行版默认开启,单 node 环境收益有限。生产环境应检查 /proc/sys/kernel/numa_balancing 的实际值,并结合 numa_miss 计数决定是否关闭。对于大堆 Java 服务,若出现周期性 fault 毛刺,可考虑关闭 AutoNUMA 并改用 numactl 或 -XX:+UseNUMA 手动管理。

数据库与低延迟服务的策略差异

文章对比了数据库与低延迟服务的 NUMA 策略:数据库(如 MySQL/PostgreSQL)的 buffer pool 被所有 CPU 访问时,常采用 interleave 策略以避免单 node 带宽瓶颈;而低延迟服务则倾向 membind 加 CPU 绑定,以减少跨 node 访问。但文章强调,若工作集小于单 node 容量,membind 可能更优,需用 numastat 验证 numa_miss。这提示读者应根据工作负载特性选择策略,并通过实际数据验证效果。

Q&A

什么是NUMA内存架构?

NUMA(Non-Uniform Memory Access)是一种多路服务器内存架构,每个CPU socket连接本地DRAM,线程访问本地节点与远端节点的延迟和带宽不同。

如何查看当前系统的NUMA拓扑?

可以使用lscpu、numactl --hardware、lstopo等命令查看。例如,lscpu | grep -E 'NUMA|Socket|CPU(s)' 和 numactl --hardware 可以显示NUMA节点数、CPU分配和节点距离。

Linux中如何设置内存分配策略?

可以使用numactl命令或set_mempolicy/mbind系统调用。例如,numactl --membind=0 ./app 将内存绑定到节点0,numactl --interleave=all ./app 在节点间交错分配。

AutoNUMA是如何工作的?

AutoNUMA通过定期将页表项标记为不可访问(PROT_NONE),触发NUMA hint fault,记录访问节点,若页与任务所在节点不同,则迁移页或任务。

数据库服务在NUMA架构下如何优化?

数据库服务如MySQL/PostgreSQL,若buffer pool被所有CPU访问,常用numactl --interleave=all启动;若工作集小于单节点容量,可membind配合CPU绑定,并用numastat验证numa_miss。

如何诊断NUMA性能问题?

使用numastat查看numa_hit、numa_miss等计数,numastat -p <pid>查看进程,perf stat -e node-loads,node-load-misses等事件,以及cat /proc/$$/numa_maps。

CXL内存如何影响NUMA?

CXL可将远端DRAM或持久内存挂为新的NUMA节点,Linux 6.x+支持CXL内存热插拔和memory tiering,热页留在快层,冷页降级到慢层。

容器环境如何优化NUMA?

Kubernetes的topology-manager(TopologyPolicy: best-effort/restricted/single-numa-node)尽量保证Pod的CPU与内存在同一NUMA节点。

🏷️

标签

➡️

继续阅读