我是靠谱客的博主 醉熏超短裙,最近开发中收集的这篇文章主要介绍Windows TCP参数调优,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

最近研究TCP的性能优化,这里先总结下TCP的参数调优,主要参考下面网址并加上自己的一些理解和总结:
网址:https://www.speedguide.net/articles/windows-8-10-2012-server-tcpip-tweaks-5077

1.1 拥塞控制算法

Win10系统默认的是cubic拥塞控制算法,系统支持CTCP,DCTCP,CUBIC,NewReno四种拥塞控制算。
CTCP: 基于丢包和延迟的拥塞控制算法,ctcp维护了两个拥塞控制窗口,AIMD窗口和基于延迟的窗口,真正的滑动窗口是这两个窗口值之和。这是一种较新的拥塞控制方法,它更激进地增加了用于宽带连接的TCP发送窗口(具有较大的RWIN和BDP)。CTCP试图通过监视延迟变化和包丢失来最大化吞吐量。它还确保其行为不会对其他TCP连接产生负面影响。CTCP增加了接收窗口和发送的数据量,在高延迟/宽带互联网连接场景下,可以显著提高吞吐量和丢包恢复。
DCTCP: 基于显式拥塞通知(ECN)信令的网络拥塞反馈调整TCP窗口,旨在提高 低延迟/本地链路的吞吐量。
CUBIC: 基于丢包的拥塞控制算法,对丢包敏感,对延迟不敏感。TCP拥塞窗口使用三次方生长函数。它是为高速TCP传输而设计的。唯一的缺点是, 在大型BDP网络(如互联网)与非托管队列,如ADSL和LTE,它可能会导致bufferbloat。理论上它应该和CTCP一样好。

NewReno:基于丢包的拥塞控制算法,对丢包敏感,对延迟不敏感。不如cubic性能好。

微软推荐:CTCP或者CUBIC

设置命令:

cmd命令:

netsh int tcp set supplemental Internet
congestionprovider=ctcp

PowerShell命令:

Set-NetTCPSetting -SettingName InternetCustom
-CongestionProvider CTCP

1.2 滑动窗口相关

1) Receive
Window Auto-Tuning Level:

接收窗口自动调整级别,TCP接收窗口在TCP连接中起着非常重要的作用。它可以限制吞吐量,特别是在高速、高延迟的环境中,比如大多数internet连接。可能的设置如下:
disabled:为tcp接收窗口使用一个固定的值。将其限制为64KB(限制为65535)。
highlyrestricted:非常保守地允许接收窗口增长超过默认值
restricted:tcp接收窗口的增长严格控制超出其默认值的限制
normal:默认值,允许接收窗口增长以适应大多数情况
experimental:允许接收窗口增长以适应极端的场景(不推荐,它会降低常见场景的性能,仅用于研究目的)。它支持超过16 MB的RWIN值)
默认设置: normal
微软建议: normal (除非你有问题)
备注:可以尝试对高达10Mbps的连接使用“highlyrestricted”,因为它实际上使用了一个更高的未缩放RWIN值(16384
vs. 256个字节),并且仍然可以扩展到262140个字节。
设置命令:netsh int tcp set global
autotuninglevel=normal

2) InitialCongestionWindow(ICW):
Default setting: 2, 4, or 10, depending on OS version.
Recommended: 10
《An Argument for Increasing TCP’s Initial Congestion Window》Linux 3.0后采用了这篇论文的建议——把cwnd 初始化成了 10个MSS

3)InitialRTO:
Default value: 3000 (3 seconds)
Recommended: between 2000 (2 seconds) and 3000 (3 seconds).

4)MinRTO(read-only)不能能更改,默认: 300 (ms)

5)Windows Scaling heuristics:推荐设置为disable
能够自动将自己的TCP窗口自动调优行为更改为更保守的状态,而不管用户设置如何,会使得ReceiveWindow Auto-Tuning Level设置无效。
设置命令:netsh int tcp set heuristics disabled
Set-NetTCPSetting -SettingName InternetCustom -ScalingHeuristics
Disabled

6)TCP 1323 Timestamps:不常用,建议禁用
它的目的是通过在(RTO间隔内某些重新传输未确认的包来提高传输可靠性。时间戳的问题是,它们给每个包的20字节TCP报头增加了12个字节,因此enable会导致相当大的开销。

7)Max SYN Retransmissions
Possible values: 2 to 8
Default value: 2
Recommended: leave at 2

8)Setting MTU

1.3 延时相关

1)Receive-Side Scaling State (RSS):
建议启用。允许在多个处理器上并行处理接收的数据包,同时避免数据包重新排序。
Default: enabled
Recommended:
enabled (provided you have 2 or more processor cores and a NIC that can
handle RSS)
设置命令:netsh int tcp set global rss=enabled

2)Receive Segment Coalescing State (RSC):
RSC能够收集在同一个中断周期内接收到的数据包,并将它们放在一起,以便更有效地将它们传递到网络堆栈。这可以显著增加可处理的通信量。当较低的CPU利用率很重要时,启用可提高的吞吐量。微软建议禁用Web、邮件或数据库服务器,启用文件、FTP或媒体服务器.
可能的状态: enabled, disabled, default
默认状态:在Windows
10中enabled,在一些老版本中disabled。
建议:在低延迟和游戏或者使用Wi-Fi适配器场景时建议禁用。当吞吐量比CPU更重要时,建议enabled。微软建议Web、邮件或数据库服务器设置为disabled,对于文件、FTP或媒体服务器设置为enabled。
To disable using
netsh: netsh int tcp set global rsc=disabled
To disable using PowerShell cmdlets globally:
Set-NetOffloadGlobalSetting -ReceiveSegmentCoalescing disabled

