Eu escrevi uma postagem abrangente no blog sobre abrangente ajuste de rede que explica tudo sobre monitoramento, ajuste e otimização da pilha de rede do Linux (incluindo o peso do NAPI). Dê uma olhada.
Lembre-se: alguns drivers não desabilitam IRQs da NIC quando o NAPI é iniciado. Eles devem, mas alguns simplesmente não. Você pode verificar isso examinando o manipulador de IRQ no driver para ver se os IRQs estão sendo desativados.
Observe que os IRQs pesados são reativados em alguns casos, conforme mencionado no post do blog e abaixo.
Em relação às suas perguntas:
-
O aumento de
netdev_budget
aumenta o número de pacotes que o softirq NET_RX pode processar. O número de pacotes que podem ser processados também é limitado por um limite de tempo, que não é ajustável. Isso é para evitar que o softirq NET_RX comer 100% do uso da CPU. Se o dispositivo não receber pacotes suficientes para processar durante sua alocação de tempo, os hardirqs serão reneabled e o NAPI será desativado. -
Você também pode tentar modificar suas configurações de coalescência de IRQ para a NIC, se ela for suportada. Veja a postagem do blog acima para mais informações sobre como fazer isso e o que isso significa exatamente.
-
Você deve adicionar monitoramento ao seu arquivo
/proc/net/softnet_stat
. Os campos neste arquivo podem ajudá-lo a descobrir quantos pacotes estão sendo processados, se você está ficando sem tempo, etc.
Uma pergunta para você considerar, se eu puder:
Por que sua taxa de hardirq é importante? Provavelmente não importa, diretamente. O manipulador do hardirq no driver da NIC deve fazer o mínimo de trabalho possível, portanto, executar muito provavelmente não é um problema para o sistema. Se for, você deve medir isso com cuidado, pois parece muito improvável. No entanto, você pode ajustar as configurações de coalescência de IRQ e a afinidade da CPU de IRQ para distribuir o processamento para alterar o número de hardirqs gerados pela NIC e processados por uma CPU específica, respectivamente.
Você deve considerar se provavelmente está mais interessado no processamento de pacotes ou na latência do processamento de pacotes. Dependendo de qual é a preocupação, você pode ajustar sua pilha de rede adequadamente.
Lembre-se: para ajustar e otimizar completamente sua pilha de rede Linux, você precisa monitorar e ajustar cada componente. Eles estão todos interligados e é difícil (e muitas vezes incorreto) monitorar e ajustar apenas um único aspecto da pilha.