Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Verbessern Sie die Netzwerklatenz für EC2 Linux-Instances
Die Netzwerklatenz ist die Zeitspanne, die ein Datenpaket benötigt, um von seiner Quelle zu seinem Ziel zu gelangen. Anwendungen, die Daten über das Netzwerk senden, sind auf zeitnahe Antworten angewiesen, um eine positive Benutzererfahrung zu bieten. Eine hohe Netzwerklatenz kann zu verschiedenen Problemen führen, z. B. zu den folgenden:
-
Langsame Ladezeiten für Webseiten
-
Verzögerung des Videostreams
-
Schwierigkeiten beim Zugriff auf Online-Ressourcen
In diesem Abschnitt werden Schritte beschrieben, die Sie ergreifen können, um die Netzwerklatenz auf EC2 Amazon-Instances zu verbessern, die auf Linux ausgeführt werden. Um eine optimale Latenz zu erreichen, führen Sie die folgenden Schritte aus, um Ihre Instance, den Kernel und die ENA Treibereinstellungen zu konfigurieren. Weitere Hinweise zur Konfiguration finden Sie unter Leitfaden für bewährte Methoden für ENA Linux-Treiber und Leistungsoptimierung
Anmerkung
Die Schritte und Einstellungen können je nach Ihrer spezifischen Netzwerkhardware, derAMI, von der aus Sie Ihre Instance gestartet haben, und Ihrem Anwendungsfall leicht variieren. Bevor Sie Änderungen vornehmen, testen und überwachen Sie Ihre Netzwerkleistung gründlich, um sicherzustellen, dass Sie die gewünschten Ergebnisse erzielen.
Reduzieren Sie die Anzahl der Netzwerk-Hops für Datenpakete
Jeder Sprung, den ein Datenpaket bei der Übertragung von Router zu Router zurücklegt, erhöht die Netzwerklatenz. Üblicherweise muss der Datenverkehr mehrere Sprünge machen, um Ihr Ziel zu erreichen. Es gibt zwei Möglichkeiten, Netzwerksprünge für Ihre EC2 Amazon-Instances zu reduzieren:
-
Cluster-Placement-Gruppe — Wenn Sie eine Cluster-Placement-Gruppe angeben, EC2 startet Amazon Instances, die sich in unmittelbarer Nähe zueinander befinden, d. h. physisch in derselben Availability Zone (AZ), mit engerer Packung. Durch die räumliche Nähe der Instances in der Gruppe können sie die Vorteile einer Hochgeschwindigkeitsverbindung nutzen, was zu niedrigen Latenzzeiten und einem hohen Durchsatz für einzelne Datenströme führt.
-
Dedicated Host – Ein Dedicated Host ist ein physischer Server ausschließlich für Ihre Verwendung. Mit einem Dedicated Host können Sie Ihre Instances so starten, dass sie auf demselben physischen Server ausgeführt werden. Kommunikation zwischen Instances, die auf demselben Dedicated Host ausgeführt werden, kann ohne zusätzliche Sprünge erfolgen.
Wie sich Linux-Kernelkonfiguration auf die Latenz auswirkt
Die Konfiguration des Linux-Kernels kann die Netzwerklatenz erhöhen oder verringern. Um Ihre Ziele zur Latenzoptimierung zu erreichen, ist es wichtig, die Konfiguration des Linux-Kernels an die spezifischen Anforderungen Ihres Workloads anzupassen.
Es gibt viele Konfigurationsoptionen für den Linux-Kernel, die helfen können, die Netzwerklatenz zu verringern. Die wirkungsvollsten Optionen sind folgende.
-
Aktivieren des Besetztabfrage-Modus – Der Besetztabfrage-Modus reduziert die Latenzzeit auf dem Netzwerkempfangspfad. Wenn Sie den Besetztabfrage-Modus aktivieren, kann der Socket-Schicht-Code die Empfangswarteschlange eines Netzwerkgeräts direkt abfragen. Der Nachteil des Busy-Polls ist die höhere CPU Auslastung des Hosts, die durch das Abrufen neuer Daten in einer engen Schleife entsteht. Es gibt zwei globale Einstellungen, welche die Anzahl der Mikrosekunden steuern, die auf Pakete für alle Schnittstellen gewartet wird.
busy_read
-
Ein Busy-Poll-Timeout mit geringer Latenz für Socket-Lesevorgänge. Dies steuert die Anzahl der Mikrosekunden, die gewartet wird, bis die Socket-Schicht Pakete in der Geräte-Warteschlange liest. Um das Feature global mit dem Befehl sysctl zu aktivieren, empfiehlt die Linux Kernel-Organisation einen Wert von 50 Mikrosekunden. Weitere Informationen finden Sie unter busy_read
im Benutzer- und Administratorenhandbuch für Linux-Kernel. [ec2-user ~]$
sudo sysctl -w net.core.busy_read=50
busy_poll
-
Ein Busy-Poll-Timeout mit geringer Latenzzeit für die Abfrage und Auswahl. Das steuert die Anzahl der Mikrosekunden, die auf Ereignisse gewartet wird. Der empfohlene Wert liegt zwischen 50 und 100 Mikrosekunden, abhängig von der Anzahl der abzufragenden Sockets. Je mehr Sockets Sie hinzufügen, desto höher sollte die Zahl sein.
[ec2-user ~]$
sudo sysctl -w net.core.busy_poll=50
-
Konfigurieren des CPU Energiestatus (C-Status) — C-Status steuert die Ruhezustände, in denen sich ein Kern in inaktiven Zustand befinden kann. Es kann ratsam sein, die C-Status zu steuern, um Ihr System im Hinblick auf Latenz und Leistung zu optimieren. In tieferen C-Zuständen CPU ist der im Wesentlichen „eingeschlafen“ und kann nicht auf Anfragen reagieren, bis er aufwacht und wieder in einen aktiven Zustand übergeht. Das Versetzen von Cores in den Ruhezustand benötigt Zeit. Und auch wenn ein Core im Ruhezustand mehr Spielraum zur Nutzung einer höheren Frequenz durch einen anderen Core zulässt, dauert es auch wieder eine gewisse Zeit, bis der Core aus dem Ruhezustand erwacht und Arbeitsschritte ausführen kann.
Wenn beispielsweise ein Core, der für die Bearbeitung von Interrupts für Netzwerkpakete zuständig ist, schläft, kann es zu einer Verzögerung bei der Bearbeitung des Interrupts kommen. Sie können das System so konfigurieren, dass es keine tieferen C-Zustände verwendet. Diese Konfiguration reduziert zwar die Latenz der Prozessorreaktion, aber gleichzeitig wird auch der Turbo-Boost-Spielraum für andere Cores verringert.
Um die Reaktionslatenz des Prozessors zu verringern, können Sie tiefere C-Status begrenzen. Weitere Informationen finden Sie unter Hohe Performance und geringe Latenz durch die Beschränkung von tieferen C-Zuständen im Amazon Linux 2-Benutzerhandbuch.
ENANetzwerktreiber konfiguration
Der ENA Netzwerktreiber ermöglicht die Kommunikation zwischen einer Instance und einem Netzwerk. Der Treiber verarbeitet Netzwerkpakete und leitet sie an den entsprechenden Netzwerkstapel oder die Nitro-Karte weiter. Wenn ein Netzwerkpaket eingeht, generiert die Nitro-Karte eine Unterbrechung, CPU um die Software über ein Ereignis zu informieren.
- Unterbrechen
-
Eine Unterbrechung ist ein Signal, das ein Gerät oder eine Anwendung an den Prozessor sendet. Die Unterbrechung teilt dem Prozessor mit, dass ein Ereignis eingetreten ist oder eine Bedingung erfüllt wurde, die sofortige Aufmerksamkeit erfordert. Interrupts können zeitkritische Aufgaben wie den Empfang von Daten von einer Netzwerkschnittstelle, die Bearbeitung von Hardwareereignissen oder die Bearbeitung von Anforderungen von anderen Geräten erledigen.
- Moderation unterbrechen
-
Die Interrupt-Moderation ist eine Technik, die die Anzahl der von einem Gerät generierten Interrupts reduziert, indem sie aggregiert oder verzögert werden. Der Zweck der Interrupt-Moderation besteht darin, die Systemleistung zu verbessern, indem der mit der Bearbeitung einer großen Anzahl von Interrupts verbundene Aufwand reduziert wird. Zu viele Interrupts erhöhen die CPU Auslastung, was sich negativ auf den Durchsatz auswirkt, während zu wenige Interrupts die Latenz erhöhen.
- Dynamische Interrupt-Moderation
-
Die dynamische Interrupt-Moderation ist eine erweiterte Form der Interrupt-Moderation, bei der die Interrupt-Rate dynamisch an die aktuelle Systemlast und die Verkehrsmuster angepasst wird. Sie zielt darauf ab, ein Gleichgewicht zwischen der Reduzierung des Interrupt-Overheads und der Reduzierung der Pakete pro Sekunde oder Bandbreite zu finden.
Anmerkung
Die dynamische Unterbrechungsmoderation ist in einigen Fällen standardmäßig aktiviert AMIs (kann aber in allen AMIs aktiviert oder deaktiviert werden).
Um die Netzwerklatenz zu minimieren, ist es eventuell erforderlich, die Unterbrechungsmoderation zu deaktivieren. Dies kann jedoch auch den Aufwand für die Verarbeitung von Unterbrechungen erhöhen. Es ist wichtig, das richtige Gleichgewicht zwischen der Reduzierung der Latenzzeit und der Minimierung des Aufwands zu finden. ethtool
-Befehle können Sie bei der Konfiguration der Unterbrechungsmoderation unterstützen. rx-usecs
Ist standardmäßig auf 20
gesetzt und tx-usecs
ist auf 64
gesetzt.
Verwenden Sie den folgenden Befehl, um die aktuelle Änderungskonfiguration der Unterbrechung abzurufen.
[ec2-user ~]$
ethtool -cinterface
| egrep "rx-usecs:|tx-usecs:|Adaptive RX"Adaptive RX: on TX: off rx-usecs: 20 tx-usecs: 64
Verwenden Sie den folgenden Befehl, um die Unterbrechungsmodifikation und die dynamische Unterbrechungsmoderation zu deaktivieren.
[ec2-user ~]$
sudo ethtool -Cinterface
adaptive-rx off rx-usecs 0 tx-usecs 0