Alguém tem alguns dados ou cálculos básicos que podem responder quando é necessária a coalescência de quadros (NAPI) e quando uma única interrupção por quadro é suficiente?
Meu hardware: IBM BladeServer HS22, hardware Broadcom 5709 Gigabit NIC (MSI-X), com dois processadores quad-core Xeon E5530. O principal objetivo é o servidor proxy Squid. O switch é um bom Cisco 6500 series.
Nosso problema básico é que durante os horários de pico (tráfego de 100 Mbps, apenas 10.000 pps), a latência e a perda de pacotes aumentam. Fiz muitos ajustes e atualização do kernel para 2.6.38 e melhorou a perda de pacotes, mas a latência ainda é baixa. Pings são esporádicos; pulando até 200ms na LAN local de Gbps. A resposta média do Squid salta de 30ms para 500 + ms, mesmo que a carga da CPU / memória esteja boa.
As interrupções aumentam para cerca de 15.000 / segundo durante o pico. O Ksoftirqd não está usando muita CPU; Instalei o irqbalance para equilibrar os IRQs (8 cada um para eth0 e eth1) em todos os núcleos, mas isso não ajudou muito.
As NICs da Intel parecem nunca ter esse tipo de problema, mas, como o sistema de lâminas e o hardware de configuração fixa, estamos meio que presos às Broadcoms.
Tudo está apontando para a NIC como a principal culpada. A melhor ideia que tenho agora é tentar diminuir as interrupções, mantendo a latência baixa e a taxa de transferência alta.
Infelizmente, o bnx2 não suporta adaptive-rx ou tx.
A resposta do encadeamento NAPI versus interrupções adaptativas fornece uma excelente visão geral da moderação de interrupção, mas não há informações concretas sobre como calcular as configurações ideais de coalescência do ettool para uma solução alternativa fornecida. Existe uma abordagem melhor do que apenas tentativa e erro?
A carga de trabalho acima mencionada e a configuração de hardware precisam de NAPI? Ou deveria poder viver com uma única interrupção por pacote?