如何在Linux中禁用TCP慢启动?

14

我正在寻找禁用TCP慢启动机制以提高高速网络的性能。 目前,客户端通过非阻塞1Gbps链路向随机服务器发送100MB流量。 按照我的计算,流量完成时间不到1秒钟。

但问题是它们无法达到完全的链路带宽。 换句话说,在获得完全的链路带宽之前,它们在慢启动阶段就完成了。
因此,我想将TCP拥塞窗口大小增加到最大值。

有人知道如何轻松更改该值而不修改内核吗?


更可能的是,您真正想要的是在接收器端将套接字接收缓冲区大小增加到至少带宽延迟乘积。 - user207421
1个回答

15

在Linux平台上,可以通过以下命令检查和禁用SSR设置:

$> sysctl net.ipv4.tcp_slow_start_after_idle
$> sysctl -w net.ipv4.tcp_slow_start_after_idle=0

除非禁用此行为,否则在连接处于闲置状态时也会使用慢启动。

/proc/sys/net/ipv4/tcp_slow_start_after_idle.

我可以通过这样的方式将拥塞窗口设置为最大值吗?“sudo ip route change default via X.X.X.X dev ethN initcwnd 100”和“sudo ip route change default via X.X.X.X dev ethN initrwnd 100”。 - Junho Suh
2
是的,你可以像这样设置。请参考http://www.cdnplanet.com/blog/tune-tcp-initcwnd-for-optimum-performance/。 - a.m.
如果您希望其保留(例如在重新启动后),请将 net.ipv4.tcp_slow_start_after_idle=0 添加到 /etc/sysctl.conf。 - redburn
4
对于找到这个答案的人,需要注意问题是关于TCP慢启动,但是这个答案是关于“慢启动重新开始”,它发生在现有套接字变得空闲之后。这可能会让一些人感到困惑,因为这个答案不会改变新连接的初始拥塞窗口大小,这由RFC 5681 §3.1规定,需要基于最大报文段长度设置initcwnd。对于往返时延较长的连接,通常有助于使用更好地调整拥塞窗口大小的cwnd调整算法,例如hybla(通过net.ipv4.tcp_congestion_control进行控制),并增加接收缓冲区的大小。 - kgibm
当我有多个接口时,是否可以仅针对特定接口禁用空闲后的慢启动?我认为这一功能对于互联网连接非常有意义,但对于本地连接应该禁用。 - Mikko Rantalainen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接