Wie vergleiche ich den Netzwerkdurchsatz zwischen Amazon EC2 Linux Instances in derselben Amazon VPC?

Lesedauer: 8 Minute
0

Ich möchte die Netzwerkbandbreite zwischen Amazon Elastic Compute Cloud (Amazon EC2) Linux Instances in derselben Amazon Virtual Private Cloud (Amazon VPC) messen.

Kurzbeschreibung

Die folgenden Faktoren können die Amazon EC2-Netzwerkleistung beeinflussen, wenn sich die Instances in derselben Amazon VPC befinden:

  • **Die physische Nähe der EC2 Instances:**Instances in derselben Availability Zone liegen geografisch am nächsten beieinander. In den folgenden Szenarien sind die Instanzen zunehmend weiter voneinander entfernt:
    Instances in verschiedenen Availability Zones in derselben AWS-Region
    Instanzen in verschiedenen Regionen auf demselben Kontinent
    Instanzen in verschiedenen Regionen auf verschiedenen Kontinenten
  • Die maximale Übertragungseinheit (MTU) der EC2 Instance. Die MTU einer Netzwerkverbindung ist die größte zulässige Paketgröße (in Byte), die Ihre Verbindung übertragen kann. Alle EC2-Instance-Typen unterstützen 1500 MTU. Alle Amazon EC2 Instances der aktuellen Generation unterstützen Jumbo-Rahmen. Darüber hinaus verwenden die Instances der vorherigen Generationen C3, G2, I2, M3 und R3 auch Jumbo-Rahmen. Jumbo-Rahmen ermöglichen mehr als 1500 MTU. Es gibt jedoch Szenarien, in denen Ihre Instance selbst mit Jumbo-Rahmen auf 1500 MTU begrenzt ist. Weitere Informationen finden Sie unter Jumbo-Rahmen (9001 MTU).
  • Die Größe Ihrer EC2 Instance: Größere Instances für einen Instance-Typ bieten in der Regel eine bessere Netzwerkleistung als kleinere Instances desselben Typs. Weitere Informationen finden Sie unter Amazon-EC2-Instance-Typen.
  • **Verbesserte Netzwerkunterstützung von Amazon EC2 für Linux:**Eine verbesserte Netzwerkunterstützung kann sich auf die Leistung anderer Instances als der Instance-Typen T2 und M3 auswirken. Weitere Informationen finden Sie unter Verbesserte Vernetzung unter Linux. Informationen zur Aktivierung von Enhanced Networking auf Ihrer Instance finden Sie unter Wie aktiviere und konfiguriere ich Enhanced Networking auf meinen EC2 Instances?
  • **Amazon-EC2-Unterstützung für High Performance Computing (HPC), die Platzierungsgruppen verwendet:**HPC bietet volle Bisektionsbandbreite und geringe Latenz. HPC ermöglicht je nach Instance-Typ die Unterstützung von Netzwerkgeschwindigkeiten von bis zu 100 Gigabit. Informationen zur Überprüfung der Netzwerkleistung für jeden Instance-Typen finden Sie in der AMI-Instance-Typmatrix für Amazon Linux. Weitere Informationen finden Sie unter Instances in einer Platzierungsgruppe starten.
  • Die Instance verwendet einen Netzwerk-E/A-Credit-Mechanismus, um die Netzwerkbandbreite zuzuweisen: Instances, die mit einem -Symbol in der Spalte Netzwerkleistung unter Allzweck-Instances — Netzwerkleistung gekennzeichnet sind, können die angegebene maximale Netzwerkleistung erreichen. Diese Instances verwenden jedoch einen Netzwerk-E/A-Credit-Mechanismus, um Instances Bandbreite auf der Grundlage der durchschnittlichen Bandbreitennutzung zuzuweisen. Daher weicht die Netzwerkleistung für diese Instances ab.

Aufgrund dieser Faktoren können erhebliche Unterschiede bei der Netzwerkleistung zwischen verschiedenen Cloud-Umgebungen auftreten. Es ist eine bewährte Methode, die Netzwerkleistung Ihrer Umgebung regelmäßig zu bewerten und Basiswerte festzulegen, um die Anwendungsleistung zu verbessern. Das Testen der Netzwerkleistung bietet wertvolle Erkenntnisse zur Bestimmung der EC2-Instance-Typen, -Größen und -Konfigurationen, die Ihren Anforderungen am besten entsprechen. Sie können Netzwerkleistungstests auf jeder beliebigen Kombination von Instances ausführen.

Weitere Informationen erhalten Sie, wenn Sie eine AWS-Support-Anfrage öffnen und nach zusätzlichen Netzwerkleistungsspezifikationen für die spezifischen Instance-Typen fragen, an denen Sie interessiert sind.

Lösung

