lsmod 下的 TCP 变体

lsmod 下的 TCP 变体

我正在阅读有关如何在 Linux 中实现 TCP 拥塞变体的内容。每个变体都作为单独的模块实现。

当我读到这个问题时:向 Linux Ubuntu 添加 TCP 拥塞控制变体

我知道可以使用 modprobe 加载该变体。

这是否意味着当 lsmod 运行时,TCPcubic 必须显示为默认加载?当我运行 lsmod 时,我找不到与拥塞控制相关的加载模块。 lsmod 下是否列出了特定类型的内核模块?

答案1

有一个问题需要解决,并对这个特定情况(拥塞)进行一些澄清。

A内核模块是内核的一部分,是可选的,不必在内核初始启动时出现,也不必在以后出现(如果不需要)。这是一种插入。这允许按需提供大多数功能,而无需使用从未使用过的内存。大多数模块可以编译为模块或内置。如果是内置的,则意味着您将找不到.ko模块文件,因为它已经存在于初始内核中。

您可以检查做了什么:

  • 通过了解配置选项(此处CONFIG_TCP_CONG_CUBIC),访问所使用的配置(通常作为 中的文件)/boot/config-$(uname -r),并验证使用了什么选项:

    grep CONFIG_TCP_CONG_CUBIC /boot/config-$(uname -r)
    
  • 或者通过了解模块名称并检查该模块是否在内置模块列表中:

    fgrep tcp_cubic.ko /lib/modules/$(uname -r)/modules.builtin
    

由于您没有找到该模块,因此您的情况的可能结果示例,但对于立方体可能的默认值,这可能意味着它是内置的:

$ grep _CUBIC /boot/config-$(uname -r)
CONFIG_TCP_CONG_CUBIC=y
CONFIG_DEFAULT_CUBIC=y
$ fgrep tcp_cubic.ko /lib/modules/$(uname -r)/modules.builtin
kernel/net/ipv4/tcp_cubic.ko

因此,这回答了问题:考虑一下您始终加载该模块,因为它是内置的。内置默认值是有意义的(通常是必需的)。

/lib/modules/$(uname -r)您可能希望在其中某处找到并显示的内置模块文件列表,lsmod但您不会,可以使用cat /lib/modules/$(uname -r)/modules.builtin.它们并不特殊,但(由您的 Linux 发行版)经常(但并非总是)选择它们,因为必须在选项列表中选择默认值才能内置,包括所有相关的模块依赖项。

现在需要澄清一点:当然,必须加载(或内置)模块才能使用其功能。但你链接的问答并没有说你仅有的必须加载 TCP 拥塞模块才能激活它。引用:

要尝试其中之一,您需要使用 modprobe -a tcp_westwood 或任何您想要的方式安装它。然后你可以使用这个来测试它

echo "westwood" > /proc/sys/net/ipv4/tcp_congestion_control

由于此伪文件是读/写的,因此您只需查询它即可了解正在使用什么拥塞,结果可能如下:

$ cat /proc/sys/net/ipv4/tcp_congestion_control
cubic

现在改变算法:

# lsmod | grep tcp_westwood
# echo westwood > /proc/sys/net/ipv4/tcp_congestion_control
# lsmod | grep tcp_westwood
tcp_westwood           16384  1

该模块已自动加载并且正在使用(某些系统可能不会自动加载)。

无论如何,此特定情况的足够信息位于/proc/sys/net/ipv4/tcp_congestion_control,而不是lsmod的输出中。

相关内容