Das Vendor Whitepaper sagt: 5Mpps no prob. Ich bin schon bei 120kpps an der Wand. Wo ist der Engpass?

17

In dem Whitepaper von HP zu den QLogic (fka Broadcom) NetXtreme II-Adaptern , das die von mir getestete spezifische Netzwerkkarte enthält, heißt es (Seite 7), dass die Leistung ihrer kleinen Pakete für Pakete mit bis zu 256 Bytes / Paket über 5.000.000 Paketen / Sekunde liegt.

In meinen Tests mit einer App, in der ich die gesamte Verarbeitung mit Ausnahme des reinen UDP-Empfangsteils deaktiviert habe, kann ich nur bis zu 120.000 Pakete / Sek. Übertragen. Die Pakete sind gleichmäßig auf 12 Multicast-Gruppen verteilt.

Mir ist aufgefallen, dass es einen Core gibt (von jeweils 12 Cores auf den 2 Sockets), dessen Auslastung allmählich zunimmt, wenn ich die UDP- Sendegeschwindigkeit anhebe und die maximale Auslastung bei etwa 120.000 beträgt . Aber ich weiß nicht, was dieser Kern tut und warum. Es ist kein Single-Thread-Engpass in meiner App, da es keine Rolle spielt, ob ich eine einzelne Instanz der App für alle Multicast-Gruppen oder 12 Instanzen ausführe, die jeweils 1 Multicast-Gruppe verarbeiten. Der Engpass ist also nicht meine Receiver-App.

MSI ist aktiviert (überprüft über die Ansicht "Ressourcen nach Typ" im Geräte-Manager ) und RSS ist auch in den NIC-Einstellungen mit 8 Warteschlangen aktiviert. Was klammert sich also an diesen einen Kern? Alle NIC-Offloading-Funktionen sind derzeit aktiviert, aber das Deaktivieren hat nicht geholfen.

Wo könnte der Engpass sein?

Systemdetails:

  • ProLiant BL460c Gen9
  • Intel Xeon E5-2670 v3 (2 x 12 Kerne)
  • HP FlexFabric 10 GB 2-Port 536FLB NIC
  • Windows 2012 R2
Eugene Beresovsky
quelle
2
Wahrscheinlich werden alle rx- und tx-Interrupts vom selben Kern verarbeitet. Ich weiß nicht viel über Windows, aber es sollte eine gewisse SMP-Affinität eingerichtet werden, um gleichmäßig relevante IRQs zu verbreiten.
Xavier Lucas

Antworten:

13

Auch RSS ist in den NIC-Einstellungen mit 8 Warteschlangen aktiviert.

Das bedeutete leider nicht, dass RSS as eingesetzt wurde

netsh int tcp show global

zeigte:

TCP Global Parameters
----------------------------------------------
Receive-Side Scaling State : disabled

Nach dem Laufen (übrigens ohne Neustart)

netsh int tcp set global rss=enabled

RSS begann zu funktionieren und die Last, die sich früher auf diesem einen schlechten Kern befand, wird jetzt gleichmäßig auf viele Kerne auf einem der 2 NUMA-Knoten verteilt.

Ich habe nicht überprüft, ob ich damit die beworbenen MPPS-Lasten bewältigen könnte, aber die Decke wurde ausreichend angehoben, um das zu bewerten, was ich brauchte.

Eugene Beresovsky
quelle