Quelqu'un a-t-il des données ou des calculs de base qui peuvent répondre lorsque la fusion de trames (NAPI) est requise et lorsqu'une seule interruption par trame est suffisante?
Mon matériel: IBM BladeServer HS22, matériel Broadcom 5709 Gigabit NIC (MSI-X), avec deux processeurs quadricœurs Xeon E5530. Le but principal est le serveur proxy Squid. Le commutateur est une belle série Cisco 6500.
Notre problème de base est que pendant les périodes de pointe (100 Mbps de trafic, seulement 10 000 pps), la latence et la perte de paquets augmentent. J'ai fait beaucoup de réglages et de mise à niveau du noyau vers 2.6.38 et cela a amélioré la perte de paquets mais la latence est toujours médiocre. Les pings sont sporadiques; sautant même à 200 ms sur le LAN local Gbps. La réponse moyenne de Squid passe de 30 ms à 500 + ms même si la charge CPU / mémoire est correcte.
Les interruptions grimpent à environ 15 000 / seconde pendant le pic. Ksoftirqd n'utilise pas beaucoup de CPU; J'ai installé irqbalance pour équilibrer les IRQ (8 pour eth0 et eth1) sur tous les cœurs, mais cela n'a pas beaucoup aidé.
Les cartes réseau Intel ne semblent jamais avoir ce genre de problèmes, mais en raison du système de lames et du matériel de configuration fixe, nous sommes en quelque sorte coincés avec les Broadcom.
Tout indique que la carte réseau est le principal coupable. La meilleure idée que j'ai en ce moment est d'essayer de diminuer les interruptions tout en maintenant à la fois une latence faible et un débit élevé.
Le bnx2 ne prend malheureusement pas en charge l'adaptive-rx ou le tx.
La réponse du thread NAPI vs Adaptive Interrupts offre une excellente vue d'ensemble de la modération des interruptions, mais aucune information concrète sur la façon de calculer les paramètres optimaux de fusion ethtool pour une solution de contournement donnée. Existe-t-il une meilleure approche que des essais et erreurs?
La charge de travail et la configuration matérielle mentionnées ci-dessus ont-elles même besoin de NAPI? Ou devrait-il pouvoir vivre sur une seule interruption par paquet?