← 回總覽

不懂 NUMA,别再说你懂 Linux 内核了

📅 2026-05-27 07:15 dbaplus社群 软件编程 2 分鐘 1484 字 評分: 82
NUMA Linux 内核 内存管理 进程调度 性能优化
📌 一句话摘要 本文系统讲解了 NUMA 架构的核心原理、在 Linux 内核中的实现机制(内存管理、进程调度、系统调用),以及数据库和虚拟化场景下的应用优化与实战配置。 📝 详细摘要 文章从 NUMA(非统一内存访问)架构的起源和核心概念入手,对比了其与 SMP 架构的差异,并详细阐述了 NUMA 的组成(处理器核心、内存控制器、内存节点、互联网络)和工作原理(本地 vs 远程内存访问)。核心部分深入分析了 Linux 内核如何支持 NUMA,包括内存节点划分(pg_data_t 数据结构)、本地优先分配策略、内存迁移机制,以及进程调度中的亲和性设置和负载均衡。文章还介绍了相关的系统调用

📌 一句话摘要

本文系统讲解了 NUMA 架构的核心原理、在 Linux 内核中的实现机制(内存管理、进程调度、系统调用),以及数据库和虚拟化场景下的应用优化与实战配置。

📝 详细摘要

文章从 NUMA(非统一内存访问)架构的起源和核心概念入手,对比了其与 SMP 架构的差异,并详细阐述了 NUMA 的组成(处理器核心、内存控制器、内存节点、互联网络)和工作原理(本地 vs 远程内存访问)。核心部分深入分析了 Linux 内核如何支持 NUMA,包括内存节点划分(pg_data_t 数据结构)、本地优先分配策略、内存迁移机制,以及进程调度中的亲和性设置和负载均衡。文章还介绍了相关的系统调用(如 set_mempolicy、mbind)和查看/配置 NUMA 的实战命令(numactl、numastat)。最后,通过数据库(PostgreSQL、MySQL)和虚拟化(KVM)场景的案例,说明了 NUMA 配置不当导致的性能问题及优化方法,并纠正了“禁用 NUMA”的常见误区。

💡 主要观点

- NUMA 架构通过将 CPU 和内存分组为节点,解决了 SMP 架构在多核下的总线瓶颈。 每个节点拥有本地内存,CPU 访问本地内存延迟远低于访问远程内存,这是 NUMA 性能优化的核心出发点。

Linux 内核通过内存节点划分、本地优先分配和内存迁移等机制深度支持 NUMA。 内核使用 pg_data_t 数据结构管理节点,alloc_pages_current 函数实现本地优先分配,migrate_pages 函数支持动态内存迁移以平衡负载。
进程调度中的 NUMA 亲和性设置是避免跨节点内存访问、提升性能的关键。 通过 task_struct 的 mems_allowed 位图或 numactl 工具,可以将进程绑定到特定节点,确保其 CPU 和内存访问都在同一节点内。
数据库和虚拟化场景对 NUMA 配置敏感,合理优化可带来显著性能提升。 例如,将数据库进程绑定到单一节点或为虚拟机分配与物理 NUMA 节点对齐的资源,可减少远程访问,提升 QPS 和降低延迟。

💬 文章金句

- 不懂 NUMA,你看到的内核源码只是'表面文字',无法理解其背后的性能考量;不懂 NUMA,你做的性能优化只能是'隔靴搔痒',抓不住问题的本质。

  • 本地访问更快:CPU 访问自己所在节点的本地内存时,路径最短、延迟最低。
  • 正确的做法不是禁用 NUMA,而是优化 NUMA 配置,让进程和内存'对齐',最大化本地访问比例。

📊 文章信息

AI 初评:82

来源:dbaplus社群

作者:dbaplus社群

分类:软件编程

语言:中文

阅读时间:34 分钟

字数:8325

标签: NUMA, Linux 内核, 内存管理, 进程调度, 性能优化

阅读完整文章

查看原文 → 發佈: 2026-05-27 07:15:00 收錄: 2026-05-27 10:00:36

🤖 問 AI

針對這篇文章提問,AI 會根據文章內容回答。按 Ctrl+Enter 送出。