Freigeben über


Leistung in Netzwerkadaptern

Bei der Entscheidung, welche Hardwarefunktionen in einem Netzwerkadapter implementiert werden sollen, gibt es immer Kompromisse. Es wird immer wichtiger, Funktionen zum Offloading von Aufgaben in Betracht zu ziehen, die eine Interrupt-Moderation, eine dynamische Abstimmung der Hardware, eine bessere Nutzung des PCI-Busses und die Unterstützung von Jumbo Frames zulassen. Diese Offload-Funktionen sind wichtig für High-End-Netzwerkadapter, die in Konfigurationen eingesetzt werden, die höchste Leistung erfordern.

Unterstützung des TCP- und IP-Prüfsummen Offloads

Für den allgemeinen Datenverkehr bietet das Offloading der Prüfsummenberechnung auf die Hardware des Netzwerkadapters einen erheblichen Leistungsvorteil, da die Anzahl der pro Byte benötigten CPU-Zyklen reduziert wird. Die Prüfsummenberechnung ist aus zwei Gründen die teuerste Funktion im Networking-Stack:

  • Sie trägt zu einer langen Pfadlänge bei.
  • Sie führt zu Cache-Effekten (in der Regel beim Absender).

Das Offloading der Prüfsummenberechnung auf den Absender verbessert die Gesamtsystemleistung, indem es die Ladung der Host-CPU reduziert und die Cache-Effektivität erhöht.

Im Windows Performance Lab haben wir eine Verbesserung des TCP-Durchsatzes um 19 % gemessen, wenn die Prüfsummenberechnung bei netzwerkintensiven Workloads ausgelagert wurde. Die Analyse dieser Verbesserung zeigt, dass 11 % der Gesamtverbesserung auf die Verringerung der Pfadlänge und 8 % auf die Erhöhung der Effektivität der Zwischenspeicher zurückzuführen sind.

Das Offloading der Prüfsumme auf dem Empfänger hat die gleichen Vorteile wie das Offloading der Prüfsumme auf dem Absender. Ein größerer Nutzen ergibt sich auf Systemen, die sowohl als Client als auch als Server fungieren, wie z. B. ein Socket Proxy Server. Auf Systemen, bei denen die CPU nicht unbedingt ausgelastet ist, wie z. B. einem Client-System, zeigt sich der Vorteil des Offloads der Prüfsumme eher in besseren Netzwerkreaktionszeiten als in einem merklich verbesserten Durchsatz.

Unterstützung von Large Send Offload (LSO))

Windows bietet dem Netzwerkadapter/Treiber die Möglichkeit, TCP eine größere maximale Segmentgröße (Maximum Segment Size, MSS) als die MTU mitzuteilen (bis zu 64K). Dies bietet TCP die Möglichkeit, dem Treiber einen Puffer von bis zu 64K zuzuweisen, der den großen Puffer in Pakete unterteilt, die in die MTU des Netzwerks passen.

Die Arbeit der TCP-Segmentierung wird von der Hardware des Netzwerkadapters/Treibers und nicht von der CPU des Hosts übernommen. Dies führt zu einer erheblichen Leistungsverbesserung, wenn die CPU des Netzwerkadapters in der Lage ist, die zusätzliche Arbeit zu bewältigen.

Bei vielen der getesteten Netzwerkadapter wurden bei reinen Networking-Aktivitäten kaum Verbesserungen festgestellt, wenn die CPU des Hosts leistungsfähiger war als die Hardware des Netzwerkadapters. Für typische Workloads in Unternehmen wurde jedoch eine Verbesserung der Gesamtsystemleistung von bis zu 9 % des Durchsatzes gemessen, da die Host-CPU den Großteil ihrer Zyklen für die Ausführung von Transaktionen verwendet. In diesen Fällen befreit das Offloading der TCP-Segmentierung auf die Hardware die Host-CPU von der Ladung der Segmentierung und bietet ihr die Möglichkeit, zusätzliche Zyklen für die Ausführung weiterer Transaktionen zu nutzen.

Unterstützung für IP-Sec-Offloading

Windows bietet die Möglichkeit, die Verschlüsselungsarbeit von IPSec auf die Hardware des Netzwerkadapters zu offloaden. Verschlüsselung, insbesondere 3 DES (auch bekannt als Triple DES), hat ein sehr hohes Zyklen/Byte-Verhältnis. Daher überrascht es nicht, dass das Offloading von IPSec auf die Netzwerkadapter-Hardware bei Tests für sicheres Internet und VPN eine Leistungssteigerung von 30% gemessen hat.

Verbesserte Interrupt-Moderation

