Variantes TCP em lsmod

1

Eu estava lendo sobre como as variantes de congestionamento TCP são implementadas no Linux. Cada variante é implementada como um módulo separado.

Quando li esta pergunta: Adicionar controle de congestionamento TCP variante para o Linux Ubuntu

Eu entendi que a variante pode ser carregada usando o modprobe.

Isso significa que, quando lsmod está em execução, o TCP cúbico deve mostrar como padrão-carregado? Quando executo lsmod, não consigo encontrar o módulo carregado associado ao controle de congestionamento. Existem tipos específicos de módulos do kernel listados em lsmod?

    
por Gautam Ramakrishnan 16.09.2018 / 13:26

1 resposta

0

Existe a questão a abordar e um pouco de esclarecimento para este caso específico (congestionamento).

Um módulo do kernel é uma parte do kernel que é opcional e não precisa estar presente na inicial do kernel começar nem depois, se não for necessário. É uma espécie de plug-in . Isso permite ter a maioria das funcionalidades disponíveis sob demanda, sem usar memória, se nunca usado. A maioria dos módulos pode ser compilada como módulos ou embutida. Se embutido, isso significa que você não encontrará um arquivo .ko do módulo porque ele já está no kernel inicial.

Você pode verificar o que foi feito:

  • ou conhecendo a opção de configuração (aqui CONFIG_TCP_CONG_CUBIC ), tendo acesso à configuração usada, geralmente como um arquivo em /boot/config-$(uname -r) , e verificando qual opção foi usada:

    grep CONFIG_TCP_CONG_CUBIC /boot/config-$(uname -r)
    
  • ou conhecendo o nome do módulo e verificando se o módulo está na lista de módulos internos:

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

Exemplos de resultados prováveis para o seu caso, já que você não encontrou o módulo, mas com o cubic provavelmente o padrão provavelmente significa que foi embutido:

$ 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

Então, isso responde à pergunta: considere que você tem o módulo sempre carregado, porque ele está embutido. Faz sentido ter o padrão embutido (geralmente é necessário).

A lista de arquivos de módulo internos que você pode encontrar em /lib/modules/$(uname -r) e ser exibida com lsmod , mas que não será exibida, pode ser exibida com cat /lib/modules/$(uname -r)/modules.builtin . Eles não são especiais, mas foram escolhidos assim (por sua distribuição Linux) com freqüência, mas nem sempre, porque um padrão tinha que ser escolhido entre uma lista de opções, para ser embutido, incluindo todas as dependências do módulo relacionadas.

Agora, sobre o pequeno esclarecimento: é claro que um módulo precisa ser carregado (ou embutido) para ter sua funcionalidade disponível. Mas o Q / A ao qual você se conectou não disse que apenas teve que carregar o módulo de congestionamento tcp para ativá-lo. Citação:

To try one of these you need to install it using modprobe -a tcp_westwood or whatever you want. You can then test it using this

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

Como esse pseudo-arquivo é de leitura / gravação, você pode simplesmente consultá-lo para saber qual congestionamento está em uso provavelmente com esse resultado:

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

Agora, para alterar o algoritmo:

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

O módulo foi carregado automaticamente e agora está em uso (alguns sistemas podem não ser carregados automaticamente).

De qualquer forma, a informação adequada para este caso específico está em /proc/sys/net/ipv4/tcp_congestion_control , não em lsmod .

    
por 16.09.2018 / 14:52