我使用 Ubuntu 20.04。
sysctl net.ipv4.tcp_available_congestion_control
返回:
net.ipv4.tcp_available_congestion_control = reno cubic
我不确定 reno 是否实际上是 new-reno。我在 wireshark 中看到丢失数据包的快速传输,并且有过去的 tcp man 说 new-reno 是 cubic 之前的默认 cc。我试图在https://elixir.bootlin.com但未能得到答案。
ls -la /lib/modules/$(uname -r)/kernel/net/ipv4
不要显示任何一个
reno 实际上是 new-reno 吗?如果不是,是否可以选择 new-reno?
我将非常感激有关在哪里可以找到这两样东西的信息!
答案1
内核源代码树中的相关文件是net/ipv4/tcp_cong.c
,并且标头是:
/ SPDX-License-Identifier: GPL-2.0-only
/*
* Pluggable TCP congestion control support and newReno
* congestion control.
* Based on ideas from I/O scheduler support and Web100.
*
* Copyright (C) 2005 Stephen Hemminger <[email protected]>
*/
该文件进一步内容如下:
/*
* TCP Reno congestion control
* This is special case used for fallback as well.
*/
/* This is Jacobson's slow start and congestion avoidance.
* SIGCOMM '88, p. 328.
*/
它是唯一没有内核配置开关的拥塞控制算法,它始终是内置的。cubic 显示为可用,因为在 Ubuntu 中内核配置设置为包含它,内置。其余可能的控制算法都是模块。内核配置的相关部分:
CONFIG_TCP_CONG_BIC=m
CONFIG_TCP_CONG_CUBIC=y
CONFIG_TCP_CONG_WESTWOOD=m
CONFIG_TCP_CONG_HTCP=m
CONFIG_TCP_CONG_HSTCP=m
CONFIG_TCP_CONG_HYBLA=m
CONFIG_TCP_CONG_VEGAS=m
CONFIG_TCP_CONG_NV=m
CONFIG_TCP_CONG_SCALABLE=m
CONFIG_TCP_CONG_LP=m
CONFIG_TCP_CONG_VENO=m
CONFIG_TCP_CONG_YEAH=m
CONFIG_TCP_CONG_ILLINOIS=m
CONFIG_TCP_CONG_DCTCP=m
CONFIG_TCP_CONG_CDG=m
CONFIG_TCP_CONG_BBR=m
CONFIG_DEFAULT_CUBIC=y
# CONFIG_DEFAULT_RENO is not set
CONFIG_DEFAULT_TCP_CONG="cubic"
因此默认情况下会得到(就像你做的那样):
doug@s19:~/kernel/linux$ cat /proc/sys/net/ipv4/tcp_available_congestion_control
reno cubic
但是一旦模块被加载,就会得到:
doug@s19:~/kernel/linux$ cat /proc/sys/net/ipv4/tcp_available_congestion_control
reno cubic bic westwood htcp highspeed hybla vegas veno lp nv scalable yeah illinois dctcp cdg bbr