Windows Server 2012 R2 Hyper-V 现已支持虚拟机内部的 NUMA,即非一致内存访问。NUMA 是一种多处理器系统计算机架构,这种架构下处理器访问内存所需的时间取决于内存与处理器的相对位置。

通过使用 NUMA,处理器可用比访问远程内存(属于系统中其他处理器的内存)更快的速度访问本地内存(直接连接到该处理器的内存)。现代化操作系统与 SQL Server 等高性能应用程序在开发过程中就针对系统的 NUMA 拓扑进行了优化,会在线程调度或内存分配时考虑到 NUMA 的存在,借此改善性能。

通过将虚拟 NUMA 拓扑投射到虚拟机内部,能在大规模虚拟机环境中实现更优化的性能与负载扩展性。这样做可以让来宾操作系统与 SQL Server 等应用程序,或 Windows Web Server,即 IIS 充分利用 NUMA 优化性能。投射给 Hyper-V 虚拟机的默认虚拟 NUMA 拓扑通过优化可与宿主机的 NUMA 拓扑保持一致,如下图所示为客户机NUMA 拓扑默认与主机的 NUMA 拓扑匹配。

Hyper-V Server NUMA_虚拟机

来宾 NUMA 确保可感知 NUMA 的重要负载能获得最佳性能,并充分利用底层硬件的性能与硬件本身的能力,通过硬件、软件,及应用程序领域的投资获得最大化收益。运行 SQL 与 IIS 的客户将通过来宾 NUMA 获得大量收益。

Microsoft SQL Server 2012 与 Windows Server 2012 中的 Internet Information Services(IIS) (IIS) 8 等高性能应用程序可感知 NUMA,相比在不支持 NUMA 的平台和虚拟机中运行的虚拟化实例,可极大改善性能。对来宾 NUMA 的支持还可用于使用 Windows Server 2012 故障转移群集搭建的高可用解决方案。故障转移群集会在移动虚拟机前评估节点 NUMA 配置,确保目标节点能良好支持虚拟机中运行的负载。

如果将虚拟机配置为使用动态内存,则只有一个虚拟NUMA节点(即扁平 NUMA 拓扑)投射进来宾系统,实际上就禁用了虚拟NUMA支持。

使用以下命令查看主机系统是否基于NUMA

Hyper-V Server NUMA_应用程序_02

1. 登陆Hyper-V服务器,打开Hyper-V管理器,右侧操作区选择Hyper-V设置

Hyper-V Server NUMA_虚拟机_03

2. Hyper-V设置页面选择NUMA跨越,勾选“允许虚拟机节点”

Hyper-V Server NUMA_应用程序_04

通过PowerShell 命令来设置允许虚拟机跨越物理NUMA 节点的命令如下:

Set-VMHost -NumaSpanningEnabled $true

当在Hyper-V主机中设置启用NUMA后,会影响运行 Hyper-V 的服务器上的所有虚拟机。当主机上的内存不足以在在虚拟 NUMA 节点和主机的物理 NUMA 节点之间执行最佳映射时,NUMA 跨越设置可确定虚拟机行为。此设置会影响以下虚拟机操作:启动、还原与迁移。

当 NUMA 跨越处于启用状态,并且由于内存限制,必须在两个或多个物理 NUMA 节点之间拆分一个或多个虚拟 NUMA 节点时,仍然允许启动虚拟机或将其还原或迁移到其他主机。但是,此拆分将导致在虚拟和物理 NUMA 节点之间执行非最佳映射。NUMA 感知工作负载甚至也可能以非最佳方式执行;例如,虚拟机内显示为本地的内存访问实际上在主机的物理 NUMA 拓扑上可能变为远程。此外,因为将虚拟 NUMA 节点映射到物理 NUMA 节点可能会根据启动虚拟机时的内存可用性而有所不同,因此每次重新启动虚拟机后的性能可能不一致。

