为 VM 网络适配器配置服务质量 (QoS)

适用于:Windows Server 2022、Windows Server 2019、Windows Server 2016,Azure Stack HCI 版本 21H2 和 20H2

你可以为虚拟机 (VM) 网络适配器配置软件定义网络 (SDN) 服务质量 (QoS),以限制虚拟接口上的带宽,从而防止高流量 VM 与其他 VM 网络流量竞争。 还可以将 SDN QoS 配置为对某个 VM 保留特定的带宽量,以确保无论网络上的其他流量如何,该 VM 都可以发送流量。 可对附加到传统 VLAN 网络的 VM 以及附加到 SDN 叠加网络的 VM 应用此配置。

你还可以配置“QoS 卸载”,以在物理网络适配器而不是虚拟交换机上强制实施 QoS 规则,从而降低 CPU 利用率并改进强制实施。 “QoS 卸载”是 Windows Server 2022 认证 NIC 中的一项可选功能,这些 NIC 已获得 Windows Server 软件定义的数据中心 (SDDC) 高级附加资格 (AQ)。 有关详细信息,请参阅选择网络适配器

SDN QoS 带宽限制

SDN QoS 为虚拟机提供发送端或接收端最大允许带宽的配置。 连接到传统 VLAN 网络的 VM 以及连接到 SDN 虚拟网络的 VM 支持此功能。 设置后,VM 将无法发送或接收超出配置的最大限制的流量。 对于 VM,可以选择配置发送端限制和/或接收端限制。

可以通过 SDN QoS 配置的设置包括:

  • OutboundReservedValue - 如果 outboundReservedMode 模式为“绝对”,则该值表示保证到虚拟端口进行传输(出口)的带宽(以 Mbps 为单位)。 如果 outboundReservedMode 模式为“WEIGHT”,则该值表示保证带宽的加权部分。

  • OutboundMaximumMbps - 指示虚拟端口(出口)允许的发送端最大带宽(以 Mbps 为单位)。

  • InboundMaximumMbps - 指示虚拟端口(入口)允许的接收端最大带宽(以 Mbps 为单位)。

SDN QoS 策略

设置 SDN 的网络控制器后,便可以继续部署 QoS 策略。 现在,可以使用网络控制器 PowerShell cmdlet 执行此操作。

对于下面使用的所有示例脚本,-ConnectionUri 表示网络控制器的 REST URI。 例如:https://nc.contoso.com

步骤 1:配置全局 QoS 设置

在网络控制器计算机或网络控制器的管理客户端上运行以下 PowerShell 命令。 这将使全局设置能够通过网络控制器配置 QoS 策略:

$vswitchConfig=[Microsoft.Windows.NetworkController.VirtualSwitchManagerProperties]::new()
$qos=[Microsoft.Windows.NetworkController.VirtualSwitchQosSettings]::new()
$qos.EnableSoftwareReservations=$true
$vswitchConfig.QosSettings =$qos
Set-NetworkControllerVirtualSwitchConfiguration -ConnectionUri $uri -Properties $vswitchConfig

步骤 2:配置 QoS 策略

首先需要确定要应用策略的工作负载 VM 网络接口:

$NwInterface=Get-NetworkControllerNetworkInterface -ConnectionUri $uri -ResourceId Vnet-VM2_Net_Adapter_0

接下来,配置网络接口上允许的入站和出站最大吞吐量:

$NwInterface.Properties.PortSettings.QosSettings= [Microsoft.Windows.NetworkController.VirtualNetworkInterfaceQosSettings]::new()
$NwInterface.Properties.PortSettings.QosSettings.InboundMaximumMbps ="1000"
New-NetworkControllerNetworkInterface -ConnectionUri $uri -ResourceId $NwInterface.ResourceId -Properties $NwInterface.Properties

QoS 卸载(可选)

可以将物理 NIC 配置为使用 QoS 卸载。 如果适配器支持 QoS 卸载,请确保使用以下两种方法之一启用 QoS 卸载:

  • 网络 ATC(推荐)
  • 使用适配器属性手动启用

使用网络 ATC

在具有 Compute 意图类型的所有适配器上,QoS 卸载会自动启用。 有关详细信息,请参阅使用网络 ATC 简化主机网络

注意

此选项仅适用于 Azure Stack HCI 订阅者。

手动启用

通过用于管理物理适配器属性的内置 cmdlet 可以手动启用 QoS 卸载。

重要

必须确保在每个主机的组中的每个物理 NIC 上启用 QosOffload。 否则,将通过虚拟交换机强制执行 QoS 规则,并导致效率降低。

使用以下 cmdlet 检查适配器是否支持 QosOffload,然后修改适配器属性:

Get-NetAdapterAdvancedProperty -Name <physical NIC Name> -RegistryKeyword *QosOffload
Enable QosOffload for your adapters:
Set-NetAdapterAdvancedProperty -Name  <physical NIC Name> -RegistryKeyword *QosOffload -RegistryValue 1

配置硬件 QoS

可以使用设置和策略来配置硬件 QoS。

步骤 1 - 配置全局 QoS 设置

在网络控制器计算机或网络控制器的管理客户端上执行以下步骤。 这将使全局设置能够通过网络控制器配置 QoS 策略。

$vswitchConfig=[Microsoft.Windows.NetworkController.VirtualSwitchManagerProperties]::new()
$qos=[Microsoft.Windows.NetworkController.VirtualSwitchQosSettings]::new()
$qos.EnableHardwareLimits=$true
$vswitchConfig.QosSettings =$qos
Set-NetworkControllerVirtualSwitchConfiguration -ConnectionUri $uri -Properties $vswitchConfig

步骤 2 - 配置 QoS 策略

首先确定要应用策略的工作负载 VM 网络接口:

$NwInterface=Get-NetworkControllerNetworkInterface -ConnectionUri $uri -ResourceId Vnet-VM2_Net_Adapter_0

接下来,配置网络接口上允许的最大出站吞吐量。 以下示例创建一个 QoS 规则,可将来自 VM 接口的出站流量限制为 1 Gbps.

重要

QoS 卸载仅支持 OutboundMaximumMbps。 不能将 OutboundReservedValue 或 InboundMaximumMbps 与 QoS 卸载一起使用。

$NwInterface.Properties.PortSettings.QosSettings= [Microsoft.Windows.NetworkController.VirtualNetworkInterfaceQosSettings]::new()
$NwInterface.Properties.PortSettings.QosSettings. EnableHardwareLimits=$true
$NwInterface.Properties.PortSettings.QosSettings.OutboundMaximumMbps ="1000"
New-NetworkControllerNetworkInterface -ConnectionUri $uri -ResourceId $NwInterface.ResourceId -Properties $NwInterface.Properties

注意

在实时迁移期间,虚拟机可能会移动到不支持 QoS 卸载的主机。 在这种情况下,实时迁移将成功,但 QoS 将回退到 SDN QoS。