Bevor Sie mit den Benchmark-Tests beginnen, müssen Sie Ihre EC2 Linux Instances starten und konfigurieren:

  1.     Starten Sie zwei Linux Instances, von denen aus Sie Netzwerkleistungstests ausführen können.
  2.     Stellen Sie sicher, dass die Instances Erweitertes Netzwerk für Linux unterstützen und dass sie sich in derselben Amazon VPC befinden.
  3.     (Optional) Wenn Sie Netzwerktests zwischen Instances durchführen, die keine Jumbo-Rahmen unterstützen, folgen Sie den Schritten unter Network Maximum Transmission Unit (MTU) für Ihre EC2 Instance, um die MTU auf Ihrer Instance zu überprüfen und festzulegen.
  4.     Stellen Sie eine Verbindung zu den Instances her, um zu überprüfen, dass Sie auf die Instances zugreifen können.

Installieren des iperf-Netzwerk-Benchmark-Tools auf beiden Instances

In einigen Distributionen, wie Amazon Linux, ist iperf Teil des EPEL-Repositorys (Extra Packages for Enterprise Linux). Informationen zum Aktivieren des EPEL-Repositorys finden Sie unter Wie aktiviere ich das EPEL-Repository für meine Amazon EC2 Instance, auf der CentOS, RHEL oder Amazon Linux ausgeführt wird?

Hinweis: Der Befehl iperf bezieht sich auf die Version 2.x. Der Befehl iperf3 bezieht sich auf Version 3.x. Verwenden Sie die Version 2.x, wenn Sie EC2 Instances mit hohem Durchsatz vergleichen, da die Version 2.x die Multi-Thread-Unterstützung bietet. Obwohl die Version 3.x auch parallele Streams mit der -P-Flag unterstützt, ist die Version 3.x eine Single-Thread-Version, die durch eine einzelne CPU begrenzt wird. Aus diesem Grund setzt die Version 3.x voraus, dass mehrere Prozesse parallel laufen, um den erforderlichen Durchsatz auf größeren EC2 Instances zu erzielen. Weitere Informationen finden Sie unter iperf2/iperf3 auf der ESNet-Website.

Stellen Sie eine Verbindung zu Ihren Linux-Instances her und führen Sie dann die folgenden Befehle aus, um iperf zu installieren.

Führen Sie den folgenden Befehl aus, um iperf auf RHEL 6-Linux-Hosts zu installieren:

# yum -y install  https://dl.fedoraproject.org/pub/archive/epel/6/x86_64/epel-release-6-8.noarch.rpm  && yum -y install iperf

Führen Sie den folgenden Befehl aus, um iperf auf RHEL 7-Linux-Hosts zu installieren:

# yum -y install  https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm  && yum -y install iperf

Führen Sie den folgenden Befehl aus, um iperf auf Debian/Ubuntu-Hosts zu installieren:

# apt-get install -y iperf

Führen Sie den folgenden Befehl aus, um iperf auf CentOS 6/7-Hosts zu installieren:

# yum -y install epel-release && yum -y install iperf

Amazon Linux 2023

Da Amazon Linux 2023 (AL2023) EPEL nicht unterstützt, können Sie das iperf-Hilfsprogramm nicht über das EPEL-Repository herunterladen. Weitere Informationen finden Sie unter Zusätzliche Pakete für Enterprise Linux (EPEL).

Sie können iperf für AL2023 jedoch manuell herunterladen und installieren:

  1. Entwicklungstools und Git installieren:

    sudo yum groupinstall "Development Tools"sudo yum install git
  2. Klonen Sie den iperf-Code:

    cd /usr/local/sudo git clone https://git.code.sf.net/p/iperf2/code iperf2-code
  3. Erstellen und installieren Sie das Paket:

    cd /usr/local/iperf2-codesudo ./configure
    sudo make
    sudo make install

Testen der TCP-Netzwerkleistung zwischen den Instances

Standardmäßig kommuniziert iperf beim Testen der TCP-Leistung über den Port 5001. Sie können diesen Port jedoch mithilfe des -p-Schalters konfigurieren. Stellen Sie sicher, dass Sie Ihre Sicherheitsgruppen so konfigurieren, dass die Kommunikation über den von iperf verwendeten Port ermöglicht wird.

  1.     Konfigurieren Sie eine Instance als Server, der den Standardport abhört, oder geben Sie mit dem Schalter -p einen alternativen Listener-Port an. Ersetzen Sie 5001 gegebenenfalls durch Ihren Port:

    $ sudo iperf -s \[-p 5001\]
  2.     Konfigurieren Sie eine zweite Instance als Client und führen Sie einen Test mit den gewünschten Parametern auf dem Server durch. Der folgende Befehl initiiert beispielsweise einen TCP-Test für die angegebene Server-Instance mit 40 parallelen Verbindungen:

    $ iperf -c 172.31.30.41 --parallel 40 -i 1 -t 2

    Hinweis: Verwenden Sie für einen bidirektionalen Test mit iperf (Version 2) die Option -r auf der Client-Seite.

