Quando o tcpdump está rodando, será bastante rápido para ler nos quadros de entrada. Minha hipótese é que as configurações do buffer de anel de pacote da NIC podem ser um pouco menores; Quando o tcpdump está sendo executado, ele é esvaziado de maneira mais rápida.
Se você é um assinante da Red Hat, então este artigo de suporte é muito útil Visão geral da recepção de pacotes . Tem algumas coisas que eu não acho que você tenha considerado ainda.
Considere como seu sistema está lidando com IRQs; considere aumentar o 'dev_weight' da interface de rede (significando mais pacotes lidos do NIC para o espaço do usuário); veja com que frequência o aplicativo lê o soquete (ele pode usar um thread dedicado, existem problemas / soluções conhecidos relacionados à escalabilidade).
Aumente o buffer de quadros NIC (usando o comando ethtool
- veja os argumentos --set-ring
etc.).
Veja 'receba dimensionamento de lado' e use pelo menos que muitos segmentos recebam para ler no tráfego.
Gostaria de saber se o tcpdump está fazendo algo legal, como usar o suporte do kernel para buffers de anel de pacote . Isso ajudaria a explicar o comportamento que você está vendo.