Leistung in Netzwerkadaptern

Es gibt immer Kompromisse bei der Entscheidung, welche Hardwarefunktionen auf einem Netzwerkadapter implementiert werden sollen. Es wird immer wichtiger, Aufgabenauslagerungsfeatures hinzuzufügen, die eine Unterbrechungsmoderation, dynamische Optimierung auf der Hardware, eine bessere Verwendung des PCI-Busses und die Unterstützung von Jumbo Frames ermöglichen. Diese sind besonders wichtig für den High-End-Netzwerkadapter, der in Konfigurationen verwendet wird, die eine hohe Leistung erfordern.

Unterstützen der TCP- und IP-Prüfsummenauslagerung

Für den häufigsten Netzwerkdatenverkehr bietet die Auslagerung der Prüfsummenberechnung auf die Netzwerkadapterhardware einen erheblichen Leistungsvorteil, da die Anzahl der pro Byte erforderlichen CPU-Zyklen reduziert wird. Die Prüfsummenberechnung ist aus zwei Gründen die teuerste Funktion im Netzwerkstapel:

  • Es trägt zu einer langen Pfadlänge bei.
  • Dies führt zu Cacheänderungseffekten (in der Regel auf den Absender).

Das Auslagern der Prüfsummenberechnung an den Absender verbessert die Gesamtleistung des Systems, indem die Auslastung der Host-CPU verringert und die Cacheeffektivität erhöht wird.

Im Windows Performance Lab haben wir eine Tcp-Durchsatzverbesserung von 19 % gemessen, wenn die Prüfsumme während netzwerkintensiver Workloads ausgeladen wurde. Die Analyse dieser Verbesserung zeigt, dass 11 % der Gesamtverbesserung auf die Verringerung der Pfadlänge und 8 % auf die Erhöhung der Cacheeffektivität zurückzuführen sind.

Das Auslagern der Prüfsumme auf den Empfänger hat dieselben Vorteile wie das Auslagern der Prüfsumme auf den Absender. Ein höherer Nutzen ist auf Systemen zu sehen, die sowohl als Client als auch als Server fungieren, z. B. ein Socketsproxyserver. Auf Systemen, auf denen die CPU nicht unbedingt ausgelastet ist, z. B. ein Clientsystem, kann der Vorteil der Auslagerung der Prüfsumme in besseren Netzwerkantwortzeiten statt in einem deutlich verbesserten Durchsatz zu sehen sein.

Unterstützung von large send offload (LSO)

Windows bietet die Möglichkeit, dass der Netzwerkadapter/Treiber eine größere maximale Segmentgröße (Maximum Segment Size, MSS) ankündigen kann als die MTU für TCP bis zu 64K. Dadurch kann TCP dem Treiber einen Puffer von bis zu 64 KB zuordnen, wodurch der große Puffer in Pakete unterteilt wird, die in die Netzwerk-MTU passen.

Die TCP-Segmentierung wird von der Netzwerkadapter-/Treiberhardware anstelle der Host-CPU ausgeführt. Dies führt zu einer erheblichen Leistungsverbesserung, wenn die NETZWERKadapter-CPU in der Lage ist, den zusätzlichen Aufwand zu bewältigen.

Bei vielen getesteten Netzwerkadaptern gab es bei reinen Netzwerkaktivitäten kaum Verbesserungen, wenn die Host-CPU leistungsstärker als die Netzwerkadapterhardware war. Für typische Geschäftsworkloads wurde jedoch eine Gesamtverbesserung der Systemleistung von bis zu 9 % des Durchsatzes gemessen, da die Host-CPU die meisten ihrer Zyklen zum Ausführen von Transaktionen nutzt. In diesen Fällen wird durch das Auslagern der TCP-Segmentierung auf die Hardware die Host-CPU von der Last der Segmentierung befreit, sodass zusätzliche Zyklen zur Durchführung weiterer Transaktionen benötigt werden.

Unterstützen der IP-Sicherheitsauslagerung (IPSec)

Windows bietet die Möglichkeit, die Verschlüsselungsarbeit von IPSec auf die Netzwerkadapterhardware auszulagern. Die Verschlüsselung, insbesondere 3 DES (auch als triple DES bezeichnet), weist ein sehr hohes Zyklen-/Byteverhältnis auf. Daher ist es nicht verwunderlich, dass die Auslagerung von IPSec auf die Netzwerkadapterhardware eine Leistungssteigerung von 30 % bei sicheren Internet- und VPN-Tests gemessen hat.

Verbessern der Interruptmoderation

