首页/云/云平台与虚拟化速查/KVM NUMA 亲和:numatune 配置
虚拟化操作94 条

KVM NUMA 亲和:numatune 配置

多路宿主上把虚机内存固定在指定 NUMA 节点并配合 vcpupin,可减少远端内存访问;用 virsh numatune 查看与热改,XML 的 numatune 段负责持久定义。

云平台与虚拟化速查云更新于 2026-10-13

KVM NUMA 亲和配置

在多路(多 NUMA 节点)宿主上,CPU 访问本节点内存比访问远端节点内存快得多。把虚机内存固定在指定 NUMA 节点,并配合把 vCPU 绑定到该节点的核心,可以显著减少远端内存访问。查看与热改用 virsh numatune,持久定义写在域 XML 的 numatune 段。

基本信息

查看拓扑virsh nodeinfo、numactl --hardware、lstopo 均可查看节点与核心分布
命令查看virsh numatune vm1 查看当前绑定策略
限制节点virsh numatune vm1 --mode strict --nodeset 0 指定节点
XML 段在域定义中写 numatune 段落声明内存模式与节点集合
配套动作与 vcpupin 绑核配合使用:内存绑节点、vCPU 绑该节点内的核

典型使用场景

  • 数据库虚机调优:内存访问延迟直接影响查询响应
  • 内存密集计算:减少跨节点访问以提升吞吐
  • 多虚机隔离:把不同虚机分散到不同节点,避免互相抢占
  • 性能基准对比:验证 NUMA 亲和带来的实际收益
  • 宿主规划:按节点容量规划虚机分布,而不是只看总核数

查看与热调整

查看与热调整
numactl --hardware            # 宿主 NUMA 拓扑与各节点内存
virsh numatune vm1           # 查看当前内存绑定
virsh numatune vm1 --mode strict --nodeset 0 --live
virsh vcpupin vm1            # 查看 vCPU 与物理核的对应
# XML 片段:<numatune><memory mode='strict' nodeset='0'/></numatune>

模式对比

模式行为适用
strict只在指定节点分配内存追求确定性,内存不足则失败
preferred优先指定节点,不足时回退兼顾亲和与启动成功率
interleave在多个节点间轮转分配带宽优先、单点压力平均
NUMA 亲和与绑核通常配合使用:内存绑节点、vCPU 绑该节点内的核,只做其中一项,收益会被另一侧的远端访问抵消。
strict 模式下节点内存不足会直接导致虚机启动失败:调整前先核对节点可用内存与虚机内存是否匹配。
改动后要用真实业务或贴近业务的压测验证效果,NUMA 亲和并非对所有负载都有收益,盲目套用参数可能反而降低灵活性。
虚拟 NUMA 拓扑是另一条路径:把虚机自身声明成多节点结构,配合 guest 内调度能更贴合宿主布局,但它会改变 guest 看到的内存结构,需要按业务实测后再启用。

易错点

  • nodeset 与 vcpupin 落在不同节点:绑核收益被远端内存抵消
  • strict 模式下节点内存不足,虚机直接启动失败
  • 只看宿主总核数不看节点分布,虚机跨节点运行导致性能波动
  • 热改后未落到持久定义,宿主重启后配置回到原状

数据来源与参考

  • libvirt 文档:numatune
  • numactl man 手册
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