选择网络适配器

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

本主题介绍了如何了解可能影响购买选择的网络适配器的某些功能。

网络密集型应用程序需要高性能网络适配器。 本部分探讨选择网络适配器的一些注意事项,以及如何配置不同的网络适配器设置以实现最佳网络性能。

提示

可以通过使用 Windows PowerShell 来配置网络适配器设置。 有关详细信息,请参阅 Windows PowerShell 中的网络适配器 Cmdlet

卸载功能

将任务从中心处理单元 (CPU) 卸载到网络适配器可以减少服务器上的 CPU 使用率,从而提高整体系统性能。

如果选择具有适当卸载功能的网络适配器,那么 Microsoft 产品中的网络堆栈可以将一个或多个任务卸载到网络适配器。 下表简要概述了 Windows Server 2016 中提供的不同卸载功能。

卸载类型 说明
TCP 的校验和计算 网络堆栈可以在发送和接收代码路径上卸载传输控制协议 (TCP) 校验和的计算和验证。 还可以在发送和接收代码路径上卸载 IPv4 和 IPv6 校验和的计算和验证。
UDP 的校验和计算 网络堆栈可以在发送和接收代码路径上卸载用户数据报协议 (UDP) 校验和的计算和验证。
IPv4 的校验和计算 网络堆栈可以在发送和接收代码路径上卸载 IPv4 校验和的计算和验证。
IPv6 的校验和计算 网络堆栈可以在发送和接收代码路径上卸载 IPv6 校验和的计算和验证。
大型 TCP 数据包分段 TCP/IP 传输层支持大量发送卸载 v2 (LSOv2)。 通过 LSOv2,TCP/IP 传输层可以将大型 TCP 数据包分段卸载到网络适配器。
接收方伸缩 (RSS) RSS 是一种网络驱动程序技术,支持在多处理器系统中跨多个 CPU 高效分配网络接收处理。 本主题的后面将提供更多有关 RSS 的详细信息。
Receive Segment Coalescing (RSC) RSC 能够将数据包组合在一起,以最大程度地减少主机执行所需的标头处理。 最多可以将 64 KB 的已接收有效负载合并为单个较大的数据包进行处理。 本主题的后面将提供更多有关 RSC 的详细信息。

接收方缩放

Windows Server 2016、Windows Server 2012、Windows Server 2012 R2、Windows Server 2008 R2 和 Windows Server 2008 支持接收方缩放 (RSS)。

某些服务器配置了多个逻辑处理器,这些处理器共享硬件资源(例如物理核心),并被视为同时多线程 (SMT) 对等方。 Intel 超线程技术就是一个例子。 RSS 将网络处理定向为每个核心最多一个逻辑处理器。 例如,在具有 Intel 超线程、4 个核心和 8 个逻辑处理器的服务器上,RSS 使用不超过 4 个逻辑处理器进行网络处理。

RSS 在逻辑处理器之间分配传入的网络 I/O 数据包,以便在同一逻辑处理器上处理属于同一 TCP 连接的数据包,从而保留顺序。

RSS 还对 UDP 单播和多播流量进行负载均衡,并将相关流(通过对源地址和目标地址进行哈希处理来确定)路由到同一逻辑处理器,从而保留相关到达的顺序。 如果服务器的网络适配器少于符合条件的逻辑处理器,这有助于提高接收密集型方案的可伸缩性和性能。

配置 RSS

在 Windows Server 2016 中,可以使用 Windows PowerShell cmdlet 和 RSS 配置文件配置 RSS。

可以使用 Set-NetAdapterRss Windows PowerShell cmdlet 的 –Profile 参数定义 RSS 配置文件

用于 RSS 配置 的 Windows PowerShell 命令

通过以下 cmdlet,可以查看和修改每个网络适配器的 RSS 参数。

注意

有关每个 cmdlet 的详细命令参考(包括语法和参数),可以单击以下链接。 此外,可以在 Windows PowerShell 提示符处将 cmdlet 名称传递给 Get-Help,了解每个命令的详细信息

RSS 配置文件

