Gerenciar tamanhos de buffer de anel NIC com ethtool é simples, por exemplo:
ethtool -G eth0 rx 4096 tx 4096
(Ou substitua eth0
por qualquer interface que você precise gerenciar.)
Fazer isso ao vivo é fácil.
O problema é que, quando você faz isso em cada interface escrava que faz parte de uma interface vinculada, você atrapalha o vínculo. (Os IDs do agregador, em muitos casos, não corresponderão depois da maneira como antes.) EDIT: Aprendi que esse não é um comportamento esperado. (Posso atualizar quando souber mais sobre por que isso aconteceu no caso que observei.)
No RHEL 7, você pode definir o tamanho do buffer de anel para aparecer no momento da inicialização, definindo o ETHTOOL_OPTS
valor /etc/sysconfig/network-scripts/ifcfg-eth0
para (por exemplo) ETHTOOL_OPTS="-G ${DEVICE} rx 4096 tx 4096"
(conforme o artigo de acesso Red Hat ). (Aviso: não testei se isso realmente evita a incompatibilidade de ID do agregador mencionada acima.)
No entanto, para o Ubuntu 18.04, não existe um lugar tão óbvio e fácil de procurar.
Eu mergulhei na documentação do netplan, na documentação da rede do systemd e no networkd-dispatcher.
Um colega meu surgiu com uma solução usando networkd-dispatcher que parece funcionar, mas não está claro se ainda pode haver condições de corrida envolvidas, de modo que apenas funcione , em vez de ser garantido para definir os tamanhos do buffer de anel antes do ligação de interface está configurada. Vou postar isso abaixo (mais tarde), mas não sei se é a resposta correta. (Além disso, não é mencionado em nenhuma documentação do systemd.)
Então a pergunta é:
Qual é a maneira nativa do systemd de gerenciar tamanhos de buffer de anel para interfaces ethernet no momento da inicialização antes que essas interfaces sejam vinculadas?
Aqui está uma regra do udev que funciona no Ubuntu 18:
Coloque isso
/etc/udev/rules.d/59-net.ring.rules
e ele entrará em vigor no início do processo de inicialização.A maneira nativa do systemd de definir parâmetros é com um
.link
arquivo (consulte a página de manual systemd.link , no entanto, atualmente não há uma maneira de definir os parâmetros do buffer de anel. Portanto, o AFAIK não existe uma maneira nativa do systemd de fazer isso. mudará quando um novo systemd com a solicitação de recurso do curinga for lançado com as opçõesRxBufferSize
eTxBufferSize
.Se você estiver realmente usando
/etc/network/interfaces
para configurar, basta usar umpre-up
comando lá. Esta seria a minha preferência em vez de se preocupar com systemd-networkd.Você pode configurar algumas regras do udev para corresponder ao dispositivo quando ele aparecer e executar o ethtool lá. Isso deve ser executado antes que o systemd seja informado sobre o dispositivo (e isso antes de fazer qualquer coisa com ele).
Você pode configurar um serviço systemd (tipo oneshot, apenas exec ethtool) para ser executado antes de qualquer serviço configurar seu dispositivo de vínculo e depois que o dispositivo aparecer e usá-lo. systemd fabrica
.device
unidades para dispositivos Ethernet; usesystemctl list-units | grep sys-subsystem-net
para encontrar o caminho certo (para que você possa ter seu serviço Quer/Depois dele).