Ein einfacher Netzwerkadapter generiert einen Hardware-Interrupt auf dem Host, wenn ein Paket ankommt oder um den Abschluss einer Anfrage zum Senden eines Pakets zu signalisieren. Die Interrupt-Latenzzeit und die daraus resultierenden abwandernden Cache-Effekte erhöhen den Overhead der gesamten Networking-Leistung. In vielen Szenarien (z.B. bei starker Systemauslastung oder starkem Datenverkehr im Networking) ist es am besten, die Kosten des Hardware-Interrupts zu reduzieren, indem mehrere Pakete pro Interrupt verarbeitet werden.

Bei starkem Networking Workload wurde eine Verbesserung des Durchsatzes um bis zu 9 % bei netzwerkintensivem Workload gemessen. Wenn Sie die Parameter für die Interrupt-Moderation jedoch nur auf die Verbesserung des Durchsatzes abstimmen, kann dies zu einem Leistungseinbruch bei der Reaktionszeit führen. Um optimale Einstellungen beizubehalten und unterschiedliche Workloads zu berücksichtigen, bieten Sie am besten die Möglichkeit, dynamisch angepasste Parameter zuzulassen, wie im Abschnitt Auto-Tuning weiter unten in diesem Artikel beschrieben.

Effiziente Nutzung des PCI-Busses

Einer der wichtigsten Faktoren für die Hardware-Leistung des Netzwerkadapters ist, wie effizient er den PCI-Bus nutzt. Außerdem wirkt sich die DMA-Leistung des Netzwerkadapters auf die Leistung aller PCI-Karten aus, die sich auf demselben PCI-Bus befinden. Die folgenden Richtlinien müssen bei der Optimierung der PCI-Nutzung beachtet werden:

  • Optimieren Sie DMA-Übertragungen durch Aggregation von Zielseiten, wo dies sinnvoll ist.

  • Verringern Sie den PCI-Protokoll-Overhead, indem Sie DMA in großen Blöcken (mindestens 256 Byte) durchführen. Planen Sie den Flow der Daten nach Möglichkeit so, dass ganze Pakete in einer einzigen PCI-Transaktion übertragen werden. Überlegen Sie jedoch, wie die Übertragung erfolgen soll. Warten Sie z. B. nicht, bis alle Daten eingetroffen sind, bevor Sie mit der Übertragung beginnen, denn das Warten erhöht die Latenzzeit und verbraucht zusätzlichen Pufferplatz.

  • Es ist besser, die Übertragung des DMA-Pakets mit zusätzlichen Bytes aufzufüllen, als eine kurze zusätzliche Übertragung zu verlangen, um die letzten Bytes des Pakets „aufzuräumen“.

  • Verwenden Sie die Transaktionen Memory Read, Memory Read Line und Memory Read Multiple, wie in der PCI-Spezifikation empfohlen.

  • Die Hardware der Netzwerkadapter-Busschnittstelle sollte Einschränkungen im Host-Speicher-Controller erkennen und das Verhalten entsprechend anpassen. So sollte die Netzwerkadapter-Busschnittstellen-Hardware z. B. bei DMA Memory Reads Einschränkungen des Speicher-Controllers beim Pre-Fetch erkennen und eine kurze Zeit warten, bevor sie die Transaktion erneut versucht. Die Hardware sollte übermäßige Wiederholungsversuche seitens des Netzwerkadapters erkennen und die Zeit vor dem ersten Wiederholungsversuch bei zukünftigen Transaktionen erhöhen, wenn diese vom Host unterbrochen werden. Es ist sinnlos, weiterhin Transaktionen an den Speicher-Controller zu senden, wenn Sie sicher sind, dass dieser noch damit beschäftigt ist, den nächsten sequentiellen Datensatz zu holen.

  • Minimieren Sie die Einfügung von Wartezuständen, insbesondere bei Datenübertragungen. Es ist besser, den Bus aufzugeben und einen anderen PCI-Adapter, der den Bus benutzt, die Arbeit erledigen zu lassen, wenn mehr als ein oder zwei Wartezustände eingefügt werden müssen.

  • Verwenden Sie Memory Mapped E/A anstelle von Programmed I/O. Dies gilt auch für Treiber.

Unterstützung von Jumbo Frames

Die Unterstützung größerer maximaler Übertragungseinheiten (MTUs) und damit größerer Frame-Größen, insbesondere Jumbo Frames, reduziert den pro Byte anfallenden Overhead des Networking-Stacks. Es wurde eine Steigerung des TCP-Durchsatzes um 20 % gemessen, als die MTU von 1514 auf 9000 geändert wurde. Außerdem wird eine erhebliche Reduzierung der CPU-Auslastung erreicht, da weniger Aufrufe vom Networking-Stack an den Netzwerktreiber erfolgen.