可以使用 Set-NetAdapterRss cmdlet 的 –Profile 参数来指定将哪些逻辑处理器分配到哪个网络适配器。 此参数的可用值有:

  • Closest。 首选靠近网络适配器的基础 RSS 处理器的逻辑处理器编号。 使用此配置文件,操作系统可能会根据负载动态重新平衡逻辑处理器。

  • ClosestStatic。 首选靠近网络适配器的基础 RSS 处理器的逻辑处理器编号。 使用此配置文件,操作系统不会根据负载动态重新平衡逻辑处理器。

  • NUMA。 通常在不同的 NUMA 节点上选择逻辑处理器编号,以分配负载。 使用此配置文件,操作系统可能会根据负载动态重新平衡逻辑处理器。

  • NUMAStatic。 这是默认配置文件。 通常在不同的 NUMA 节点上选择逻辑处理器编号,以分配负载。 使用此配置文件,操作系统将不会根据负载动态重新平衡逻辑处理器。

  • Conservative。 RSS 使用尽可能少的处理器来维持负载。 此选项有助于减少中断次数。

根据方案和工作负载特征,还可以使用 Set-NetAdapterRss Windows PowerShell cmdlet 的其他参数来指定以下内容

  • 基于每个网络适配器,可以用于 RSS 的逻辑处理器数。
  • 逻辑处理器范围的起始偏移量。
  • 网络适配器从中分配内存的节点。

下面是可用于配置 RSS 的其他 Set-NetAdapterRss 参数

注意

在以下每个参数的示例语法中,网络适配器名称 Ethernet 用作 Set-NetAdapterRss 命令的 –Name 参数的示例值。 运行 cmdlet 时,请确保使用的网络适配器名称适合你的环境。

  • * MaxProcessors:设置要使用的 RSS 处理器的最大数目。 这可确保应用程序流量绑定到给定接口上的最大处理器数。 示例语法:

    Set-NetAdapterRss –Name "Ethernet" –MaxProcessors <value>

  • * BaseProcessorGroup:设置 NUMA 节点的基础处理器组。 这会影响 RSS 使用的处理器阵列。 示例语法:

    Set-NetAdapterRss –Name "Ethernet" –BaseProcessorGroup <value>

  • * MaxProcessorGroup:设置 NUMA 节点的最大处理器组。 这会影响 RSS 使用的处理器阵列。 设置此参数将限制最大处理器组,以便负载均衡在 k 组内对齐。 示例语法:

    Set-NetAdapterRss –Name "Ethernet" –MaxProcessorGroup <value>

  • * BaseProcessorNumber:设置 NUMA 节点的基础处理器编号。 这会影响 RSS 使用的处理器阵列。 这允许跨网络适配器对处理器进行分区。 这是分配给每个适配器的 RSS 处理器范围内的第一个逻辑处理器。 示例语法:

    Set-NetAdapterRss –Name "Ethernet" –BaseProcessorNumber <Byte Value>

  • * NumaNode:每个网络适配器都可以从中分配内存的 NUMA 节点。 这可以位于一个 k 组内,也可以来自不同的 k 组。 示例语法:

    Set-NetAdapterRss –Name "Ethernet" –NumaNodeID <value>

  • * NumberofReceiveQueues:如果逻辑处理器似乎没有得到充分利用以接收流量(例如在任务管理器中查看),则可以尝试将 RSS 队列中的数目从默认值 2 增加到网络适配器所支持的最大数目。 你的网络适配器可能具有将 RSS 队列数目作为驱动程序的一部分进行更改的选项。 示例语法:

    Set-NetAdapterRss –Name "Ethernet" –NumberOfReceiveQueues <value>

有关详细信息,请单击以下链接以 Word 格式下载可缩放的网络:消除接收处理瓶颈 - RSS 简介

了解 RSS 性能

优化 RSS 需要了解配置和负载均衡逻辑。 若要验证 RSS 设置是否已生效,可以在运行 Get-NetAdapterRss Windows PowerShell cmdlet 时查看输出。 下面是此 cmdlet 的示例输出。


PS C:\Users\Administrator> get-netadapterrss
Name                           : testnic 2
InterfaceDescription           : Broadcom BCM5708C NetXtreme II GigE (NDIS VBD Client) #66
Enabled                        : True
NumberOfReceiveQueues          : 2
Profile                        : NUMAStatic
BaseProcessor: [Group:Number]  : 0:0
MaxProcessor: [Group:Number]   : 0:15
MaxProcessors                  : 8

IndirectionTable: [Group:Number]:
     0:0    0:4    0:0    0:4    0:0    0:4    0:0    0:4
