软件定义的网络中的 HNV 网关性能优化

本主题针对运行 Hyper-V 和托管 Windows Server 网关虚拟机的服务器提供了硬件规格和配置建议,并提供了 Windows Server 网关虚拟机 (VM) 的配置参数。 若要让 Windows Server 网关 VM 达到最佳性能,应遵循该指南中的做法。 下列部分包含部署 Windows Server 网关时需满足的硬件和配置要求。

  1. 有关 Hyper-V 硬件的建议
  2. Hyper-V 主机配置
  3. Windows Server 网关 VM 配置

有关 Hyper-V 硬件的建议

以下是运行 Windows Server 2016 和 Hyper-V 的每台服务器的最低建议硬件配置。

服务器组件 规范
中心处理单元 (CPU) 非统一内存体系结构 (NUMA) 节点数:2
如果主机上有多个 Windows Server 网关 VM,为了获得最佳性能,每个网关 VM 都应具有对一个 NUMA 节点的完全访问权限。 它应不同于主机物理适配器使用的 NUMA 节点。
每个 NUMA 节点的核心数 2
超线程 已禁用。 超线程不能提高 Windows Server 网关的性能。
随机存取内存 (RAM) 48 GB
网络接口卡 (NIC) 两个 10 GB NIC,网关性能将取决于线路速率。 如果线路速率小于 10 Gbps,则网关隧道吞吐数量也会基于同一因素减少。

确保分配给 Windows Server 网关 VM 的虚拟处理器数不超过 NUMA 节点上的处理器数。 例如,如果 NUMA 节点有 8 个核心,则虚拟处理器数应小于或等于 8。 为了获得最佳性能,该值应为 8。 若要找出 NUMA 节点数以及每个 NUMA 节点的核心数,请在每台 Hyper-V 主机上运行以下 Windows PowerShell 脚本:

$nodes = [object[]] $(gwmi –Namespace root\virtualization\v2 -Class MSVM_NumaNode)
$cores = ($nodes | Measure-Object NumberOfProcessorCores -sum).Sum
$lps = ($nodes | Measure-Object NumberOfLogicalProcessors -sum).Sum


Write-Host "Number of NUMA Nodes: ", $nodes.count
Write-Host ("Total Number of Cores: ", $cores)
Write-Host ("Total Number of Logical Processors: ", $lps)

重要

跨 NUMA 节点分配虚拟处理器可能会给 Windows Server 网关的性能造成负面影响。 运行多个 VM 并让每个 VM 使用一个 NUMA 节点的虚拟处理器的做法所产生的聚合性能,很有可能优于运行一个 VM 并向其分配所有虚拟处理器的做法。

当每个 NUMA 节点具有 8 个核心时,在选择要在每个 Hyper-V 主机上安装的网关 VM 数时,则建议使用一个具有 8 个虚拟处理器和至少 8GB RAM 的网关 VM。 在这种情况下,有一个 NUMA 节点专用于主机。

Hyper-V 主机配置

对于运行 Windows Server 2016 和 Hyper-V 且工作负载用于运行 Windows Server 网关 VM 的每台服务器,以下是建议配置。 这些配置说明包括 Windows PowerShell 命令的用法示例。 这些示例包含了占位符,用于表示你在环境中运行这些命令时需要提供的实际值。 例如,网络适配器名称占位符为“NIC1”和“NIC2”。在运行使用这些占位符的命令时,请使用服务器上网络适配器的实际名称,而不要使用占位符,否则命令将会失败。

注意

若要运行以下 Windows PowerShell 命令,你必须是管理员组的成员。

