要在 Hyper-V 中通过 NUMA 优化大型虚拟机性能,必须严格对齐 vCPU 和内存到单个物理 NUMA 节点:先用 Get-VMHostNumaNode 等命令确认宿主机 NUMA 拓扑并启用 BIOS 中 NUMA 支持;再关机后在虚拟机设置中启用 NUMA 感知、设最大 NUMA 节点数为 1,并将动态内存的最大 RAM 限制在单节点可用内存内;最后在来宾系统运行 Get-CimInstance -ClassName Win32_NumaNode 验证是否成功绑定单节点。
要在 hyper-v 中通过非均匀内存访问(numa)优化大型虚拟机性能,核心是让虚拟机的 vcpu 和内存分配严格对齐宿主机的物理 numa 节点,避免跨节点访问带来的延迟飙升。这不是简单勾选开关,而是需要结合硬件拓扑、虚拟机规模和工作负载特性做精细化配置。
确认宿主机 NUMA 拓扑结构
这是所有后续配置的前提。Windows 不会自动暴露 NUMA 信息,必须主动查询:
- 以管理员身份运行 PowerShell,执行:
Get-VMHostNumaNode—— 查看节点数量、每个节点的 CPU 核心数与可用内存 - 补充验证:运行
systeminfo | findstr "NUMA"确认系统已识别 NUMA 架构;再用wmic memorychip get BankLabel, Capacity, DeviceLocator辅助判断内存插槽分布 - 注意:若输出为空或提示“未找到 NUMA 节点”,说明 BIOS 中未启用 NUMA(常见于部分品牌主板),需进 BIOS 开启 Intel Node Interleaving(设为 Disabled)或 AMD IOMMU/NUMA Mode(设为 Enabled)
为虚拟机启用 NUMA 感知并绑定单节点
Hyper-V 默认启用 NUMA 感知,但大型虚拟机(尤其 vCPU ≥ 8 或内存 ≥ 16GB)必须显式限制在单个 NUMA 节点内,否则调度器可能跨节点分配资源:
- 虚拟机必须处于关机状态才能修改此设置
- 在 Hyper-V 管理器中右键虚拟机 → “设置” → 左侧选择“处理器” → 勾选“启用 NUMA 感知”
- 关键一步:展开“处理器”下的“NUMA 设置”,勾选“启用 NUMA 策略”,并将“最大 NUMA 节点数”设为 1
- 此时系统会自动将该虚拟机的 vCPU 数量限制在所选节点的最大核心数以内(例如节点有 12 核,vCPU 就不能超过 12)
动态内存与 NUMA 的协同配置
动态内存本身不破坏 NUMA 亲和性,但若最大内存远超单节点容量,仍可能触发跨节点分配。因此需同步约束:
- 在“内存”设置页启用动态内存后,将“最大 RAM”严格设为 ≤ 单个 NUMA 节点的可用内存(例如节点有 64GB 可用,最大 RAM 就不能设为 96GB)
- “启动 RAM”和“最小 RAM”也建议控制在该节点容量内,避免冷启动时就跨节点申请
- 内存缓冲区(默认 20%)同样计入节点内存占用,高负载场景可酌情降至 10%~15%,减少预留冗余
验证 NUMA 对齐是否生效
配置完成后,不能仅凭界面判断,需在虚拟机内部验证实际内存访问路径:
- 启动虚拟机,安装 Windows Server 或 Windows 10/11 专业版以上系统(需支持 WMI NUMA 查询)
- 在来宾系统中以管理员身份运行 PowerShell,执行:
Get-CimInstance -ClassName Win32_NumaNode—— 若返回单个节点且 MemoryCapacity 接近你设定的最大 RAM,说明成功绑定 - 更直观方式:打开任务管理器 → “性能”选项卡 → 点击“内存”,观察“已提交”数值波动是否平稳;若频繁接近最大值且伴随延迟升高,说明内存压力已触达 NUMA 边界,需调低最大 RAM 或升级宿主机内存


















