Intel LogoIntel® Ethernet der 700er-Reihe
Handbuch zur Leistungsoptimierung unter Linux
NEX Cloud Networking Group (NCNG)
Nr. 1.2
Dezember 2024

Änderungsverlauf

Revision Datum Kommentare
1.2 Dezember 2024 · Zusätzliche Hinweise zur Energieverwaltung hinzugefügt.
· Intel* Turbo Boost hinzugefügt.
· Rückstand bei Netzwerkgeräten hinzugefügt.
· Plattformspezifische Konfigurationen und Optimierungen hinzugefügt.
· Skalierbare Intel* %eon*-Prozessoren der 4. Generation hinzugefügt.
· AMD EPYC hinzugefügt.
· Aktualisierte Funktionen zur Überprüfung der Systemhardware.
· iPerf2 aktualisiert.
· iPerf3 aktualisiert.
· Aktualisierte Tx/Rx-Warteschlangen.
· Aktualisierte Interrupt-Moderation.
· Aktualisierte Ringgröße.
· Aktualisierte Plattformoptimierung (i40e nicht spezifisch).
· Aktualisierte BIOS-Einstellungen.
· Aktualisierte C-State-Steuerung.
· Aktualisierte CPU-Frequenzskalierung.
· Aktualisierte Anwendungseinstellungen.
· Aktualisierte Betriebssystem-/Kerneleinstellungen.
· Aktualisierte IP-Weiterleitung.
· Niedrige Latenz aktualisiert.
August 2023 Zu den Änderungen an diesem Dokument gehören:
· Verwandte Referenzen hinzugefügt.
· Hinzugefügt: „Sicherstellen, dass das DDP-Paket ordnungsgemäß geladen wird.“
· iPerf2 hinzugefügt.
· iPerf3 hinzugefügt.
· Netperf hinzugefügt.
· IRQ-Affinität aktualisiert.
· Tx/Rx-Warteschlangen hinzugefügt.
· Aktualisierte Ringgröße.
· Jumbo-Frames hinzugefügt.
· Adapter-Bonding hinzugefügt.
· Intel svr-info-Tool hinzugefügt.
1.0 März 2016 Erstveröffentlichung (Intel Public).

Einführung

Dieses Handbuch bietet Ihnen Hilfestellung bei der Optimierung Ihrer Umgebungen für optimale Netzwerkleistung mit Intel® Ethernet 700 Series-Netzwerkkarten in Linux-Umgebungen. Es konzentriert sich auf Hardware-, Treiber- und Betriebssystembedingungen sowie -einstellungen, die die Netzwerkleistung verbessern können. Beachten Sie, dass die Netzwerkleistung durch zahlreiche externe Einflüsse beeinträchtigt werden kann. In diesem Handbuch werden nur die häufigsten und schwerwiegendsten davon behandelt.
1.1 Weiterführende Literatur

Erste Checkliste

2.1 Treiber-/Firmware-Versionen aktualisieren
Überprüfen Sie die Treiber-/Firmwareversionen mit ethtool -i ethx.
Aktualisieren Sie Folgendes nach Bedarf:

2.2 Lesen Sie die README-Datei
Suchen Sie nach bekannten Problemen und holen Sie sich die neuesten Konfigurationsanweisungen aus der README-Datei file im i40e-Quellpaket enthalten.
2.3 Überprüfen Sie, ob Ihr PCI Express (PCIe)-Steckplatz x8 ist
Einige PCIe x8-Steckplätze sind tatsächlich als x4-Steckplätze konfiguriert. Diese Steckplätze verfügen jedoch nicht über die erforderliche Bandbreite für die volle Übertragungsrate mit Dual- und Quad-Port-Geräten. Auch wenn Sie einen PCIe v3.0-fähigen Adapter in einen PCIe v2.x-Steckplatz stecken, können Sie nicht die volle Bandbreite nutzen. Der Software-Gerätetreiber erkennt dies und schreibt die folgende Meldung ins Systemprotokoll:
Die für diese Karte verfügbare PCI-Express-Bandbreite reicht für eine optimale Leistung nicht aus. Für eine optimale Leistung ist ein x8 PCI-Express-Steckplatz erforderlich.
Wenn dieser Fehler auftritt, stecken Sie Ihren Adapter in einen echten PCIe v3.0 x8-Steckplatz, um das Problem zu beheben.
2.4 Überprüfen Sie die Hardwarefunktionen des Systems
Für Ethernet mit 10 Gbit/s, 25 Gbit/s und 40 Gbit/s gelten bestimmte Mindestanforderungen an CPU und System. Ein moderner Serverprozessor und eine optimale Speicherkonfiguration für Ihre Plattform sollten in der Regel ausreichen. Die Anforderungen variieren jedoch je nach Workload. Alle Speicherkanäle sollten belegt sein und der Speicherleistungsmodus im BIOS aktiviert sein. Stellen Sie sicher, dass Ihre CPU- und Speicherkonfiguration die für Ihren Workload erforderliche Netzwerkleistung unterstützt.
NOTIZ
Der XL710 ist ein 40-GbE-Controller. Der 2 x 40 GbE-Adapter, der diesen Controller verwendet, ist nicht als 2 x 40 GbE, sondern als 1 x 40 GbE mit aktivem Backup-Port konzipiert. Bei der Nutzung von Line-Rate-Verkehr über beide Ports ist der interne Switch gesättigt, und die kombinierte Bandbreite zwischen den beiden Ports ist auf insgesamt XNUMX Gbit/s begrenzt.
2.4.1 Kernel-Boot-Parameter
Wenn die Intel® Virtualisierungstechnik für Directed I/O (Intel® VT-d) im BIOS aktiviert ist, empfiehlt Intel, IOMMU im Pass-Through-Modus zu betreiben, um eine optimale Host-Netzwerkleistung zu gewährleisten. Dadurch wird der DMA-Overhead im Host-Verkehr eliminiert, während virtuelle Maschinen (VMs) weiterhin von den Vorteilen von Intel® VT-d profitieren. Dies wird durch Hinzufügen der folgenden Zeile zu den Kernel-Boot-Parametern erreicht: fommu-pt.
2.5 Sicherstellen, dass das DDP-Paket ordnungsgemäß geladen wird
Die Basistreiber 140ea und 140eb unterstützen Dynamic Device Personalization (DDP) nicht direkt. Um DDP mit Geräten der 700er-Serie zu verwenden, ist ein DDP-Pro-file kann mit der Anwendung testpmd angewendet werden.
Einzelheiten zu DDP profiles und wie man einen DDP-Profi anwendetfile mit testpmd auf Geräten der 700er-Reihe finden Sie im Intel® Ethernet 700 Series Dynamic Device Personalization (DDP) Technology Guide.
Um zu überprüfen, ob ein DDP-Profifile wurde erfolgreich geladen:
testpmd> ddp get list 0 Profile Nummer ist: 1
NOTIZ
Wenn der Profifile Wenn die Nummer 0 ist, wird kein DDP-Paket geladen. Bei einem Fehler beim Laden des DDP-Pakets wechselt das Gerät in den abgesicherten Modus, und viele Leistungsfunktionen sind nicht verfügbar. Fehler beim Laden des DDP-Pakets führen zu Leistungseinbußen. Informationen zur Fehlerbehebung finden Sie im Inte/* Ethernet 700 Series Dynamic Device Personalization (DDP) Technology Guide.

Grundlegende Leistungsmessungen und Optimierungsmethodik

3.1 Netzwerkleistungsbenchmarks
Bevor Sie mit der Optimierung beginnen, ist eine gute Basismessung Ihrer Netzwerkleistung wichtig. Zusätzlich zur ersten Messung der Leistung Ihrer spezifischen Anwendung/Workload empfiehlt es sich, einen Standard-Netzwerkleistungsbenchmark zu verwenden, um den einwandfreien Zustand Ihres Netzwerkgeräts zu überprüfen.
Für die Optimierung einzelner Systeme sind Netperf oder iperf und NetPIPE allesamt solide kostenlose Open-Source-Tools, mit denen Sie eine Verbindung belasten und Leistungsprobleme diagnostizieren können.
Netperf eignet sich hervorragend für Durchsatz- und Latenztests. NetPIPE ist ein latenzspezifisches Tool, kann aber für jede Umgebung kompiliert werden.
NOTIZ
Der TCP_RR-Test in netperf gibt die Latenz in Transaktionen/Sekunde an. Dies ist ein Roundtrip-Wert. Die Einweglatenz kann mit der folgenden Gleichung berechnet werden:
Latenz (µs) = (1⁄2) / [Transaktionen/s] * 1,000,000
3.1.1 iPerf2
Intel empfiehlt iperf2 gegenüber iperf3 für die meisten Benchmarking-Situationen aufgrund der Benutzerfreundlichkeit und der Unterstützung mehrerer Threads in einer einzigen Anwendungsinstanz. Intel empfiehlt die Ausführung mit der Option -P mit 2–4 Threads für 25G-Verbindungen und etwa 4–6 Threads für 40G-Verbindungen.

  • So führen Sie unidirektionalen Datenverkehr vom Client zum Server aus: Serverbefehl example: iperf2 -s
    Client-Befehl example: iperf2 -c -P
  • So führen Sie bidirektionalen Datenverkehr vom Client zum Server (und umgekehrt) aus: Serverbefehl example: iperf2 –s –p
    Client-Befehl exampauf:
    iperf2 -c -P -P -–Vollduplex ODER
    iperf2 -c -P -P -D

NOTIZ
Sowohl die Optionen –full-duplex als auch -d in iperf2 ermöglichen bidirektionale Tests. Die Option –full-duplex konzentriert sich jedoch speziell auf Vollduplex-Tests.
NOTIZ
Beim Testen von iperf2 über mehrere Server-Ports kann das Flag -d zum Server-Befehl hinzugefügt werden, um alle Server-Sitzungen im Hintergrund im selben Terminalfenster auszuführen. Das Flag -d kann auch verwendet werden, wenn der Server-Befehl in eine For-Schleife eines Skripts eingebettet ist.
NOTIZ
Beim Ausführen des Netzwerkdurchsatztests mit einem einzelnen Stream/Thread (z. B.ample: P1), AMD-Prozessoren bieten möglicherweise nicht den erwarteten Durchsatz, insbesondere bei Netzwerkkarten mit höherer Bandbreite (bei einer Geschwindigkeit von >= 25 Gbit/s). Daher ist die Anwendungsfixierung auf bestimmte Kerne erforderlich, um einen höheren Durchsatz zu erzielen. Siehe Anwendungseinstellungen auf Seite 22.
3.1.2 iPerf3
Wenn iperf3 verwendet wird, sind mehrere Instanzen der Anwendung erforderlich, um die Vorteile zu nutzen.tage der Multithreads, RSS und Hardware-Warteschlangen. Intel empfiehlt die Ausführung mit 2–4 Anwendungssitzungen für 25G-Verbindungen und etwa 4–6 Sitzungen für 40G-Verbindungen. Jede Sitzung sollte mit der Option -p einen eindeutigen TCP-Portwert angeben.

  • So führen Sie unidirektionalen Datenverkehr vom Client zum Server aus:
    Serverbefehl exampauf:
    iperf3 -s -p
    Client-Befehl exampauf:
    iperf3 -c -P
  • So führen Sie bidirektionalen Datenverkehr vom Client zum Server (und umgekehrt) aus:
    Serverbefehl exampauf:
    iperf3 –s –p
    Client-Befehl example: iperf3 -c -P -P –-bidir
  • Um mehrere Instanzen (Threads) von iperf3 zu starten, wird empfohlen, eine For-Schleife zu verwenden, um Threads TCP-Ports zuzuordnen und iperf3 im Hintergrund mit & auszuführen, um mehrere Prozesse parallel zu erstellen.
    Serverbefehl example, starte 4 Threads: port=””; für i in {0..3}; mache port=520$i; bash -c “iperf3 -s -p $port &”; fertig; Client-Befehl example, starte 4 Threads – Übertrage Testport=””; für i in {0..3}; mache Port=520$i; bash -c “iperf3 -c $serverIP -p $port &”; fertig; Client-Befehl example, starte 4 Threads – Receive test port=””; for i in {0..3}; do port=520$i; bash -c “iperf3 -R -c $serverIP -p $port &”; done; Erhöhen Sie für 40G-Verbindungen die For-Schleife, um bis zu 6 Instanzen/Threads zu erstellen.

NOTIZ
Beim Ausführen des Netzwerkdurchsatztests mit einem einzelnen Stream/Thread (z. B.ample: P1), AMD-Prozessoren bieten möglicherweise nicht den erwarteten Durchsatz, insbesondere bei höherer Bandbreite
Netzwerkkarten (bei einer Bandbreite von >= 25 Gbit/s). Daher ist die Anwendungsfixierung auf bestimmte Kerne erforderlich, um einen höheren Durchsatz zu erzielen. Siehe Anwendungseinstellungen auf Seite 22 und AMD EPYC auf Seite 26.
3.1.3 netperf
Das Tool Netperf ist eine gute Wahl für Durchsatz- und Latenztests.

  • Der TCP_STREAM-Test in netperf misst die Durchsatzkapazität des Geräts. Serverbefehl example: Netserver-Client-Befehlsbeispielample: netperf -t TCP_STREAM -l 30 -H
  • Der TCP_RR-Test in netperf gibt die Latenz in Transaktionen/Sekunde zurück. Dies ist ein Roundtrip-Wert. Es wird empfohlen, die Option -T x,x zu verwenden, wobei x die lokale CPU des Geräts ist. Die Einweglatenz lässt sich wie folgt berechnen: Latenz(usec)=(1⁄2)/ [Transaktionen/sec]*1,000,\ Serverbefehl exampDatei: Netserver
    Client-Befehl example: netperf -t TCP_RR -l 30 -H -T x,x
  • Um mehrere Instanzen (Threads) von netperf zu starten, wird empfohlen, eine For-Schleife zu verwenden, um Threads TCP-Ports zuzuordnen und netperf im Hintergrund mit & auszuführen, um mehrere Prozesse parallel zu erstellen.
    Serverbefehl example, starte 8 Threads:
    port=””; für i in {0..7}; mache port=520$i; bash -c „netserver -L $serverIP -p $port &“; fertig;
    Client-Befehl example, starte 8 Threads: port=””; für i in {0..7}; mache port=520$i; bash -c „netperf -H $serverIP -p $port -t TCP_STREAM -l 30 &“; fertig;

3.2 Tuning-Methodik
Konzentrieren Sie sich jeweils auf eine Optimierungsänderung, um zu verstehen, welche Auswirkungen jede Änderung auf Ihren Test hat. Je methodischer Sie bei der Optimierung vorgehen, desto einfacher lassen sich die Ursachen von Leistungsengpässen identifizieren und beheben.

Optimieren der i40e-Treibereinstellungen

4.1 IRQ-Affinität
Das Konfigurieren der IRQ-Affinität, sodass Interrupts für unterschiedliche Netzwerkwarteschlangen unterschiedlichen CPU-Kernen zugeordnet werden, kann enorme Auswirkungen auf die Leistung haben, insbesondere bei Multithread-Durchsatztests.
Um die IRQ-Affinität zu konfigurieren, beenden Sie irqbalance und verwenden Sie dann entweder das Skript set_irq_affinity aus dem i40e-Quellpaket oder fixieren Sie die Warteschlangen manuell. Deaktivieren Sie den User-Space-IRQ-Balancer, um die Warteschlangenfixierung zu aktivieren:

  • systemctl deaktiviert IRQ-Balance
  • systemctl stop irqbalance
    Verwenden des Skripts set_irq_affinity aus dem i40e-Quellpaket (empfohlen):
  • So verwenden Sie alle Kerne:
    [Pfad zum i40e-Paket]/scripts/set_irq_affinity -X all ethX
  • Um nur Kerne auf dem lokalen NUMA-Socket zu verwenden: [Pfad zum i40e-Paket]/scripts/set_irq_affinity -X local ethX
  • Sie können auch einen Bereich von Kernen auswählen. Vermeiden Sie die Verwendung von cpu0, da dieser Timer-Aufgaben ausführt. [Pfad zum i40e-Paket]/scripts/set_irq_affinity 1-2 ethX

NOTIZ
Das Affinitätsskript aktiviert Transmit Packet Steering (XPS) als Teil des Pinning-Prozesses, wenn die Option -x angegeben ist. Bei aktiviertem XPS empfiehlt Intel die Deaktivierung von irqbalance, da der Kernel-Balancer mit XPS zu unvorhersehbarer Leistung führen kann. Das Affinitätsskript deaktiviert XPS, wenn die Option -X angegeben ist. Die Deaktivierung von XPS und die Aktivierung symmetrischer Warteschlangen ist für Workloads von Vorteil, bei denen die beste Leistung erzielt wird, wenn Tx- und Rx-Verkehr über dieselben Warteschlangenpaare abgewickelt werden.
Das Konfigurieren symmetrischer Warteschlangen in Linux umfasst das Optimieren der Treiberparameter der Netzwerkschnittstelle, um symmetrische Empfangswarteschlangen (Rx) und symmetrische Sendewarteschlangen (Tx) für unterstützte Netzwerkadapter zu aktivieren.
NOTIZ

  • Symmetrische Warteschlangen sind eine erweiterte Netzwerkfunktion und werden nicht von allen Netzwerkadaptern oder Treibern der 700er-Serie unterstützt.
  • Stellen Sie sicher, dass Sie über die erforderliche Treiber- und Hardwareunterstützung verfügen, bevor Sie versuchen, symmetrische Warteschlangen zu konfigurieren.

Um symmetrische Warteschlangen zu konfigurieren, befolgen Sie diese allgemeinen Schritte:

  1. Bearbeiten der Netzwerkschnittstellenkonfiguration File: Verwenden Sie einen Texteditor (z. B.ample, vi, nano oder gedit), um die Netzwerkschnittstellenkonfiguration zu bearbeiten file. Der file befindet sich normalerweise im Verzeichnis /etc/sysconfig/network-scripts/ und hat einen Namen wie ifcfg-ethX, wobei ethX der Name Ihrer Netzwerkschnittstelle ist.
  2. Symmetrische Warteschlangenparameter hinzufügen. Fügen Sie der Netzwerkschnittstellenkonfiguration die folgenden Zeilen hinzu file: ETHTOOL_OPTS=”rx-queues 8 tx-queues 8″
  3. Starten Sie den Netzwerkdienst neu.
    Starten Sie den Netzwerkdienst nach den Änderungen neu, um die neue Konfiguration anzuwenden. sudo systemctl restart network

Manuell:

  • Suchen Sie die an jeden Knoten angeschlossenen Prozessoren mit: numactl –hardware lscpu
  • Suchen Sie die Bitmasken für jeden der Prozessoren:
  • Angenommen, Kerne 0–11 für Knoten 0: [1,2,4,8,10,20,40,80,100,200,400,800]
  • Suchen Sie die IRQs, die dem zugewiesenen Port zugewiesen sind: grep ethX /proc/interrupts und notieren Sie die IRQ-Werte. Zum Beispielample, 181-192 für die 12 geladenen Vektoren.
  • Der SMP-Affinitätswert wird in den entsprechenden IRQ-Eintrag übertragen. Dies muss für jeden IRQ-Eintrag wiederholt werden: echo 1 > /proc/irq/181/smp_affinity echo 2 > /proc/irq/182/smp_affinity echo 4 > /proc/irq/183/smp_affinity IRQ-Affinität anzeigen:
  • So zeigen Sie die IRQ-Affinität für alle Kerne an: /scripts/set_irq_affinity -s ethX
  • So zeigen Sie nur Kerne auf dem lokalen NUMA-Sockel an: /scripts/set_irq_affinity -s lokales ethX
  • Sie können auch einen Kernbereich auswählen: /scripts/set_irq_affinity -s 40-0-8,16 ethX

NOTIZ
Das Skript set_irq_affinity unterstützt das Flag -s im i40e-Treiber ab Version 2.16.11.
4.2 Tx/Rx-Warteschlangen
Die vom Treiber bei der Initialisierung für jeden Ethernet-Port aktivierte Standardanzahl an Warteschlangen entspricht der Gesamtzahl der in der Plattform verfügbaren CPUs. Dies funktioniert für viele Plattformen und Workload-Konfigurationen gut. Auf Plattformen mit hoher Kernanzahl und/oder hoher Ethernet-Portdichte kann diese Konfiguration jedoch zu Ressourcenkonflikten führen. Daher kann es in manchen Fällen erforderlich sein, die Standardeinstellung für jeden Port im System zu ändern.
Die Standardanzahl der Tx/Rx-Warteschlangen kann je nach Modell und Treiberversion variieren. Die Anzahl der Warteschlangen kann mit dem unten aufgeführten Befehl ethtool -L angepasst werden.
NOTIZ
In diesen Fällen empfiehlt Intel, die Standardwarteschlangenanzahl für jeden Port auf maximal die Anzahl der im lokalen NUMA-Knoten des Adapterports verfügbaren CPUs zu reduzieren. In manchen Fällen kann es beim Ressourcenausgleich bei Implementierungen mit hoher Portanzahl erforderlich sein, diese Zahl noch weiter zu reduzieren.
So ändern Sie die Warteschlangenkonfiguration:
Das folgende Beispielample setzt den Port auf 32 Tx/Rx-Warteschlangen: ethtool -L ethX combined 32
Example ausgabe:
ethtool -l ethX
Kanalparameter für ethX: Voreingestellte Maximalwerte:
Empfang: 96
Sendeleistung: 96
Sonstiges: 1
Kombiniert: 96
Aktuelle Hardwareeinstellungen:
Empfang: 0
Sendeleistung: 0
Sonstiges: 1
Kombiniert: 32
4.3 Unterbrechungsmoderation
Die adaptive Interrupt-Moderation ist standardmäßig aktiviert und bietet einen ausgewogenen Ansatz zwischen geringer CPU-Auslastung und hoher Leistung. Sie können die Interrupt-Einstellungen jedoch auch manuell an Ihren Anwendungsfall anpassen.
Der Bereich von 0–235 Mikrosekunden bietet einen effektiven Bereich von 4,310 bis 250,000 Interrupts pro Sekunde. Der Wert von rx-μsecs-high kann unabhängig von rx-μsecs und tx-μsecs im selben ethtool-Befehl eingestellt werden und ist auch unabhängig vom adaptiven Interrupt-Moderationsalgorithmus. Die zugrunde liegende Hardware unterstützt eine Granularität in 2-Mikrosekunden-Intervallen, sodass benachbarte Werte möglicherweise zur gleichen Interruptrate führen.

  • So deaktivieren Sie die adaptive Interrupt-Moderation: ethtool -C ethX adaptive-rx off adaptive-tx off
  • So aktivieren Sie die adaptive Interrupt-Moderation: ethtool -C ethX adaptive-rx on adaptive-tx on

Ein guter Ausgangspunkt für die allgemeine Optimierung sind 84 μs oder ca. 12000 Interrupts/s. Wenn während des Datenverkehrs rx_dropped-Zähler laufen (mit ethtool -S ethX), ist Ihre CPU wahrscheinlich zu langsam, die Ringgröße des Adapters (ethtool -G) bietet nicht genügend Puffer, um Pakete 84 μs lang zu speichern, oder die Interruptrate ist zu niedrig.

  • So stellen Sie die Interrupt-Moderation auf eine feste Interrupt-Rate von 84 μs zwischen den Interrupts ein (12000 Interrupts/s): ethtool -C ethX adaptive-rx off adaptive-tx off rx-usecs 84 tx-usecs 84 Der nächste Wert, den Sie ausprobieren können, ist 62 μs, sofern Ihre CPU-Auslastung noch nicht ausgeschöpft ist. Dies verbraucht zwar mehr CPU-Leistung, verarbeitet die Puffer aber schneller und erfordert weniger Deskriptoren (Ringgröße, ethtool -G).
  • So stellen Sie die Interrupt-Moderation auf eine feste Interrupt-Rate von 62 µs zwischen Interrupts ein (16000 Interrupts/s). ethtool -C ethX adaptive-rx off adaptive-tx off rx-usecs 62 tx-usecs 62
    Wenn die rx_dropped-Zähler während des Datenverkehrs ansteigen (mit ethtool -S ethX), ist Ihre CPU wahrscheinlich zu langsam, die Ringgröße des Adapters bietet nicht genügend Puffer (ethtool -G) oder die Interrupt-Rate ist zu niedrig. Wenn Ihre CPU-Auslastung nicht ausgeschöpft ist, können Sie die Interrupt-Rate durch Verringern des ITR-Werts erhöhen. Dies verbraucht mehr CPU, die Puffer werden jedoch schneller bearbeitet und es werden weniger Deskriptoren benötigt (Ringgröße, ethtool -G).
    Wenn Ihre CPU zu 100 % ausgelastet ist, ist eine Erhöhung der Interrupt-Rate nicht ratsam. Unter bestimmten Umständen, z. B. bei hoher CPU-Auslastung, empfiehlt es sich, den μs-Wert zu erhöhen, um mehr CPU-Zeit für andere Anwendungen freizugeben.
    Wenn Sie eine Leistung mit geringer Latenz benötigen und/oder viel CPU-Kapazität für die Netzwerkverarbeitung zur Verfügung haben, können Sie die Interrupt-Moderation vollständig deaktivieren, damit die Interrupts so schnell wie möglich ausgelöst werden.
  • So deaktivieren Sie die Interrupt-Moderation: ethtool -C ethX adaptive-rx off adaptive-tx off rx-usecs 0 tx-usecs 0

NOTIZ
Bei deaktivierter Interrupt-Moderation kann die Interrupt-Rate in jeder Warteschlange sehr hoch sein. Erwägen Sie die Einbeziehung des Parameters rx-usec-high, um eine Obergrenze für die Interrupt-Rate festzulegen. Der folgende Befehl deaktiviert die adaptive Interrupt-Moderation und lässt maximal 5 Mikrosekunden zu, bevor ein Empfangs- oder Sendevorgang als abgeschlossen angezeigt wird. Anstatt bis zu 200,000 Interrupts pro Sekunde zu erzeugen, begrenzt er die Gesamtzahl der Interrupts pro Sekunde über den Parameter rx-usec-high auf 50,000. # ethtool -C ethX adaptive-rx off adaptive-tx off rx-usecs-high 20 rx-usecs 5 txusecs 5 Versuchen Sie, den Sende-/Empfangs-/Hochprioritäts-Koaleszenz-Timer höher (80/100/150/200) oder niedriger (25/20/10/5) einzustellen, um den optimalen Wert für die Arbeitslast zu finden.
4.4 Ringgröße
Wenn Sie rx_dropped-Zähler in ethtool -S ethX (rx_dropped, rx_dropped.nic) sehen oder einen Cache-Druck bei mehreren aktiven Warteschlangen vermuten, können Sie versuchen, die Ringgröße vom Standardwert anzupassen. Der Standardwert ist 512, der Maximalwert 4096.

  • So überprüfen Sie die aktuellen Werte: ethtool -g ethX
    Wenn der Verdacht besteht, dass ein Mangel an Pufferung zu Einbrüchen bei der aktuellen Interrupt-Rate führt, können Sie zuerst das Maximum und dann das Minimum ausprobieren und dann mit einer binären Suche fortfahren, bis Sie eine optimale Leistung erzielen.
    Bei Verdacht auf Cache-Überlastung (viele aktive Warteschlangen) kann eine Reduzierung der Puffer gegenüber dem Standardwert dazu beitragen, dass Intel® Data Direct I/O (Intel® DDIO) effizienter arbeitet. Intel empfiehlt 128 oder 256 Puffer pro Warteschlange. Beachten Sie, dass eine Erhöhung der Interrupt-Rate über ethtool -C erforderlich sein kann, um einen Anstieg der rx_dropped-Rate zu vermeiden.
  • So legen Sie die Ringgröße auf einen festen Wert fest: ethtool -G eth12 rx 256 tx 256

NOTIZ
Um Rx-Paketverluste zu beheben, die mit ethtool -S ethX|grep drop gefunden wurden, sollten Sie die Ringgröße auf 4096 erhöhen. Experimentieren Sie, um die beste Einstellung für die Arbeitslast zu finden, aber achten Sie auf übermäßigen Speicherverbrauch bei höheren Werten.
4.5 Flusskontrolle
Die Layer-2-Flusskontrolle kann die TCP-Leistung erheblich beeinträchtigen und sollte für die meisten Workloads deaktiviert werden. Eine mögliche Ausnahme ist stoßweiser Datenverkehr, bei dem die Bursts nicht lange anhalten.
Die Flusskontrolle ist standardmäßig deaktiviert.

  • So aktivieren Sie die Flusskontrolle: ethtool -A ethX rx on tx on
  • So deaktivieren Sie die Flusskontrolle: ethtool -A ethX rx off tx off

NOTIZ
Sie müssen über einen Link-Partner mit Flusssteuerungsfunktion verfügen, um die Flusssteuerung erfolgreich zu aktivieren.
4.6 Jumbo-Frames
Wenn die erwartete Verkehrsumgebung große Datenblöcke umfasst, kann es sinnvoll sein, die Jumbo-Frame-Funktion zu aktivieren. Die Jumbo-Frame-Unterstützung wird aktiviert, indem die Maximum Transmission Unit (MTU) auf einen Wert größer als den Standardwert von 1500 geändert wird. Dadurch kann das Gerät Daten in größeren Paketen innerhalb der Netzwerkumgebung übertragen. Diese Einstellung kann den Durchsatz verbessern und die CPU-Auslastung bei großen E/A-Workloads reduzieren. Sie kann sich jedoch auf kleine Pakete oder latenzempfindliche Workloads auswirken.
NOTIZ
Jumbo-Frames oder größere MTU-Einstellungen müssen in Ihrer gesamten Netzwerkumgebung richtig konfiguriert sein.
Verwenden Sie den Befehl ifconfig, um die MTU-Größe zu erhöhen. Zum Beispielample, geben Sie Folgendes ein, wobei ist die Schnittstellennummer: ifconfig mtu 9000 aufwärts
Alternativ können Sie den IP-Befehl auch wie folgt verwenden: ip link set mtu 9000 dev IP-Link-Einrichtungsentwickler

Plattform-Tuning (i40e unspezifisch)

5.1 BIOS-Einstellungen

  • Aktivieren Sie Intel® VT-d für Virtualisierungs-Workloads.
  • Hyper-Threading (logische Prozessoren) kann die Leistung beeinträchtigen. Experimentieren Sie mit der Aktivierung oder Deaktivierung der Funktion für Ihre Arbeitslast.
  • Intel® Turbo Boost ermöglicht es CPU-Kernen, mit einer höheren Frequenz als der Basisfrequenz der CPU zu arbeiten. Die Aktivierung von Intel® Turbo Boost kann die Leistung bei vielen Workloads verbessern, verbraucht aber mehr Strom, um die Kerne auf der höheren Frequenz zu halten. Experimentieren Sie mit dem Ein- und Ausschalten von Turbo Boost für Ihren Workload.

NOTIZ
Bei hoher CPU-Gesamtauslastung der Plattform sind Turbofrequenzen nicht garantiert. Höhere Kern-Turbofrequenzen werden mit zunehmender CPU-Gesamtauslastung reduziert.
5.2 Energieverwaltung
Die Energieverwaltung kann die Leistung beeinträchtigen, insbesondere bei Workloads mit geringer Latenz. Wenn die Leistung wichtiger ist als die Senkung des Stromverbrauchs, empfiehlt Intel, die Auswirkungen der Energieverwaltung zu begrenzen. Es gibt viele verschiedene Möglichkeiten, die Energieverwaltung über Betriebssystemtools, BIOS-Einstellungen und Kernel-Boot-Parameter einzuschränken. Wählen Sie die beste Methode und Stufe für Ihre Umgebung.
5.2.1 C-State-Steuerung
Durch die Begrenzung des C-State-Eintritts auf CO oder C1 wird die Leistung verbessert und die Stromausnutzung erhöht.
Durch Deaktivieren des CPU-Paket-C6-Statuseintrags kann die Netzwerkleistung verbessert werden. Dies erhöht jedoch den Stromverbrauch.
Folgende Optionen stehen zur Verfügung:

  • Den C-State-Eintrag dynamisch steuern:
    Offen
    /dev/cpu_dma_latency und schreiben Sie die maximal zulässige Latenz hinein.

NOTIZ
Es gibt ein kleines Programm namens cpudmalatency.c, das von der Open-Source-Community heruntergeladen, kompiliert und über die Befehlszeile ausgeführt werden kann, um genau dies zu tun.
Das folgende Beispielample ermöglicht fünf μs Wachzeit und ermöglicht somit den C1-Eintritt: CPU-Latenz 5 &

  • Begrenzen Sie den maximalen C-Status in den Kernel-Boot-Einstellungen:
    Für Intel-CPUs: intel_idle.max_cstates=1
    Für Nicht-Intel-CPUs: processor.max_cstates=1
  • Verwenden Sie den Befehl cpupower, um den CPU-C6-Status zu überprüfen und zu deaktivieren: Überprüfen Sie: cpupower monitor oder cpupower idle-info
    C6 deaktivieren: cpupower idle-set -d3 oder
    C-States deaktivieren: cpupower idle-set -D0

Hinweise:

  1. Deaktivieren Sie C-States auf der CPU, wenn der Server über Intel® Xeon® Scalable Prozessoren der 4. Generation verfügt. Bei aktiviertem oder deaktiviertem Hyper-Threading verhindert das Deaktivieren von Leerlaufzuständen (-D0) den Wechsel der Kerne in den Energiesparmodus während Leerlaufzeiten und reduziert die Latenzzeit der CPU beim Übergang zwischen Leerlauf- und Aktivzustand.
  2. Das Energiemanagement des Intel® Xeon® Scalable Prozessors der 4. Generation ist extrem aggressiv. Um zu verhindern, dass Kerne in den Energiesparmodus wechseln, reduzieren Sie die Anzahl der verwendeten Kerne, um sie länger aktiv zu halten (ethtool -L kombiniert ). Binden Sie außerdem Interrupts an bestimmte Kerne mithilfe der IRQ-Affinität (meistens mit -x local oder einer Liste von CPU-Kernen) und stellen Sie mit taskset oder numactl sicher, dass die Arbeitslast auf denselben Kernen ausgeführt wird. Dies verbessert die Leistung, indem Kerne aktiv gehalten und die Interrupt-Behandlung optimiert wird.

C6 aktivieren:
CPU-Leistung Leerlauf-Set -d3
C-States aktivieren:
CPU-Leistung Leerlauf-Set -E

  • Eine andere Methode besteht darin, das Tuned-Tool (in vielen Linux-Distributionen enthalten) zu verwenden, um einen Leistungsvorteil zu erzielen.file. Diese Profisfiles ändern mehrere Betriebssystemeinstellungen, die die Leistung vieler Anwendungen beeinträchtigen können. Es wurde festgestellt, dass der Netzwerkdurchsatz profile bietet Verbesserungen für die meisten Arbeitslasten.
    Überprüfen:
    tuned-adm aktiv
    Satz:
    tuned-adm profile Netzwerkdurchsatz
    NOTIZ
    Der Dienst „Tuned“ muss für die oben genannten Befehle ausgeführt werden. Zum Überprüfen/Neustarten von „Tuned“: systemctl status tuned systemctl restart tuned
    Sie können auch jeden C-State-Eintrag unterbinden, indem Sie der Kernel-Bootzeile Folgendes hinzufügen:
    Leerlauf=Umfrage
  • Begrenzen Sie den C-Zustand durch die BIOS-Energieverwaltungseinstellungen des Systems, was möglicherweise eine Leistungsverbesserung zur Folge hat.file verfügbar.
    Mit Tools wie Turbostat oder x86_energy_perf_policy können Sie die Energieverwaltungseinstellungen überprüfen oder festlegen.

5.2.2 PCIe-Energieverwaltung
Active-State Power Management (ASPM) ermöglicht einen niedrigeren Energiestatus für PCIe-Verbindungen, wenn diese nicht aktiv genutzt werden. Dies kann zu einer höheren Latenz auf PCIe-Netzwerkgeräten führen. Intel empfiehlt daher, ASPM für latenzempfindliche Workloads zu deaktivieren. Deaktivieren Sie ASPM, indem Sie der Kernel-Bootzeile Folgendes hinzufügen: pcie_aspm=off
5.2.3 CPU-Frequenzskalierung
Die CPU-Frequenzskalierung (oder CPU-Geschwindigkeitsskalierung) ist eine Linux-Energieverwaltungstechnik, bei der die Systemtaktfrequenz im laufenden Betrieb angepasst wird, um Strom und Wärme zu sparen. Genau wie C-States kann dies zu unerwünschten Latenzen bei Netzwerkverbindungen führen.
Mit dem Tool cpupower können Sie außerdem die Standardwerte und Grenzen der CPU-Leistung prüfen und ändern:

  • Überprüfen Sie: CPU-Leistungsmonitor oder
  • CPUs in den Leistungsmodus versetzen: cpupower frequency-set -g performance

NOTIZ
Änderungen an den CPU-Frequenzgrenzen können sich auf viele Workloads auswirken und möglicherweise andere Funktionen deaktivieren, beispielsweise den CPU-Turbomodus.
Um die CPU-Frequenzskalierung zu deaktivieren, deaktivieren Sie den CPU-Stromversorgungsdienst mit den folgenden Befehlen:
systemctl stop cpupower.service
systemctl deaktivieren cpupower.service
5.2.4 Zusätzliche Hinweise zur Energieverwaltung
Weitere Einzelheiten finden Sie in dieser Übersichtview vieler Energieverwaltungsfunktionen der skalierbaren Intel® Xeon® Prozessoren der 3. Generation sowie Anleitungen zur Integration dieser Funktionen auf Plattformebene: https://networkbuilders.intel.com/solutionslibrary/power-management-technologyoverview-technology-guide
5.3 Intel® Turbo Boost
Intel® Turbo Boost beschleunigt den Prozessor bei Bedarf, verbraucht aber möglicherweise mehr Strom. Durch Deaktivieren von Turbo Boost bleibt die Prozessorgeschwindigkeit konstant und bietet Ihnen so ein konsistentes Leistungsniveau für bestimmte Workloads.
5.4 Firewalls
Firewalls können die Leistung beeinträchtigen, insbesondere die Latenzleistung.
Deaktivieren Sie iptables/firewalld, falls nicht erforderlich.
5.5 Anwendungseinstellungen
Oft reicht ein einzelner Thread (entsprechend einer einzelnen Netzwerkwarteschlange) nicht aus, um die maximale Bandbreite zu erreichen. Einige Plattformarchitekturen, wie z. B. AMD, neigen dazu, mit einem einzelnen Thread mehr Rx-Pakete zu verwerfen als Plattformen mit Intel-basierten Prozessoren.
Verwenden Sie Tools wie taskset oder numactl, um Anwendungen an den NUMA-Knoten oder die lokalen CPU-Kerne des Netzwerkgeräts zu binden. Bei einigen Workloads, z. B. bei Speicher-E/A, ist die Verlagerung der Anwendung auf einen nicht lokalen Knoten von Vorteil.
Experimentieren Sie, wenn möglich, mit der Erhöhung der Anzahl der von Ihrer Anwendung verwendeten Threads.
5.6 Kernel-Version
Die meisten modernen Kernel sind recht gut leistungsoptimiert. Je nach Anwendungsfall kann jedoch eine Aktualisierung des Kernels die Leistung verbessern. Durch das Herunterladen der Quelle können Sie außerdem bestimmte Funktionen vor dem Erstellen des Kernels aktivieren/deaktivieren.
5.7 Betriebssystem-/Kernel-Einstellungen
Weitere Informationen zur allgemeinen Betriebssystemoptimierung finden Sie in Anleitungen zur Betriebssystemoptimierung, beispielsweise im Red Hat Enterprise Linux Network Performance Tuning Guide.
In der folgenden Tabelle sind einige häufig zu optimierende Parameter aufgeführt. Beachten Sie, dass dies nur empfohlene Ausgangspunkte sind. Änderungen der Standardwerte können den Ressourcenverbrauch des Systems erhöhen. Obwohl eine Erhöhung der Werte die Leistung verbessern kann, ist es notwendig, mit verschiedenen Werten zu experimentieren, um herauszufinden, was für ein bestimmtes System, eine bestimmte Arbeitslast und einen bestimmten Datenverkehr am besten geeignet ist.
Die Kernelparameter können mit dem Dienstprogramm sysctl in Linux wie unten angegeben konfiguriert werden.
Zu view die Standardwerte für rmem und wmem auf dem System:
sysctl net.core.rmem_default
sysctl net.core.wmem_default
Stellen Sie die Werte auf das Maximum (16 MB) ein:
sysctl -w net.core.rmem_max=16777216
sysctl -w net.core.wmem_max=16777216
Socket-Puffergrößen, auch als Empfangspuffer (rmem) und Sendepuffer (wmem) bezeichnet, sind Systemparameter, die die für eingehenden und ausgehenden Netzwerkverkehr reservierte Speichermenge angeben.
Wenn Sie sysctl ohne das Argument -w ausführen, wird der Parameter mit seiner aktuellen Einstellung aufgelistet.

Stapeleinstellung Beschreibung
net.core.rmem_default Standardmäßige Empfangsfenstergröße
net.core.wmem_default Standardgröße des Übertragungsfensters
net.core.rmem_max Maximale Größe des Empfangsfensters
net.core.wmem_max Maximale Sendefenstergröße
net.core.optmem_max Maximale optionale Speicherpuffer
net.core.netdev_max_backlog Rückstand an unverarbeiteten Paketen, bevor der Kernel mit dem Löschen beginnt
net.ipv4.tcp_rmem Speicherreservierer für TCP-Lesepuffer
net.ipv4.tcp_wmem Speicherreservierer für TCP-Sendepuffer

Kernel, Netzwerk-Stack, Speicherhandler, CPU-Geschwindigkeit und Energieverwaltungsparameter können einen großen Einfluss auf die Netzwerkleistung haben. Eine allgemeine Empfehlung ist, den Netzwerkdurchsatz zu berücksichtigen.file Verwenden Sie den Befehl „tuned“. Dadurch werden einige Betriebssystemeinstellungen geändert, um Netzwerkanwendungen den Vorzug zu geben.
Überprüfen:
tuned-adm aktiv
Satz:
tuned-adm profile Netzwerkdurchsatz
5.8 Netzwerkgeräte-Rückstand
Diese Funktion trägt zur Verbesserung der Netzwerkleistung bei, indem sie eingehenden Datenverkehr effektiv verwaltet, Paketverluste reduziert, Latenzzeiten verringert und den Durchsatz erhöht. Dies führt zu einem besseren Benutzererlebnis und einer schnelleren Systemreaktion.
Standardmäßig ist es in den meisten Linux-Betriebssystemen aktiviert. So überprüfen Sie den Standardwert:
sysctl net.core.netdev_max_backlog
Der Maximalwert für netdev_max_backlog kann je nach Faktoren wie Kernelversion, Hardware, Speicher und Arbeitslast variieren. In vielen Fällen wird 8192 als guter Wert angesehen. sysctl -w net.core.netdev_max_backlog=8192
5.9 Plattformspezifische Konfigurationen und Optimierung
5.9.1 Skalierbare Intel® Xeon® Prozessoren der 4. Generation

Das Energiemanagement des Intel® Xeon® Scalable Prozessors der 4. Generation ist im Vergleich zu den Intel® Xeon® Scalable Prozessoren der 3. Generation extrem aggressiv. Um zu verhindern, dass Kerne in den Energiesparmodus wechseln, reduzieren Sie die Anzahl der verwendeten Kerne, um sie länger aktiv zu halten.
Empfohlene BIOS-Einstellungen für höchste Leistung

  1. Aktivieren/Deaktivieren von Hyper-Threading auf der CPU (basierend auf den Arbeitslastanforderungen und Leistungszielen).
  2. Stellen Sie das System profile auf Performance für maximale Leistung.
    NOTIZ
    Dies führt zu einem höheren Stromverbrauch
  3. Stellen Sie die CPU-Energieverwaltung auf „Maximale Leistung“ ein, um der maximalen CPU-Leistung Vorrang vor der Energieeffizienz zu geben.
  4. Aktivieren Sie Turbo Boost. Durch die Deaktivierung von Turbo Boost in den BIOS-Einstellungen des Systems wird normalerweise verhindert, dass die CPU ihre Taktfrequenz dynamisch über ihre Basisfrequenz hinaus erhöht.
  5. NOTIZ
    Das Deaktivieren von Turbo Boost kann für bestimmte Anwendungsfälle geeignet sein, in denen konstante Leistung, Energieeffizienz oder Wärmemanagement Vorrang vor maximaler Leistung haben.
  6. Deaktivieren Sie die Funktion „Single Root I/O Virtualization“ (SR-IOV), wenn das System keine Virtualisierungstechnologien verwendet.
  7. Deaktivieren Sie C-Zustände, um die CPU anzuweisen, aktiv zu bleiben und tiefere Leerlaufzustände zu verhindern.
  8. Deaktivieren Sie C1E, um sicherzustellen, dass die CPU aktiv bleibt und nicht in den C1E-Leerlaufzustand wechselt.
  9. Stellen Sie die Uncore-Frequenz auf Maximum ein, um das System anzuweisen, mit der höchsten verfügbaren Frequenz zu arbeiten.
  10. Stellen Sie auf Dell-Plattformen die Kernemulation Multiple APIC Description Table (MADT) auf Linear (oder Round-Robin, je nach BIOS) ein, um eine klare und vorhersehbare Zuordnung der CPU-Kerne bereitzustellen.

Empfohlene Betriebssystem-Optimierungen für eine optimierte Leistung

  1. Stellen Sie den CPU-Frequenzskalierungsregler auf Leistung ein. cpupower frequency-set -g performance cpupower frequency-info
  2. C-States deaktivieren. cpupower idle-set -D0
  3. Setzen Sie die Core Rx- (rmem) und Tx-Puffer (wmem) auf den Maximalwert. sysctl -w net.core.rmem_max=16777216 sysctl -w net.core.wmem_max=16777216
  4. Legen Sie den Rückstand des Netzwerkgeräts fest. sysctl -w net.core.netdev_max_backlog=8192
  5. Set abgestimmt profile (Durchsatz/Latenz abhängig von der Arbeitslast).
    tuned-adm profile Netzwerkdurchsatz

Empfohlene Adapterpegel-Abstimmungen für optimierte Leistung

  1. Begrenzen Sie die Anzahl der Warteschlangen für den Anwendungsverkehr. Verwenden Sie die Mindestanzahl an Warteschlangen, die erforderlich ist, um die zugehörigen CPU-Kerne aktiv zu halten und einen tieferen Leerlauf zu verhindern (angepasst an die Arbeitslast): ethtool -L kombiniert 32
  2. Legen Sie die Interrupt-Moderationsraten fest. ethtool -C adaptive-rx aus adaptive-tx aus rx-usecs-hoch 50 rx-usecs 50 tx-usecs 50
    Versuchen Sie, den Sende-/Empfangs-/Koaleszenz-Timer mit hoher Priorität höher (80/100/150/200) oder niedriger (25/20/10/5) einzustellen, um den optimalen Wert für die Arbeitslast zu finden.
  3. Stellen Sie die Rx/Tx-Ringgrößen ein. ethtool -G RX 4096 TX 4096
    NOTIZ
    Wenn Sie mit ethtool -S| grep drop Rx-Paketverluste feststellen, reduzieren Sie die Ringgröße auf <4096. Versuchen Sie, den optimalen Wert für die Arbeitslast zu finden, bei dem keine Pakete verloren gehen.
  4. IRQ-Affinität festlegen. Verwenden Sie lokale Kerne der Netzwerkkarte oder eine spezifische Kernzuordnung (wobei die Anzahl der Kerne der Anzahl der unter 1 auf Seite 26 festgelegten Warteschlangen entspricht). systemctl stop irqbalance set_irq_affinity -X local ODER set_irq_affinity -X

5.9.2 AMD EPYC
AMD EPYC-Prozessoren sind leistungsstarke CPUs für Server und Rechenzentren, die auf der Zen-Architektur von AMD basieren. Die folgenden Einstellungen stammen aus der vierten Generation der AMD EPYC-Serie.
Empfohlene BIOS-Einstellungen für höchste Leistung

  1. Aktivieren Sie den benutzerdefinierten Modus, um CPU-Leistung, Stromverbrauch und andere Einstellungen anzupassen. Dies hilft bei der Feinabstimmung des Systems für ein optimales Gleichgewicht zwischen Leistung und Energieeffizienz.
  2. Aktivieren Sie die Kernleistungssteigerung, damit die CPU ihre Geschwindigkeit automatisch erhöhen kann, um anspruchsvollere Aufgaben zu bewältigen und so die Gesamtleistung zu verbessern.
  3. Deaktivieren Sie die globale C-State-Steuerung, um zu verhindern, dass die CPU in tiefere Energiesparzustände, sogenannte C-States, wechselt, wodurch die Reaktionsfähigkeit aufrechterhalten werden kann.
    NOTIZ
    Das Deaktivieren von C-Zuständen kann zu zusätzlichem Stromverbrauch und höheren Temperaturen führen. Überwachen Sie beides je nach Arbeitslast.
  4. Aktivieren/deaktivieren Sie Simultaneous Multithreading (SMT) auf der CPU, basierend auf den Workload-Anforderungen und Leistungszielen. SMT entspricht Hyper Threading auf Intel-CPUs.
    NOTIZ
    Informationen zur Leistungsoptimierung finden Sie unter „Optimieren der i40e-Treibereinstellungen“ auf Seite 13 und unter „Plattformoptimierung (i40e nicht spezifisch)“ auf Seite 19 für die empfohlene Optimierung auf Betriebssystem- und Adapterebene.

Adapter-Bonding

Linux-Bonding ist eine leistungsstarke Funktion, die die Netzwerkleistung, Redundanz und Fehlertoleranz in Serverumgebungen deutlich verbessern kann. Wichtig ist jedoch, dass kompatible Netzwerkhardware und eine korrekte Konfiguration sowohl auf dem Server als auch auf dem Switch erforderlich sind, um einwandfrei zu funktionieren.
Mit dem Bonding-Treiber in Linux können Sie mehrere physische Netzwerkschnittstellen zu einer gemeinsamen Schnittstelle zusammenfassen. Diese Schnittstelle wird dem Betriebssystem und den Anwendungen als einzelne virtuelle Netzwerkschnittstelle angezeigt.
NOTIZ
Die Bindung ist eine logische Schnittstelle, daher ist es nicht möglich, die CPU-Affinität direkt auf der Bindungsschnittstelle einzustellen (z. B.ample, bond0). Das heißt, es hat keine direkte Kontrolle über die Interrupt-Behandlung oder die CPU-Affinität. Die CPU-Affinität muss für die zugrunde liegenden Schnittstellen konfiguriert werden, die Teil der Bindung sind.
Beim Bonding gibt es mehrere Betriebsarten, jede mit ihren eigenen Eigenschaften.

Modus  Typ
0 Rundenturnier
1 Aktive Sicherung
2 XOR
3 Übertragen
4 LACP
5 Lastausgleich übertragen
6 Adaptiver Lastenausgleich

Es gibt verschiedene Methoden, um eine Verbindung unter Linux herzustellen. Eine der häufigsten Methoden ist die Verwendung der Netzwerkkonfiguration files (zum Beispielample, /etc/network/interfaces oder /etc/sysconfig/network-scripts/ifcfg-bondX).
Konfiguration mithilfe der Netzwerkkonfiguration Files
Die folgenden Schritte erstellen eine Verbindung über die Netzwerkkonfiguration files.

  1. Wählen Sie zwei oder mehr NIC-Ports für die Bündelung (z. B.ample, ethX und ethY)
  2. Öffnen Sie die NIC-Konfiguration Files unter /etc/sysconfig/network-scripts/ für die erforderliche NIC-Schnittstelle (zum Beispielample, vi ifcfg-ethX und vi ifcfg-ethY) und fügen Sie den folgenden Text hinzu:
    MASTER=bondN [Hinweis: N ist eine Ganzzahl, die die Bindungsnummer angibt.] SLAVE=yes
  3. Erstellen eines Bond-Netzwerkskripts file Verwenden Sie vi /etc/sysconfig/networkscripts/ifcfg-bondN und geben Sie den folgenden Text ein:
    DEVICE=bondN [Hinweis: N ist eine Ganzzahl, die die Bond-Nummer angibt] ONBOOT=yes USERCTL=no BOOTPROTO=dhcp (oder) none
    IPADDR=200.20.2.4 [erforderlich, wenn BOOTPROTO=keines] NETMASK=255.255.255.0 [erforderlich, wenn BOOTPROTO=keines] NETWORK=200.20.2.0 [erforderlich, wenn BOOTPROTO=keines] BROADCAST=200.20.2.255 [erforderlich, wenn BOOTPROTO=keines] BONDING_OPTS=”mode=1 miimon=100″
    NOTIZ
    Der Modus kann je nach Anforderung eine beliebige Ganzzahl zwischen 0 und 6 sein.
  4. Starten Sie die Netzwerkdienste mit service network restart oder systemctl restart NetworkManager.service neu

Fehlerbehebung bei der Leistung

7.1 CPU-Auslastung
Überprüfen Sie die CPU-Auslastung pro Kern, während die Arbeitslast ausgeführt wird.
Beachten Sie, dass die Auslastung pro Kern für die Leistung relevanter ist als die allgemeine CPU-Auslastung, da sie einen Eindruck von der CPU-Auslastung pro Netzwerkwarteschlange vermittelt. Wenn nur wenige Threads Netzwerkverkehr ausführen, werden möglicherweise nur wenige Kerne genutzt. Sind diese Kerne jedoch zu 100 % ausgelastet, ist Ihr Netzwerkdurchsatz wahrscheinlich durch die CPU-Auslastung begrenzt. In diesem Fall sollten Sie Folgendes tun:

  1. Passen Sie die IRQ-Moderation/Ringgröße wie unter Interrupt-Moderation beschrieben an.
  2. Erhöhen Sie die Anzahl der Anwendungsthreads, um die CPU-Last auf mehrere Kerne zu verteilen. Wenn alle Kerne zu 100 % ausgelastet sind, ist Ihre Anwendung möglicherweise eher CPU- als Netzwerklast.

Allgemein verfügbare Werkzeuge:

  • Spitze
    — Drücken Sie 1, um die Liste der CPUs zu erweitern und zu überprüfen, welche verwendet werden.
    — Beachten Sie den Auslastungsgrad.
    – Beachten Sie, welche Prozesse als am aktivsten aufgeführt sind (oben in der Liste).
  • mpstat
    Das folgende BeispielampDie Befehlszeile wurde auf Red Hat Enterprise Linux 7.x getestet.
    Es zeigt die CPU-Auslastung pro Kern an (indem der gesamte Prozentsatz des Leerlaufs ermittelt und von 100 abgezogen wird) und hebt die Werte über 80 % rot hervor. mpstat -P ALL 1 1 | grep -v Average | tail -n +5 | head -n -1 | awk '{ print (100-$13)}' | egrep -color=always '[^\.][8-9][0-9][\.]?.*|^[8-9][0-9][\.]?.*| 100|' | column
  • perf top Suchen Sie, wo Zyklen ausgegeben werden.

7.2 i40e-Zähler
Der i40e-Treiber bietet eine lange Liste von Zählern für die Schnittstellen-Debugging- und Überwachung über den Befehl ethtool -S ethX. Es kann hilfreich sein, die Ausgabe während der Ausführung eines Workloads zu beobachten und/oder die Zählerwerte vor und nach einem Workload-Lauf zu vergleichen.

  • Um einen vollständigen Dump der i40e-Zähler zu erhalten: ethtool -S ethX
  • Um nur Zähler ungleich Null zu beobachten: watch -d (ethtool -S ethX) | egrep -v :\ 0 | Spalte
    Einige Dinge, auf die Sie achten sollten:
  • rx_dropped bedeutet, dass die CPU die Puffer nicht schnell genug bedient.
  • port.rx_dropped bedeutet, dass etwas im Steckplatz/Speicher/System nicht schnell genug ist.

7.3 Netzwerkzähler
Überprüfen Sie netstat -s vor/nach einem Workload-Lauf.
Netstat sammelt Netzwerkinformationen von allen Netzwerkgeräten im System. Daher können die Ergebnisse durch andere Netzwerke als das getestete beeinflusst werden. Die Ausgabe von netstat -s kann ein guter Indikator für Leistungsprobleme im Linux-Betriebssystem oder -Kernel sein. Weitere Informationen zur allgemeinen Betriebssystemoptimierung finden Sie in Anleitungen zur Betriebssystemoptimierung, z. B. im Red Hat Enterprise Linux Network Performance Tuning Guide.
7.4 Systemprotokolle
Überprüfen Sie die Systemprotokolle auf Fehler und Warnungen (/var/log/messages, dmesg).
7.5 Intel svr-info Tool
Intel bietet ein SVR-Info-Tool (siehe https://github.com/intel/svr-info) für Linux, das relevante Hardware- und Softwaredetails eines Servers erfasst. Die Ausgabe von svr-info kann äußerst hilfreich sein, um Systemengpässe oder Einstellungen/Optimierungen zu identifizieren, die nicht für die Arbeitslast optimiert sind. Wenn Sie bei Intel einen Supportfall für Ethernet-bezogene Leistungsprobleme eröffnen, geben Sie unbedingt die Ausgabe von svr-info (Text) an. file) für jeden Linux-Server in der Testkonfiguration.

  1. Laden Sie svr-info herunter und installieren Sie es:
    wget -qO- https://github.com/intel/svr-info/releases/latest/download/svrinfo.tgz| tar xvz cd svr-info
    ./svr-info
    > hostname.txt
  2. Sammeln Sie die Ausgabe:
    ./svr-info > hostname.txt
  3. Einen Text anhängen (.txt) file für jeden Server zur Analyse an Ihren Intel-Supportfall.

Empfehlungen für gängige Leistungsszenarien

8.1 IP-Weiterleitung

  • Aktualisieren Sie den Kernel.
    Bei einigen neueren Kerneln innerhalb der Distribution ist die Routing-Leistung aufgrund von Kernel-Änderungen im Routing-Code beeinträchtigt, angefangen mit der Entfernung des Routing-Caches aus Sicherheitsgründen. Neuere Kernel außerhalb der Distribution sollten Patches enthalten, die die Leistungseinbußen dieser Änderungen abmildern und möglicherweise zu einer Leistungsverbesserung führen.
  • Deaktivieren Sie Hyper-Threading (logische Kerne).
  • Bearbeiten Sie die Kernel-Boot-Parameter.
    — Erzwingen Sie das Ausschalten von iommu (intel_iommu=off oder iommu=off) über die Kernel-Bootzeile, sofern dies nicht für die Virtualisierung erforderlich ist.
    — Energieverwaltung ausschalten: processor.max_cstates=1 idle=poll pcie_aspm=off
  • Begrenzen Sie die Anzahl der Warteschlangen auf die Anzahl der Kerne auf dem lokalen Sockel (12 in diesem Beispiel).ample). ethtool -L ethX kombiniert 12
  • Pin-Interrupts nur an den lokalen Socket. set_irq_affinity -X local ethX ODER set_irq_affinity -X local ethX
    NOTIZ
    Je nach Arbeitslast kann -X oder -x verwendet werden.
  • Ändern Sie die Tx- und Rx-Ringgrößen nach Bedarf. Ein höherer Wert benötigt zwar mehr Ressourcen, kann aber bessere Weiterleitungsraten bieten. ethtool -G ethX rx 4096 tx 4096
  • Deaktivieren Sie GRO beim Routing.
    Aufgrund eines bekannten Kernelproblems muss GRO beim Routing/Weiterleiten ausgeschaltet werden. ethtool -K ethX gro off, wobei ethX die zu ändernde Ethernet-Schnittstelle ist.
  • Deaktivieren Sie die adaptive Interrupt-Moderation und legen Sie einen statischen Wert fest. ethtool -C ethX adaptive-rx off adaptive-tx off ethtool -C ethX rx-usecs 64 tx-usecs 64

NOTIZ
Je nach Prozessortyp und Arbeitslast können die Koaleszenzparameter für RX und TX angepasst werden, um die Leistung zu verbessern (oder den Frame-Verlust zu verringern).

  • Deaktivieren Sie die Firewall. sudo systemctl disable firewalld sudo systemctl stop firewalld
  • Aktivieren Sie die IP-Weiterleitung. sysctl -w net.ipv4.ip_forward=1
  • Konfigurieren Sie Maximalwerte für die Puffergrößen der Empfangs- und Sende-Sockets. sysctl -w net.core.rmem_max=16777216 sysctl -w net.core.wmem_max=16777216

NOTIZ
Je nach Arbeitsaufwand oder Anforderung können diese Werte vom Standardwert abgeändert werden.
8.2 Geringe Latenz

  • Schalten Sie Hyper-Threading (logische Kerne) AUS.
  • Stellen Sie sicher, dass das Netzwerkgerät lokal für Numa Core 0 ist.
  • Fixieren Sie den Benchmark mit taskset -c 0 auf Kern 0.
  • Schalten Sie IRQBalance mit systemctl stop irqbalance oder systemctl disable irqbalance aus.
  • Führen Sie das Affinitätsskript aus, um die Verteilung auf alle Kerne zu verteilen. Versuchen Sie es entweder lokal oder auf allen Kernen.
  • Schalten Sie die Interrupt-Moderation aus. ethtool -C ethX rx-usecs 0 tx-usecs 0 adaptive-rx off adaptive-tx off rxusecs- high 0
  • Begrenzen Sie die Anzahl der Warteschlangen auf die Anzahl der Kerne auf dem lokalen Sockel (in diesem Beispiel 32).ample). ethtool -L ethX kombiniert 32
  • Interrupts nur an den lokalen Socket anheften (Skript im Lieferumfang des i40e-Treibers enthalten). set_irq_affinity -X local ethX
  • Verwenden Sie einen etablierten Benchmark wie netperf -t TCP_RR, netperf -t UDP_RR oder NetPipe. netperf -t TCP_RR oder netperf -t UDP_RR
  • Fixieren Sie den Benchmark auf einem einzelnen Kern im lokalen NUMA-Knoten. taskset -c

Intel® Ethernet der 700er-Reihe
Handbuch zur Leistungsoptimierung unter Linux
Dezember 2024
Dok.-Nr.: 334019, Rev.: 1.2

Dokumente / Ressourcen

Intel Ethernet 700 Series Linux-Leistungsoptimierung [pdf] Benutzerhandbuch
334019, Ethernet 700 Series Linux Leistungsoptimierung, Ethernet 700 Series, Linux Leistungsoptimierung, Leistungsoptimierung, Tuning

Verweise

Hinterlasse einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Pflichtfelder sind markiert *