Hat jemand Daten oder grundlegende Berechnungen, die beantworten können, wenn Frame Coalescing (NAPI) erforderlich ist und ein einzelner Interrupt pro Frame ausreicht?
Meine Hardware: IBM BladeServer HS22, Broadcom 5709 Gigabit-NIC-Hardware (MSI-X) mit zwei Xeon E5530-Quad-Core-Prozessoren. Hauptzweck ist der Squid-Proxy-Server. Switch ist eine schöne Cisco 6500-Serie.
Unser Hauptproblem ist, dass in Spitzenzeiten (100 Mbit / s, nur 10.000 pps) die Latenz und der Paketverlust zunehmen. Ich habe eine Menge Tuning und Kernel-Upgrade auf 2.6.38 durchgeführt und es hat den Paketverlust verbessert, aber die Latenz ist immer noch schlecht. Pings sind sporadisch; Springen sogar auf 200 ms im lokalen Gbit / s-LAN. Die durchschnittliche Squid-Antwort springt von 30 ms auf über 500 ms, obwohl die CPU- / Speicherlast in Ordnung ist.
Die Interrupts steigen während der Spitze auf ungefähr 15.000 / Sekunde. Ksoftirqd verbraucht nicht viel CPU. Ich habe irqbalance installiert, um die IRQs (jeweils 8 für eth0 und eth1) auf alle Kerne zu verteilen, aber das hat nicht viel geholfen.
Intel-NICs scheinen diese Art von Problemen nie zu haben, aber aufgrund des Bladesystems und der festen Konfigurationshardware bleiben wir bei den Broadcoms hängen.
Alles deutet darauf hin, dass der NIC der Hauptschuldige ist. Die beste Idee, die ich derzeit habe, ist es, die Interrupts zu verringern und gleichzeitig die Latenz und den Durchsatz hoch zu halten.
Das bnx2 unterstützt leider weder adaptive-rx noch tx.
Die Thread-Antwort NAPI vs Adaptive Interrupts bietet einen umfassenden Überblick über die Interrupt-Moderation, enthält jedoch keine konkreten Informationen zur Berechnung der optimalen ethtool-Koalesce-Einstellungen für eine bestimmte Problemumgehung. Gibt es einen besseren Ansatz als nur Versuch und Irrtum?
Benötigt die oben erwähnte Workload- und Hardwarekonfiguration überhaupt NAPI? Oder sollte es in der Lage sein, von einem einzelnen Interrupt pro Paket zu leben?