配置项 Windows PowerShell 配置
交换机嵌入式组合 创建具有多个网络适配器的 vswitch 时,它会自动为这些适配器启用交换机嵌入式协作。
New-VMSwitch -Name TeamedvSwitch -NetAdapterName "NIC 1","NIC 2"
Windows Server 2016 中不支持对 SDN 使用通过 LBFO 进行的传统协作。 交换机嵌入式协作支持对虚拟流量和 RDMA 流量使用同一组 NIC。 此前这是不适用于基于 LBFO 的 NIC 协作的。
物理 NIC 上的中断裁决 使用默认设置。 若要检查该配置,可以使用以下 Windows PowerShell 命令:Get-NetAdapterAdvancedProperty
物理 NIC 上的接收缓冲区大小 可以通过运行 Get-NetAdapterAdvancedProperty 命令,来验证物理 NIC 是否支持此参数的配置。 如果 NIC 不支持此参数,该命令的输出将不包含属性“Receive Buffers”。如果 NIC 确实支持此参数,你可以使用以下 Windows PowerShell 命令设置接收缓冲区大小:
Set-NetAdapterAdvancedProperty "NIC1" –DisplayName "Receive Buffers" –DisplayValue 3000
物理 NIC 上的发送缓冲区大小 可以通过运行 Get-NetAdapterAdvancedProperty 命令,来验证物理 NIC 是否支持此参数的配置。 如果 NIC 不支持此参数,该命令的输出将不包含属性“Send Buffers”。如果 NIC 确实支持此参数,你可以使用以下 Windows PowerShell 命令设置发送缓冲区大小:
Set-NetAdapterAdvancedProperty "NIC1" –DisplayName "Transmit Buffers" –DisplayValue 3000
物理 NIC 上的接收方缩放 (RSS) 可以通过运行 Windows PowerShell 命令 Get-NetAdapterRss,来验证物理 NIC 是否已启用 RSS。 可以使用以下 Windows PowerShell 命令在网络适配器上启用和配置 RSS:
Enable-NetAdapterRss "NIC1","NIC2"
Set-NetAdapterRss "NIC1","NIC2" –NumberOfReceiveQueues 16 -MaxProcessors
注意:如果启用了 VMMQ 或 VMQ,则不必在物理网络适配器上启用 RSS。 可以在主机虚拟网络适配器上启用它
VMMQ 若要为 VM 启用 VMMQ,请运行以下命令:
Set-VmNetworkAdapter -VMName <gateway vm name>,-VrssEnabled $true -VmmqEnabled $true
注意:并非所有网络适配器都支持 VMMQ。 目前,Chelsio T5 和 T6、Mellanox CX-3 和 CX-4 以及 QLogic 45xxx 系列支持它
NIC 组上的虚拟机队列 (VMQ) 可以使用以下 Windows PowerShell 命令在 SET 组上启用 VMQ:
Enable-NetAdapterVmq
注:仅当 HW 不支持 VMMQ 时,才应启用此功能。 如果支持 VMMQ,应启用它以提高性能。

注意

仅当 VM 上的负载较高且 CPU 使用率达到最大时才使用 VMQ 和 vRSS。 只有在这种情况下才会出现至少有一个处理器核心达到最大输出的情况。这时候便可借助 VMQ 和 vRSS 将处理负载分散到多个核心。 这不适用于 IPsec 流量,因为 IPsec 流量仅限于单个核心。

Windows Server 网关 VM 配置

在两台 Hyper-V 主机上,可以配置多个已使用 Windows Server 网关配置成网关的 VM。 在 Hyper-V 主机上,可以使用虚拟交换机管理器创建一个与 NIC 组绑定的 Hyper-V 虚拟交换机。 请注意,为了获得最佳性能,应在 Hyper-V 主机上部署单个网关 VM。 以下是每个 Windows Server 网关 VM 的建议配置。

配置项 Windows PowerShell 配置
内存 8 GB
虚拟网络适配器数 3 个 NIC,具体用途如下:1 个由管理操作系统用于管理,1 个用于提供对外部网络的访问,1 个仅提供对内部网络的访问。
接收方伸缩 (RSS) 可以对管理用的 NIC 使用默认 RSS 设置。 以下示例配置适用于具有 8 个虚拟处理器的 VM。 对于外部和内部 NIC,可以使用以下 Windows PowerShell 命令来启用 RSS,并将 BaseProcNumber 设置为 0、MaxRssProcessors 设置为 8:
Set-NetAdapterRss "Internal","External" –BaseProcNumber 0 –MaxProcessorNumber 8
发送方缓冲区 可以为管理用的 NIC 使用默认发送方缓冲区设置。 对于内部和外部 NIC,可以使用以下 Windows PowerShell 命令将发送方缓冲区配置为使用 32 MB 的 RAM:
Set-NetAdapterAdvancedProperty "Internal","External" –DisplayName "Send Buffer Size" –DisplayValue "32MB"
接收方缓冲区 可以为管理用的 NIC 使用默认接收方缓冲区设置。 对于内部和外部 NIC,可以使用以下 Windows PowerShell 命令将接收方缓冲区配置为使用 16 MB 的 RAM:
Set-NetAdapterAdvancedProperty "Internal","External" –DisplayName "Receive Buffer Size" –DisplayValue "16MB"
转发优化 可以为管理用的 NIC 使用默认的转发优化设置。 对于内部和外部 NIC,可以使用以下 Windows PowerShell 命令来启用转发优化:
Set-NetAdapterAdvancedProperty "Internal","External" –DisplayName "Forward Optimization" –DisplayValue "1"