3)Packet Coalescing
网络数据包分组,以限制接收中断的数量并减少所需处理的数量。
可能的状态: enabled, disabled, default
默认状态:在Win10中enabled
建议:在低延迟和游戏场景时建议禁用。当吞吐量比CPU更重要时,建议enabled。当延迟更重要时,建议disabled。
To check in Powershell:
Get-NetOffloadGlobalSetting
To enable:
Set-NetOffloadGlobalSetting
-PacketCoalescingFilter enabled (or disabled)

1.4 硬件相关

1)TCP Chimney Offload
offload 是将本来该操作系统进行的一些数据包处理(如分片、重组等)放到网卡硬件中去做, 降低系统 CPU 消耗的同时,提高处理的性能。网卡
offload 包括 LSO/LRO、GSO/GRO、TSO/UFO 等。

Chimney offload是在每个连接的基础上启动的,它减少了与网络相关的CPU开销,从理论上讲,通过为其他任务释放CPU时间,可以提高整个系统的性能。它是一个全局设置,必须启用它才能使许多其他offload工作。启用这个设置在过去有一些负面影响,因为网络适配器驱动程序有很多bug,但是随着时间的推移,它的实现已经变得更好了。它对于cpu限制的客户端计算机和非常快的宽带连接非常有用,但不推荐在某些服务器环境中使用。

Default:automatic
Recommended: disabled
To check the setting:
Get-NetOffloadGlobalSetting
netsh int tcp show global
Todisable TCP Chimney Offload using netsh:
netsh int tcp set global chimney=disabled

To set using Powershell cmdlets:
Set-NetOffloadGlobalSetting-Chimney Disabled (recommended: disabled*)

2)NetDMA State:
支持高级直接内存访问。本质上,它通过最小化CPU使用率提供了更有效地移动网络数据的能力。NetDMA通过使用DMA引擎使CPU从处理网卡数据缓冲区和应用程序缓冲区之间的内存数据传输中解放出来。
默认值:禁用
建议:不要管它(根据MS,Windows
8和更高版本不支持该设置)

3)Direct Cache Access (DCA):
允许I / O设备(例如网络控制器)将据直接传递到CPU缓存中。DCA的目的是减少高带宽(千兆位)环境中的内存延迟和内存带宽需求。DCA需要I / O设备,系统芯片组和CPU的支持。
可能的状态为:启用,禁用
默认状态:已禁用
推荐:启用(前提是CPU /芯片组/ NIC支持)。备注:和Chimney offload不可同时使用。
注意:对于较老的cpu,
DCA的影响更为显著。Win10更新中没有。

4)Checksum Offload
启用网络适配器上的校验和。
Default state:adapter-dependent
Recommended: enabled
In PowerShell:
Enable-NetAdapterChecksumOffload -Name * (use to enable checksum offload on all adapters that support it)
Disable-NetAdapterChecksumOffload -Name * (use to disable checksum offload for all network adapters)

5)Large Send Offload (LSO)
这是一种减轻TCP分段造成CPU负载的网络技术,理论上,该特性可以改善传输性能,降低CPU负载。LSO降低了中断率和总线事务到NIC的数量。此设置的问题是在许多级别上的错误实现,包括网络适配器驱动程序。Intel和Broadcom驱动程序默认启用了这个选项,就出现了很多问题。
建议:disable,LSO可能会影响时延

6)ECN
Capability:显式拥塞通知 ,建议禁用
它为路由器提供了另一种通信网络拥塞的方法。它的目的是减少转播。本质上,ECN假定包丢失的原因是路由器拥塞。它允许出现拥塞的路由器标记包,并允许客户端自动降低它们的传输速率,以防止进一步的包丢失。传统上,TCP/IP网络通过丢弃数据包来发出拥塞信号。当ECN成功协商后,一个ECN感知的路由器可能会在IP报头(DiffServ字段)中设置一个比特,而不是丢弃一个数据包,以发出拥塞的信号。接收方将拥塞指示回传给发送方,发送方必须像检测到丢包一样做出反应。
To change using PowerShell cmdlets:
Set-NetTCPSetting -SettingName InternetCustom -EcnCapability Disabled

1.5 修改注册表

1)DefaultTTL
TTL不会直接影响速度,而且在很多情况下可以单独使用。它是一个包在被丢弃之前所经过的时间和跳数的限制。一个太小的数字可能会导致数据包在到达目的地之前被丢弃。过大的数字(超过128)将导致丢失的IP数据包被丢弃时的延迟。在Windows 8/10/2012注册表中没有该设置时,系统默认值为128
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTcpipParameters
DefaultTTL=64 (DWORD, not present by default denoting 128, valid
range is 1-255, recommended: 64)

2)Host Resolution Priority Tweak
主机分辨率优先级调整,这是为了增加DNS/主机名解析的优先级,方法是将四个相关进程的优先级从默认值增加。需要注意的是,与其他数百个正在运行的进程相比,这增加了它们的优先级,同时保持了它们的顺序。
HKEY_LOCAL_MACHINE SYSTEM CurrentControlSet Services
Tcpip ServiceProvider
LocalPriority = 4(DWORD,默认499,建议4)
HostPriority = 5(DWORD,默认500,建议5)
DnsPriority = 6(DWORD,默认2000,建议6)
NetbtPriority

以上参数调优可以通过命令设置,也可以通过TCP优化器软件进行设置:
SG TCP Optimizer (version 4 Beta):SG TCP优化器
在这里插入图片描述

最后

以上就是醉熏超短裙为你收集整理的Windows TCP参数调优的全部内容,希望文章能够帮你解决Windows TCP参数调优所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(44)

评论列表共有 0 条评论

立即
投稿
返回
顶部