Die Ausgabe verwendet diese Parameter, um das Intervall pro Client Stream, die pro Client Stream übertragenen Daten und die Bandbreite anzuzeigen, die jeder Client Stream verwendet. Die folgende iperf-Ausgabe zeigt Testergebnisse für zwei c5n.18xlarge EC2 Linux Instances an, die in einer Cluster-Platzierungsgruppe gestartet wurden. Die Gesamtbandbreite, die über alle Verbindungen übertragen wird, beträgt 97,6 Gbit/s:

------------------------------------------------------------------------------------
Client connecting to 172.31.30.41, TCP port 5001
TCP window size:  975 KByte (default)
------------------------------------------------------------------------------------
[  8] local 172.31.20.27 port 49498 connected with 172.31.30.41 port 5001
[ 38] local 172.31.20.27 port 49560 connected with 172.31.30.41 port 5001
[ 33] local 172.31.20.27 port 49548 connected with 172.31.30.41 port 5001
[ 40] local 172.31.20.27 port 49558 connected with 172.31.30.41 port 5001
[ 36] local 172.31.20.27 port 49554 connected with 172.31.30.41 port 5001
[ 39] local 172.31.20.27 port 49562 connected with 172.31.30.41 port 5001
...
[SUM]  0.0- 2.0 sec  22.8 GBytes  97.6 Gbits/sec

Testen der UDP-Netzwerkleistung zwischen den Instances

Standardmäßig kommuniziert iperf beim Testen der UDP-Leistung über den Port 5001. Sie können jedoch den Schalter**-p** verwenden, um Ihren Port zu konfigurieren. Stellen Sie sicher, dass Sie Ihre Sicherheitsgruppen so konfigurieren, dass die Kommunikation über den von iperf verwendeten Port ermöglicht wird.

Hinweis: Die Standardeinstellung für UDP ist 1 Mbit/s, sofern Sie keine andere Bandbreite angeben.

  1.     Konfigurieren Sie eine Instance als Server, der den Standard-UDP-Port abhört, oder geben Sie mit dem Schalter -p einen alternativen Listener-Port an. Ersetzen Sie 5001 gegebenenfalls durch Ihren Port:

    $ sudo iperf -s -u \[-p 5001\]
  2.     Konfigurieren Sie eine zweite Instance als Client und führen Sie dann einen Test mit den gewünschten Parametern auf dem Server durch. Das folgende Beispiel initiiert einen UDP-Test für die angegebene Server-Instance, wobei der Parameter -b auf 5g gesetzt ist. Der Parameter -b ändert die Bandbreite von der UDP-Standardeinstellung von 1 Mbit/s auf 5g. 5g ist die maximale Netzwerkleistung, die eine Instance vom Typ c5n18xlarge für einen einzigen Verkehrsfluss innerhalb einer VPC bereitstellen kann:
    Hinweis: UDP ist verbindungslos und verfügt über keine Algorithmen zur Überlastungskontrolle wie TCP. Beim Testen mit iperf ist die mit UDP erhaltene Bandbreite möglicherweise niedriger als die mit TCIP erhaltene Bandbreite.

    \# iperf -c 172.31.1.152 -u -b 5g

Hier ist eine Beispielausgabe aus dem UDP-Test:

$ iperf -c 172.31.30.41 -u -b 5g
------------------------------------------------------------------------------------
Client connecting to 172.31.30.41, UDP port 5001
Sending 1470 byte datagrams, IPG target: 2.35 us (kalman adjust)
UDP buffer size:  208 KByte (default)
------------------------------------------------------------------------------------
[  3] local 172.31.20.27 port 39022 connected with 172.31.30.41 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3] 0.0-10.0 sec  5.82 GBytes  5.00 Gbits/sec
[  3] Sent 4251700 datagrams
[  3] Server Report:
[  3] 0.0-10.0 sec  5.82 GBytes  5.00 Gbits/sec   0.003 ms 1911/4251700 (0.045%)
[  3] 0.00-10.00 sec  1 datagrams received out-of-order

Diese Ausgabe zeigt die folgenden Werte:

  • Intervall (Zeit)
  • Menge der übertragenen Daten
  • Erreichte Bandbreite
  • Jitter (die Zeitabweichung bei der periodischen Ankunft von Datengrammen)
  • Verlust und Summe der UDP-Datagramme

Ähnliche Informationen

Festplattentests mit iperf3 auf der ESnet Website

Netzwerk-Tuning auf der ESNet-Website

Vergleich der Durchsatz-Tools auf der ESNet-Website

iperf2 auf der SourceForge-Website

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 2 Jahren