…
(# indirection table entries are a power of 2 and based on # of processors)
…
                          0:0    0:4    0:0    0:4    0:0    0:4    0:0    0:4

除了已设置的回显参数外,输出的关键方面是间接表输出。 间接表显示用于分配传入流量的哈希表存储桶。 在此示例中,n:c 表示法指定用于定向传入流量的 Numa K 组:CPU 索引对。 我们看到正好有 2 个唯一条目(0:0 和 0:4),分别表示 k 组 0/cpu0 和 k 组 0/cpu 4。

此系统只有一个 k 组(k 组 0)和一个 n(其中 n <= 128)间接表条目。 由于接收队列数设置为 2,因此仅选择 2 个处理器(0:0、0:4),即使最大处理器数设置为 8。 实际上,间接表正在对传入流量进行哈希处理,以便仅使用 8 个可用 CPU 中的 2 个。

若要充分利用 CPU,RSS 接收队列的数量必须等于或大于最大处理器数。 在前面的示例中,接收队列应设置为 8 或更大。

NIC 组合和 RSS

可以在使用 NIC 组合与另一个网络接口卡组合的网络适配器上启用 RSS。 在此方案中,只能将基础物理网络适配器配置为使用 RSS。 用户无法在组合的网络适配器上设置 RSS cmdlet。

Receive Segment Coalescing (RSC)

接收段合并 (RSC) 通过减少为给定数量的已接收数据处理的 IP 标头数来帮助提高性能。 它应该用于通过将较小的数据包分组(或合并)为较大的单元来帮助缩放已接收数据的性能。

此方法可能会影响延迟,其优势主要体现在吞吐量提升上。 建议使用 RSC 来增加已接收的繁重工作负载的吞吐量。 考虑部署支持 RSC 的网络适配器。

在这些网络适配器上,确保 RSC 处于打开状态(这是默认设置),除非有特定的工作负载(例如低延迟、低吞吐量的网络)显示 RSC 关闭的好处。

了解 RSC 诊断

可以使用 Windows PowerShell cmdlet Get-NetAdapterRsc 和 Get-NetAdapterStatistics 诊断 RSC

下面是运行 Get-NetAdapterRsc cmdlet 时的示例输出。


PS C:\Users\Administrator> Get-NetAdapterRsc

Name                       IPv4Enabled  IPv6Enabled  IPv4Operational IPv6Operational               IPv4FailureReason              IPv6Failure
                                            Reason
----                           -----------  -----------  --------------- --------------- ----------------- ------------
Ethernet                       True         False        True            False                  NoFailure       NicProperties

Get cmdlet 显示是否在接口中启用了 RSC,以及 TCP 是否使 RSC 处于操作状态。 失败原因提供有关未能在该接口上启用 RSC 的详细信息。

在前面的方案中,IPv4 RSC 在接口中受支持且可操作。 若要了解诊断失败,可以查看合并字节或导致的异常。 这提供了合并问题的指示。

下面是运行 Get-NetAdapterStatistics cmdlet 时的示例输出。

PS C:\Users\Administrator> $x = Get-NetAdapterStatistics "myAdapter"
PS C:\Users\Administrator> $x.rscstatistics

CoalescedBytes       : 0
CoalescedPackets     : 0
CoalescingEvents     : 0
CoalescingExceptions : 0

RSC 和虚拟化

仅当主机网络适配器未绑定到 Hyper-V 虚拟交换机时,物理主机才支持 RSC。 当主机绑定到 Hyper-V 虚拟交换机时,操作系统会禁用 RSC。 此外,虚拟机不会获得 RSC 的好处,因为虚拟网络适配器不支持 RSC。

启用单根输入/输出虚拟化 (SR-IOV) 时,可以为虚拟机启用 RSC。 在这种情况下,虚拟函数支持 RSC 功能;因此,虚拟机也可以获得 RSC 的好处。

网络适配器资源

一些网络适配器会主动管理其资源以实现最佳性能。 一些网络适配器允许使用适配器的“高级网络”选项卡手动配置资源。 对于此类适配器,可以设置多个参数的值,包括接收缓冲区数和发送缓冲区数。

使用以下 Windows PowerShell cmdlet 简化了网络适配器资源的配置。

有关详细信息,请参阅 Windows PowerShell 中的网络适配器 Cmdlet

有关本指南中所有主题的链接,请参阅网络子系统性能优化