Verbessern Sie die Netzwerklatenz für Linux-basierte EC2 Instances - Amazon Elastic Compute Cloud

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 Linux-basierte EC2 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 unter Linux ausgeführt werden. Gehen Sie wie folgt vor, um Ihre Instance-, Kernel- und ENA Treibereinstellungen zu konfigurieren, um eine optimale Latenz zu erreichen. Weitere Anleitungen zur Konfiguration finden Sie im Leitfaden zu bewährten Methoden und zur Leistungsoptimierung für ENA Linux-Treiber unterGitHub.

Anmerkung

Die Schritte und Einstellungen können je nach Ihrer spezifischen Netzwerkhardware, der Art, von der AMI 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, Netzwerk-Hops 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, physisch innerhalb 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 beeinflusst die Linux-Kernelkonfiguration die Latenz

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 von stark frequentierten Abfragen ist die höhere CPU Auslastung des Hosts, die dadurch entsteht, dass in einer engen Schleife nach neuen Daten abgefragt wird. 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.

    $ C:\> 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.

    $ C:\> sudo sysctl -w net.core.busy_poll=50
  • CPUEnergiestatus (C-Status) konfigurieren — C-Status steuern die Schlafstufen, die ein Kern erreichen kann, wenn er inaktiv ist. 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 quasi „schlafend“ und kann erst dann auf Anfragen reagieren, wenn er wieder aufwacht und 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 Leistung und niedrige Latenz durch Begrenzung tieferer C-States im Amazon Linux 2-Benutzerhandbuch.

ENAKonfiguration des Netzwerktreibers

Der ENA Netzwerktreiber ermöglicht die Kommunikation zwischen einer Instanz 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 einen Interrupt, 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 und wirken sich negativ auf den Durchsatz aus, 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 Interrupt-Moderation ist in einigen standardmäßig aktiviert AMIs (kann aber in allen aktiviert oder deaktiviert werden). AMIs

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.

$ C:\> ethtool -c interface | 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.

$ C:\> sudo ethtool -C interface adaptive-rx off rx-usecs 0 tx-usecs 0