Windows 服务器网络性能调优系列网卡篇

作者:Sender Su  来源:原创内容  发布日期:2023-04-08  最后修改日期:2023-04-08

题图的网卡是3COM 3C905-TX,作为一名IT老兵自己也收了一张作为履历见证。这货在百兆网年代是稳定吞吐量和低时延的代名词,尤其是集线器环境下号称抢线王。懂CSMA/CD协议的都明白集线器环境是个什么情况。

article banner

笔者:国际认证信息系统审计师、软考系统分析师

调优篇接下来是网卡。本文比较基础,所说的网卡只是普通企业使用的通用服务器网卡,而不是面向大型数据中心的Smart-NIC甚至DPU。另外有些网卡支持切换为存储局域网用的HBA,本文也不涉及HBA状态。

本篇涉及知识点:网卡、驱动程序、应用计算场景。

一张功能强大的网卡,以及可靠的驱动程序,是确保网络性能的关键因素。

现在的服务器产品100%都配备了板载网卡(LOM),在采购服务器的同时单独采购网卡的机会少了,导致试错的机会成本大增。

而且大部分服务器都只是板载了千兆网卡,如果服务器之间是万兆互联,这类网卡还是得自己选型采购。所以专门讨论网卡减少试错成本非常有必要。

首先集中讨论一下关注点,包括3个方面:

一、能耗

节能和高性能必然存在对立。在上一篇《Windows 服务器网络性能调优系列硬件篇》,已经讨论过系统整体的能耗设置会影响网卡的效能表现。

在网卡的角度看,其能耗与服务器的其它部件相比虽然不太起眼,但高速网卡上的散热片足以说明其功耗情况。很显然,网络的速度越高,网卡的功耗就会越大。顺便感慨一下“高速网络”这个词已经开始不包含千兆网了,现在动辄传输超过几个GB的文件,千兆都觉得慢。

不仅是BIOS的能耗设置会产生影响,有些网卡还具有空闲期间主动降低能耗的功能设计,但就可能导致猝发的网络传输在一开始存在明显增大的时延。

二、系统总线

随着PCIe一统天下,这个问题已经可以简单化到就是看网卡和插槽之间的匹配性。一般情况下,板载网卡不需要(没办法)考虑这个事情。但在采购独立网卡时就需要仔细研究。

首先是在配置独立网卡时,需要根据网卡的插槽要求去检查服务器(主板)是否提供了这样的插槽。PCIe 插槽的设计是带宽向下相容的,低倍数的卡可以插到高倍数的插槽上使用,如可以把PCIe 1x的卡插入到PCIe 16x(一般用来插显卡)的槽上使用。

其次是考虑插槽类型与网卡总带宽的关系。正常情况下,网卡所使用的插槽类型是与其吞吐量上限(总带宽)相关的。一般来说存在以下对应关系:

总带宽    插槽(PCIe 2.0或以上)
1GBbps或以下   PCIe 1x
2.5GBps~10GBps   PCIe 4x
10GBps或以上   PCIe 8x
100GBps   PCIe 16x

要注意,多端口网卡和插槽类型(也就是插槽的最大传输带宽)的关系。有些多端口网卡的制造目的仅为扩充端口实现负载均衡或故障转移,并不是为了提升吞吐量。例如双端口千兆网卡仅需要PCIe 1x槽时总吞吐量是达不到2GBps的。选型时可以依此类推。

另外,无论插槽的要求是否符合网卡吞吐量,都要知道一个插槽只代表了一个PCIe总线接口,也就是多端口网卡的所有网口都是共享同一个总线接口。相比独占总线接口来说,这必然会存在性能损失,对于高端网卡来说,该损失几乎可以忽略不计,但对于中低端网卡则可能会相对明显。

所以如果需要确保网络性能,还是应该按每个插槽一个网口的配对关系进行配置,虽然这不太现实。

三、交换机与网卡的配合

讨论网卡不能离开网络交换机。既然网卡发展的趋势一直是从CPU转移工作负载给网卡去完成,那么同样应该把能给交换机做的事情从网卡上转移出去。

交换机有一些功能需要网卡配合实现,其中最典型的是端口链路聚合(也称为端口捆绑)。该功能可以将多个端口聚合在一起等同单个端口来使用,实现提升单个端口的吞吐量(带宽)上限,或者实现负载均衡、链路失效保护等其他功能。

端口链路聚合技术发展了多年,有两种实现方式:基于操作系统和基于802.3ad以太网协议。后者有各种英文代名词,比如LACP,LAG,Trunking等。

基于操作系统的方式是通过把网卡设置为杂听模式并辅以调度算法实现,需要CPU参与计算。而基于802.3ad以太网协议的方式是通过交换机实现端口流量调度,不需要通过CPU实现负载调度。

很显然,任何基于CPU实现的聚合方法都有可能产生吞吐量损失和增加了延迟。所以首选的做法还是使用基于802.3ad以太网协议的方式。

同样道理适用于其它需要网卡同时做配置去配合实现的功能。由于交换机也是庞大的话题,这里就不展开了。

