Visão Geral
Você tem um appliance que foi atualizado para 9.4.2 patch 1 e notou que está tudo muito lento com muitos pacotes perdidos. O aparelho parece não responder.
O artigo Generic Receive Offload tem uma ótima explicação sobre o que é GRO e como ele funciona.
Solução
Para um dispositivo de software em execução em qualquer Hypervisor
Certifique-se de estar usando drivers Intel E1000 ou VMXnet3 para os adaptadores. Se isso não resolver o problema, siga estas etapas:
Esta solução funciona até uma atualização ou um downgrade desde que o script ifupdown seja reescrito.
- Acesse o Shell do Kerio Control usando SSH. Copie e cole todo o código de cada etapa em uma única linha.
- Verifique o estado atual do generic-receive-offload executando esta linha:
- hwinfo --network --short | tail -n +2 | awk '{print $1}' | xargs -i sh -c 'echo {}; ethtool -k {} | grep generic-receive'
- Execute esta linha no SSH. Ele desativa o GRO (descarregamento de recebimento genérico) em todas as interfaces ethernet (se você pular esta etapa, certifique-se de reiniciar o dispositivo após a última etapa):
- hwinfo --network --short | tail -n +2 | awk '{print $1}' | xargs -I {} ethtool -K {} gro off
- Se isso corrigir o problema, para tornar a solução permanente, digite a seguinte linha (e pressione Enter) para permitir modificações no sistema de arquivos e adicione a redefinição do GRO após todas as alterações na interface e, em seguida, torne o sistema de arquivos somente leitura novamente:
mount -o rw,remount /; printf "#/bin/bash\n\nhwinfo --network
--short | tail -n +2 | awk '{print \$1}' | xargs -I {} ethtool -K {} gro
off" > /usr/bin/gro_fix; chmod 0755 /usr/bin/gro_fix; if ! grep -q
"gro_fix" "/usr/bin/ifupdown"; then printf "\n\nsetsid /usr/bin/gro_fix
&2>1 $\n" >> /usr/bin/ifupdown; fi; mount -o ro,remount /
Para um dispositivo de hardware:
Esta solução funciona até uma atualização ou um downgrade desde que o script ifupdown seja reescrito.
Primeiro, reinicie o dispositivo e não execute um teste de velocidade, pois isso faz com que o problema apareça. Em seguida, siga as etapas abaixo para potencialmente resolver o problema:
- Acesse o Shell do Kerio Control usando SSH. Copie e cole todo o código de cada etapa em uma única linha.
- Verifique o estado atual do generic-receive-offload executando esta linha:
hwinfo --network --short | tail -n +2 | awk '{print $1}' | xargs -i sh -c 'echo {}; ethtool -k {} | grep generic-receive' - Execute esta linha no SSH Habilita o GRO (descarregamento de recebimento genérico) em todas as interfaces ethernet e desabilita o GRO para as interfaces de loopback de software, kvnet e VLAN (se você pular esta etapa, certifique-se de reiniciar o dispositivo após a última etapa):
hwinfo --network --short | tail -n +2 | awk '{print $1}' | grep -v '\.' | xargs -I {} ethtool -K {} gro on; hwinfo --network --short | tail -n +2 | awk '{print $1}' | grep '\.' | xargs -I {} ethtool -K {} gro off; ethtool -K lo gro off; ethtool -K kvnet gro off - Se isso corrigir o problema, para tornar a solução permanente, digite a seguinte linha (e pressione Enter) para permitir modificações no sistema de arquivos e adicione a redefinição do GRO após todas as alterações na interface e, em seguida, torne o sistema de arquivos somente leitura novamente: mount -o rw,remount /; printf "#/bin/bash\n\nhwinfo --network --short | tail -n +2 | awk '{print $1}' | grep -v '\.' | xargs -I {} ethtool -K {} gro on\nhwinfo --network --short | tail -n +2 | awk '{print $1}' | grep '\.' | xargs -I {} ethtool -K {} gro off\nethtool -K lo gro off\nethtool -K kvnet gro off\n" > /usr/bin/gro_fix; chmod 0755 /usr/bin/gro_fix; if ! grep -q "gro_fix" "/usr/bin/ifupdown"; then printf "\n\nsetsid /usr/bin/gro_fix &2>1 $\n" >> /usr/bin/ifupdown; fi; mount -o ro,remount /
Se você usa muito VLANs, por favor, use estas duas linhas em vez das dos passos 3 e 4:
hwinfo --network --short | tail -n +2 | awk '{print $1}' | xargs -I {} ethtool -K {} gro on; ethtool -K lo gro off; ethtool -K kvnet gro off
Solução permanente:
mount -o rw,remount /; printf "#/bin/bash\n\nhwinfo --network --short | tail -n +2 | awk '{print $1}' | xargs -I {} ethtool -K {} gro on\nethtool -K lo gro off\nethtool -K kvnet gro off\n" > /usr/bin/gro_fix; chmod 0755 /usr/bin/gro_fix; if ! grep -q "gro_fix" "/usr/bin/ifupdown"; then printf "\n\nsetsid /usr/bin/gro_fix &2>1 $\n" >> /usr/bin/ifupdown; fi; mount -o ro,remount /