Ein einfacher Netzwerkadapter generiert beim Eintreffen eines Pakets oder zum Signalisieren des Abschlusses einer Paketsendeanforderung einen Hardwareunterbrechung auf dem Host. Unterbrechungslatenz und daraus resultierende Cacheänderungseffekte erhöhen den Mehraufwand für die Netzwerkleistung insgesamt. In vielen Szenarien (z. B. hohe Systemauslastung oder hoher Netzwerkdatenverkehr) empfiehlt es sich, die Kosten für den Hardwareunterbrechung zu reduzieren, indem mehrere Pakete für jeden Interrupt verarbeitet werden.

Bei hohen Netzwerkworkloads wurde eine Leistungsverbesserung von bis zu 9 % gegenüber netzwerkintensiven Workloads gemessen. Die Optimierung von Interruptmoderationsparametern nur für Durchsatzverbesserungen kann jedoch zu einem Leistungstreffer während der Antwortzeit führen. Um optimale Einstellungen beizubehalten und verschiedene Workloads zu berücksichtigen, empfiehlt es sich, dynamisch angepasste Parameter zuzulassen, wie in der automatischen Optimierung weiter unten in diesem Artikel beschrieben.

Effiziente Verwendung des PCI-Busses

Einer der wichtigsten Faktoren bei der Hardwareleistung des Netzwerkadapters ist, wie effizient der PCI-Bus verwendet wird. Darüber hinaus wirkt sich die DMA-Leistung des Netzwerkadapters auf die Leistung aller PCI-Karten aus, die sich auf demselben PCI-Bus befinden. Bei der Optimierung der PCI-Nutzung müssen die folgenden Richtlinien berücksichtigt werden:

  • Optimieren Sie DMA-Übertragungen, indem Sie zielseitige Seiten aggregieren.

  • Reduzieren Sie den MEHRaufwand für das PCI-Protokoll, indem Sie DMA in großen Blöcken (mindestens 256 Bytes) ausführen. Wenn möglich, Zeit für den Datenfluss, sodass ganze Pakete in einer einzigen PCI-Transaktion übertragen werden. Überlegen Sie jedoch, wie die Übertragung erfolgen soll. Warten Sie beispielsweise nicht, bis alle Daten eingehen, bevor Sie Übertragungen initiieren, da das Warten die Latenz erhöht und zusätzlichen Pufferspeicherplatz beansprucht.

  • Es ist besser, die DMA-Paketübertragung mit zusätzlichen Bytes zu versehen, anstatt eine kurze zusätzliche Übertragung zu "sauber", indem die letzten Bytes des Pakets übertragen werden.

  • Verwenden Sie die Transaktionen Memory Read, Memory Read Line und Memory Read Multiple gemäß der PCI-Spezifikation.

  • Die Netzwerkadapter-Busschnittstellenhardware sollte Einschränkungen im Hostspeichercontroller erkennen und das Verhalten entsprechend anpassen. Beispielsweise sollte die Netzwerkadapter-Busschnittstellenschnittstellenhardware Speichercontrollervorabrufeinschränkungen bei DMA-Speicherlesungen erkennen und einen kurzen Zeitraum warten, bevor die Transaktion erneut versucht wird. Die Hardware sollte übermäßige Wiederholungsversuche auf dem Teil des Netzwerkadapters erkennen und die Zeit vor dem ersten Wiederholungsversuch für zukünftige Transaktionen erhöhen, wenn sie vom Host abgeschnitten werden. Es hat keinen Sinn, weiterhin Transaktionen an den Speichercontroller zu übermitteln, wenn Sie sicher sind, dass er noch mit dem Abrufen des nächsten sequenziellen Datensatzes beschäftigt ist.

  • Minimieren Sie das Einfügen von Wartezuständen, insbesondere während Datenübertragungen. Es ist besser, den Bus aufzugeben und einen anderen PCI-Adapter mit dem Bus zu erledigen, wenn mehr als ein oder zwei Wartezustände eingefügt werden.

  • Verwenden Sie memory Mapped E/O anstelle von Programmierter E/A. Dies gilt auch für Fahrer.

Unterstützen von Jumboframes

Die Unterstützung größerer MTUs (Maximum Transmission Units) und somit größerer Rahmengrößen, insbesondere Jumbo Frames, reduziert den Netzwerkstapelaufwand pro Byte. Eine TCP-Durchsatzsteigerung von 20 % wurde gemessen, als die MTU von 1514 auf 9000 geändert wurde. Außerdem wird eine erhebliche Verringerung der CPU-Auslastung erzielt, da die Anzahl der Aufrufe vom Netzwerkstapel an den Netzwerktreiber verringert wird.