在以下情况中,可能会执行虚拟 NUMA 到物理 NUMA 的拆分:

1) 配置虚拟机时使用的虚拟 NUMA 节点大于主机的物理 NUMA 节点。这可能是由手动配置虚拟机的 NUMA 设置导致的,或者是因为虚拟机最初在运行 Hyper-V 的服务器上创建,然后移动到具有不同物理 NUMA 拓扑的服务器。

2) 当前在物理 NUMA 节点上分配可用内存需要至少一个虚拟 NUMA 节点受到多个物理 NUMA 节点上的内存支持。可用内存分配不均可能由其他虚拟机的内存使用情况或主计算机系统导致。

当 NUMA 跨越处于禁用状态时,如果强制虚拟机在两个或多个物理 NUMA 节点之间拆分虚拟 NUMA 节点,则 Hyper-V 将不会启动、还原或接受虚拟机的实时迁移。这可确保始终以最佳性能运行虚拟机。每个虚拟 NUMA 节点都由一个物理 NUMA 节点支持,并且虚拟 NUMA 拓扑与物理服务器的 NUMA 拓扑完全一致。建议始终需要最佳性能的 NUMA 感知工作负载使用此设置,但它可能导致虚拟机无法启动、还原或迁移。

启用或禁用 NUMA 跨越的优点和缺点

NUMA跨越

优点

缺点

启用

虚拟机可以利用在主机上提供的任何内存,而不考虑跨物理 NUMA 节点的分配。

将启动虚拟机,而不考虑其虚拟 NUMA 拓扑,即使它与主机的物理 NUMA 拓扑不一致也是如此。

虚拟机性能在每次虚拟机重新启动后可能有所不同。

虚拟 NUMA 一致性在每次启动后可能有所不同。

NUMA 感知工作负载可能不会以最佳方式执行,因为虚拟 NUMA 拓扑可能与物理 NUMA 拓扑不一致。

禁用

NUMA 感知工作负载能够以最佳方式执行,因为虚拟 NUMA 拓扑与物理 NUMA 拓扑一致。

虚拟机性能在每次重新启动后保持一致。

如果任何虚拟 NUMA 节点无法完全放置在单个物理 NUMA 节点内,虚拟机将无法启动。

如果虚拟机的虚拟 NUMA 拓扑未配置为与目标主机的物理 NUMA 拓扑一致,则可能无法将虚拟机迁移到给定主机。

启用了动态内存的虚拟机使用的处理器或内存不能多于单个物理 NUMA 节点中提供的数量。

虚拟NUMA

若要支持虚拟化较大的扩展工作负载,Windows Server 2012 中的 Hyper-V 将提供扩展的虚拟机扩展限制。最多可以向单个虚拟机分配 64 个虚拟处理器和 1 TB 的内存。在创建更大的虚拟机时,可能会使用主机系统上多个 NUMA 节点中的内存。在此类虚拟机配置中,如果虚拟处理器和内存继续从单个 NUMA 节点中进行分配,则工作负载将不会利用 NUMA 优化功能,并且性能将会降低。

在 Windows Server 2012 中,Hyper-V 将向虚拟机提供虚拟 NUMA 拓扑。在默认情况下,将优化此虚拟 NUMA 拓扑以匹配基础主计算机的 NUMA 拓扑。通过在虚拟机中公开虚拟 NUMA 拓扑,可允许来宾操作系统以及在其中运行的任何 NUMA 感知应用程序利用 NUMA 性能优化,就像在物理计算机上运行时的行为一样。

从工作负载的角度来看,虚拟和物理 NUMA 之间没有区别。在虚拟机中,当工作负载为数据分配本地内存并在同一个 NUMA 节点中访问该数据时,将在基础物理系统上快速访问本地内存结果。可成功避免由于远程内存访问而引起的性能损失。

右键虚拟机,选择设置,展开处理器,,点击NUMA

Hyper-V Server NUMA_处理器_05