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.


  1. Acesse o Shell do Kerio Control usando SSH. Copie e cole todo o código de cada etapa em uma única linha.
  2. 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' 
  3. 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
  4. 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:


  1. Acesse o Shell do Kerio Control usando SSH. Copie e cole todo o código de cada etapa em uma única linha.
  2. 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' 
  3. 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     
  4. 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 /