O driver sky2
ficou inutilmente ruim por muitos anos.
Acredito que, na maioria das vezes, está bem, a versão 9.10 deve funcionar bem.
Eu tenho uma placa de rede:
02: 00.0 Controlador Ethernet: Marvell Technology Group Ltd. Controlador Ethernet Gigabit ASF 88E8050 PCI-E (rev 18)
E parece que o cartão é redefinido aleatoriamente. Aqui está um dmesg:
[751806.503694] sky2 eth1: hung mac 124:54 fifo 195 (128:123) [751806.503702] sky2 eth1: receiver hang detected [751806.504154] sky2 eth1: disabling interface [751806.504440] sky2 eth1: enabling interface [751809.712495] sky2 eth1: Link is up at 1000 Mbps, full duplex, flow control rx [970196.706605] sky2 eth1: hung mac 0:2 fifo 195 (194:189) [970196.706611] sky2 eth1: receiver hang detected [970196.706913] sky2 eth1: disabling interface [970196.707227] sky2 eth1: enabling interface [970199.917018] sky2 eth1: Link is up at 1000 Mbps, full duplex, flow control rx
Parece que há um problema com o driver de rede sky2; mas ainda não encontrei nenhuma resposta em outros fóruns. Você tem alguma sugestão? Posso usar outro driver para o cartão? É um bug conhecido?
Obrigado!
O driver sky2
ficou inutilmente ruim por muitos anos.
Acredito que, na maioria das vezes, está bem, a versão 9.10 deve funcionar bem.
Existe uma solução que funciona de forma confiável para mim em aproximadamente 10 caixas que possuem driver sky2. Todas as minhas caixas são Centos5 baseadas no kernel 2.6.18 (sim antigo para 2017). Eu descobri que depois dessas mensagens de log ...
sky2 eth1: receiver hang detected
sky2 eth1: disabling interface
sky2 eth1: enabling interface
... o driver parece interromper o descarregamento da soma de verificação para o hardware. Em alguns experimentos, eu consegui fazer com que ele falhasse parcialmente apenas pela sequência ifdown; ifup
, que parecia fazer com que o descarregamento da soma de verificação interrompesse apenas o tráfego UDP.
Então, desative o descarregamento da soma de verificação para o hardware:
ethtool --offload eth1 tx off
AVISO : para mim, ethtool --show-offload eth1
está e sempre afirma que está desativado. Vejo que configurar isso para on
ou off
muda claramente o comportamento, mas consultar seu estado é sempre mostrado como off
.
Agora, para que isso seja aplicado automaticamente, coloco isso em /sbin/ifup-local
:
#!/bin/bash
DEVICE=$1
if [[ "$DEVICE" == "eth0" || "$DEVICE" == "eth1" ]] ; then
ethtool --offload "$DEVICE" tx off
fi
mas algo semelhante provavelmente pode ser colocado em outros lugares também, por exemplo em algo como /etc/network/if-up.d/eth
no debian.
Tags networking ubuntu