四、驱动程序

(1)64位系统和驱动程序寻址能力

根据微软的文档指出,网卡的驱动程序必须支持64位系统环境下对大于4GB以上内存地址的DMA操作,否则会面临着需要先缓冲到4GB以下的低位地址的两次缓冲而导致的性能丢失。但这个难以核实,因为就没见过哪个驱动程序的说明会清楚描述出这一点。

在Linux环境下通过lspci命令可以观察到网卡的大量功能细节信息,包括内存区域,但这并不同等于Windows环境。如下是lspci的一种输出情况:

Region 0: Memory at 91b30000 (64-bit, prefetchable) [size=64K]
Region 2: Memory at 91b40000 (64-bit, prefetchable) [size=64K]
Region 4: Memory at 91b50000 (64-bit, prefetchable) [size=64K]

高端网卡支持RDMA之类技术的可以肯定是符合这一点的,但中低端网卡尚无法确定。如果哪位网友知道如何核实这一条,不妨留言告知。

另外重复提一下,在上一篇:《Windows 服务器网络性能调优系列硬件篇》里面,BIOS的Integrated Devices设置有和这一项相关的设置:“Memory Mapped I/O above 4GB”,可以通过开启和关闭该选项去验证和测试网卡的表现。

(2)驱动程序功能特性

驱动程序是网卡(芯片)的功能特性与操作系统之间的桥梁。网卡芯片有什么功能,就会通过驱动程序中的设置提供给管理员进行设置。比如下图的服务器用千兆网卡:

broadcom-giga-1

broadcom-giga-2

上图中列出的大量分载(Offload,也有用“卸载”一词)功能特性,是把本来由CPU负责的计算转移给网卡芯片来负责,从而释放CPU并进一步减少时延、稳定网络吞吐。

这些分载功能以前曾经是高端网卡专属功能,现在都平民化了。说这个是因为需要指出,网上某些关于网卡调优的文章会错误地介绍某些分载功能(比如Large Send Offload,LSO,大数据量发送分载)的作用不是提升性能而只是降低CPU负担。其实那是因为当时某些网卡的分载能力还不如CPU。现在早已是时过境迁了。

也因如此,现在选择网卡的前提就应该是网卡是否具备这些分载能力。实际上就连笔者自己买的一只USB-C接口的千兆有线网卡,都有这些分载能力,且运行中可以跑满千兆带宽:

usb-ax88179-1

usb-ax88179-2

话说这个USB-C网卡甚至比某些品牌原厂提供的还好,无论是传输性能、稳定性还是发热量。

当然高端网卡还不止这些基本的分载能力,会提供更多的能力选项给用户设置:

broadcom-10g-1

broadcom-10g-2

broadcom-10g-3

另外,对于桌面用途的网卡,会有一些和服务器用途不同的功能选项:

intel-i219-1

intel-i219-2

intel-i219-3

需要注意的是有些功能特性会是服务器网卡专有的,桌面卡并不会提供。比如支持NUMA,支持RSS等,属于本质差异。

(3)功能特性设置解释

一项项地说估计赶跑不少读者,所以概括一下:

只要设置的名称中包含了这些词的,一律开启:

校验(Checksum)、分载(Offload)

相反地,如果包含这些词,一律关闭:

节能(Power Efficence)、低功耗(EEE、Energy-Effcient Ethernet、Green Ethernet)、电源关闭(Power Saving)、流控(Flow Control)、暂停(Suspend)、闲置(Idle)

还有就是但凡属于缓冲区(Buffer)设置的,增大数量都会对稳定吞吐量带来好处,但有可能会影响时延,最好是结合具体应用场景去考虑并测试实际效果。

为免本篇篇幅太长,能从设置名称直接理解的就不介绍了,只说一下三个设置:

电源关闭时降低速度

这个设置值得一提。在允许通过网络启动计算机时,必须在计算机关闭后依然维持网卡处于工作状态。开启该设置后网卡速度会降低为10MBps,从而实现节能。但某些网卡这个设置有负面作用,会因为接收到网络上的某些广播包而反复在正常速度状态和低速状态之间切换,从而导致在网络交换机上产生大量的端口链路状态变化日志记录,不胜其扰,所以除非能耗很关键或经测试确认不存在这个负面情况,否则不建议开启。

中断裁决(Interrupt Moderation Rate)

该设置又称为中断调解。微软的文档专门指出了这个设置对网络性能的影响。某些网络适配器提供了可选择的中断裁决的水平设置,可以裁决它们中断CPU的频率,也就是会有多紧迫地告诉CPU传输任务是否已经完成。

这个选项是CPU负载和网络传输延迟的取舍。较高的裁决中断水平会增大CPU的负载,但同时达到较低的传输延迟;反之较低的水平设置会减少CPU负载,但延迟就会增加。

如果完全关闭,那就是让CPU尽全力去应对,此时固然网络性能最高,但CPU负载可能会大到应用造成影响。这也再次说明了服务器具备足够多的CPU内核以及把网络传输绑定到专属的CPU内核对于提高网络性能的意义。

