在Linux系统中,NUMA(Non-Uniform Memory Access,非统一内存访问)是提升多处理器服务器性能的关键技术,它通过将CPU和内存划分为多个”节点”,让每个CPU优先访问本地内存,减少跨节点延迟,以下是详细配置指南:
在配置前,先检查系统NUMA支持情况:
-
查看硬件支持
执行命令:lscpu | grep -i numa
若输出包含
NUMA node(s)
且数量大于1(如NUMA node(s): 2
),说明硬件已支持NUMA。 -
检查NUMA是否启用
dmesg | grep -i numa
若显示
NUMA: Using hardware configuration
或类似信息,表示内核已启用NUMA。
开启NUMA的核心步骤
BIOS/UEFI 中启用NUMA(必需)
NUMA是硬件级功能,必须先在BIOS中开启:
- 重启服务器,进入BIOS/UEFI设置(通常按
Del
、F2
或F12
)。 - 在 Advanced Settings > CPU/Memory Configuration 中找到选项:
- 名称可能为
NUMA Support
、Node Interleaving
或Memory Interleaving
。
- 名称可能为
- 关闭内存交错(Disable Memory Interleaving):
此选项开启时内存均匀分布(模拟UMA),需关闭以启用NUMA。 - 保存设置并重启。
⚠️ 注意:不同厂商(如Dell、HP、联想)路径略有差异,请参考服务器手册。
Linux内核参数调整
若BIOS已启用NUMA但系统未识别,需配置内核:
- 编辑GRUB配置:
sudo vim /etc/default/grub
- 修改内核启动参数:
在GRUB_CMDLINE_LINUX
行添加:GRUB_CMDLINE_LINUX="... numa=on"
某些系统(如VMware虚拟机)需额外添加:
GRUB_CMDLINE_LINUX="... numa=on transparent_hugepage=never"
- 更新GRUB并重启:
sudo grub2-mkconfig -o /boot/grub2/grub.cfg # CentOS/RHEL sudo update-grub # Ubuntu/Debian sudo reboot
验证NUMA状态
重启后确认配置生效:
-
检查NUMA节点:
numactl --hardware
输出示例:
available: 2 nodes (0-1) # 表示2个NUMA节点已激活 node 0 size: 32768 MB node 1 size: 32768 MB
-
查看内存分配策略:
numastat # 显示各节点内存使用统计
高级配置工具
numactl:进程级NUMA控制
- 指定进程运行在节点0,并使用本地内存:
numactl --cpunodebind=0 --membind=0 <command>
- 示例:运行MySQL在节点0:
numactl --cpunodebind=0 --membind=0 /usr/sbin/mysqld
numad:自动NUMA优化
- 安装并启用服务:
sudo yum install numad # CentOS/RHEL sudo systemctl start numad
numad
自动调整进程与内存的绑定,适合动态负载场景。
内核参数调优
- 禁用区域回收策略(避免内存溢出):
echo 0 > /proc/sys/vm/zone_reclaim_mode
- 调整内存分配策略(
/proc/sys/kernel/numa_balancing
):1
:启用自动负载均衡(默认)0
:关闭(需手动绑定)
注意事项
- 性能权衡:
- 数据库(如MySQL、Oracle)开启NUMA通常提升性能。
- 部分应用(如高吞吐网络服务)可能因跨节点访问导致延迟,需测试后决定。
- 虚拟机场景:
VMware/KVM需同时开启虚拟NUMA(vNUMA)并匹配Guest OS配置。 - 内存不足处理:
若某节点内存耗尽,可通过numactl --interleave=all
启用交错分配,但会牺牲性能。
开启NUMA需三步:BIOS启用 → 内核参数确认 → 系统工具优化,正确配置后,多路服务器性能可提升20%~50%,建议结合numastat
和perf
工具监控效果,根据应用负载调整策略。
引用说明:
- 内核参数文档:https://www.kernel.org/doc/html/latest/admin-guide/kernel-parameters.html
- Red Hat NUMA优化指南:https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/performance_tuning_guide/sect-red_hat_enterprise_linux-performance_tuning_guide-numa
- Ubuntu服务器配置:https://ubuntu.com/server/docs/performance-numa
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/7176.html