Ubuntu系统中TCP窗口大小的合理配置方法及性能影响咨询
Ubuntu系统中TCP窗口大小的合理配置方法及性能影响咨询
嘿,我最近在折腾自己的DIY路由器迭代版——这套新系统带一对10G网口,用的是R68S U1跑Ubuntu 23.04。
最开始用iperf2和一台确定能跑满10G的设备做测速,结果只能跑到5G的速度。后来看到华硕的设备指南里建议用800k窗口大小来测试,于是我在路由器上执行了这个命令:
geek@router-t1:~$ iperf -s -w 800k
输出是这样的:
------------------------------------------------------------ Server listening on TCP port 5001 TCP window size: 416 KByte (WARNING: requested 781 KByte) ------------------------------------------------------------ [ 1] local 10.0.0.1 port 5001 connected with 10.0.0.2 port 52191 [ ID] Interval Transfer Bandwidth [ 1] 0.0000-60.0461 sec 35.0 GBytes 5.01 Gbits/sec
有意思的是,这里显示实际的TCP窗口比我请求的要小,正好对应华硕指南里提到的问题。而且这个情况只在Linux客户端上出现,Windows客户端完全没这毛病——这点挺奇怪的,不过可能是另一个问题了。
之后我添加了这些内核参数:
net.core.wmem_max=4194304 net.core.rmem_max=12582912 net.ipv4.tcp_rmem = 4096 87380 4194304 net.ipv4.tcp_wmem = 4096 87380 4194304
改完之后再测速,性能直接翻倍了:
geek@router-t1:~$ iperf -s -w 800k -B 10.0.0.1
输出:
------------------------------------------------------------ Server listening on TCP port 5001 TCP window size: 1.53 MByte (WARNING: requested 781 KByte) ------------------------------------------------------------ [ 1] local 10.0.0.1 port 5001 connected with 10.0.0.2 port 57480 [ ID] Interval Transfer Bandwidth [ 1] 0.0000-60.0443 sec 69.2 GBytes 9.90 Gbits/sec
我知道这些参数是调整套接字接收缓冲区和新创建套接字的缓冲区大小的,但现在有两个疑问想请教大家:
- 怎么计算出适合自己系统的TCP窗口/缓冲区大小?
- 为什么调整这些参数会对10G网络的性能产生这么大的影响?
备注:内容来源于stack exchange,提问作者Journeyman Geek
相关产品推荐
相关产品推荐