有些网卡则通过允许管理员设置较大的缓冲区去间接实现较低的中断裁决水平,这可以改善吞吐量情况,但对于降低延迟并不直接。

适应性帧间距调整

按网卡厂商的说明:“通过控制背靠背定时来补偿过多的以太网数据包碰撞。启用此功能后,网络适配器能动态适应网络通信条件。默认设置对多数计算机和网络都有很好效果。在个别情况下,更改此设置会提高性能。”

什么意思呢?其实还是以太网CSMA/CD原理。如果我们需要忽略这个原理中的碰撞侦测,强行发包,那就需要完全关闭这个设置。而厂商设计了这个设置的目的是在最大化传输发送能力和避免因为碰撞而导致需要重发之间的矛盾之间加入自适应能力,从而有效地稳定吞吐量。

简单概括,完全关闭该设置会达到最快的响应,但如果网络数据传输质量不行,尤其是广播包多的环境,可能会适得其反。

任何“适应性”的用词实际都是尝试预测未来,而网络传输的猝发性质是不可避免的,所以这依然属于取舍平衡。

五、应用场景考虑

1、按服务器上运行的应用能消耗的最大带宽,结合高可用和冗余去考虑,典型如单卡网口翻倍或者干脆两张网卡。交换机端口充裕的时候,服务器网口就不要闲着,端口捆绑要实施起来。

2、给虚拟化服务器用的网卡必须支持硬件虚拟化比如SR-IOV,否则软件模拟就是牺牲性能。

3、高端网卡支持NUMA,需要结合服务器本身的NUMA设置去设置。而服务器是否启用NUMA,则需要按具体运行的应用去适配。

4、应用流量是多数据流时,应配置具备Receive-Side Scaling(RSS)接收侧缩放分流的网卡,并结合服务器有多少CPU内核去考虑设置多少个分流队列。这个数目一般应少于等于可用的内核数。另外此类网卡需要带宽在10GBbps以上才有实际使用意义。

下一篇再具体探讨在Windows操作系统上的调优。

本栏目相关
  •  2014-01-05 解决虚拟化运行的 Windows Server 2003 标准版 出现“PNP0C80”未知设备
  •  2013-09-04 Windows Server 2008 重命名域和域控制器
  •  2015-05-11 解决Windows Server 2008 R2域控制器显示无法连接到Internet
  •  2020-02-27 服务器热加硬盘、热转RAID模式,配合LINUX卷操作实现不重启服务器完成扩容
  •  2020-02-23 WINDOWS SERVER 2012 R2 STANDARD 重装 WSUS 过程记录
  •  2023-01-26 Windows服务器折腾安装MegaRAID存储管理器17.05版
  •  2022-02-24 如何安装使用 Broadcom RAID卡命令行管理工具 StorCLI(或称PercCLI)?
  •  2023-02-26 能否用Windows服务器作为路由器?(基本配置篇)
  •  2022-10-17 安装 MegaRAID 存储管理器集中监控 DAS 存储状态
  • 本站微信订阅号:

    微信订阅号二维码

    本页网址二维码:

    本栏目热门内容
  • Acrobat虚拟PDF打印机执行打印时挂起,解决办法竟然...
  • LINKSYS交换机登录WEB界面显示不正确的解决方法
  • 又一次RAID 5阵列故障记录
  • 解决VMware vSphere ESXi 5.0 Update 1 中虚机不能...
  • 修改CentOS发行信息以绕过Dell服务器BIOS更新和DSET...
  • 解决虚拟化运行的 Windows Server 2003 标准版出现...
  • Windows Server 2008 重命名域和域控制器
  • Intel Nehalem CPU Errata 导致 VMWare ESXi(vSpher...
  • 一次很精神的电脑组装过程记录(但不是自己的电脑)...
  • 解决MySQL Cluster 备份总是失败,提示文件已存在的...
  • MegaCli安装及使用杂记
  • 解决WSUS显示客户端不全的问题
  • 解决 VMWare vSphere 6 客户端无法修改用户密码
  • 解决Windows Server 2008 R2域控制器显示无法连接到...
  • 本站服务器RAID 5阵列双硬盘失效挽救记录
  • 网站数据库从MySQL 5.0升级到5.6的记录
  • 解决MariaDB使用Percona XtraBackup增量备份出错
  • Linux 下的分区调整工具GParted实战
  • DELL PowerEdge 820 报CPU3 INTERNAL ERROR 的解决...
  • 修改arpwatch使通知邮件主题显示IP地址
  • 程序员漫画:如何用8种不同的编程语言去解救公主
  • 解决Samba WINS服务的错误解释问题
  • 解决很好用的多合一即时通信软件pidgin的崩溃问题
  • 使用 GParted 进行虚拟机硬盘分区调整操作
  • 解决Squid代理HTTP时在浏览器出现Content Encoding ...
  • 用Delphi编写使用到ADO的DLL的一些问题
  • 网站简单改版
  • 索尼系列手提电脑备份失败,出现700错误的解决办法
  • Dell R900服务器 BMC firmware incompatible with C...
  • 更多...