软件定义的网络中的 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
超线程 禁用 Hyper-Threading 不会提高 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 确实支持此参数,可以使用以下 Windows PowerShell 命令设置接收缓冲区大小:
Set-NetAdapterAdvancedProperty "NIC1" –DisplayName "Receive Buffers" –DisplayValue 3000
在物理 NIC 上发送缓冲区大小 可以通过运行命令 Get-NetAdapterAdvancedProperty来验证物理 NIC 是否支持此参数的配置。 如果 NIC 不支持此参数,则命令的输出不包括属性“发送缓冲区”。如果 NIC 确实支持此参数,可以使用以下 Windows PowerShell 命令设置发送缓冲区大小:
Set-NetAdapterAdvancedProperty "NIC1" –DisplayName "Transmit Buffers" –DisplayValue 3000
物理 NIC 上的接收方缩放 (RSS) 可以通过运行 Windows PowerShell 命令 Get-NetAdapterRs 来验证物理 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 以提高性能。

注释

VMQ 和 vRSS 仅在 VM 上的负载较高且 CPU 使用率达到最大值时才会成图。 只有这样,至少有一个处理器核心将达到最大负荷。然后,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 命令启用 BaseProcNumber 设置为 0 且 MaxRssProcessors 设置为 8 的 RSS:
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"