Wie vergleiche ich den Netzwerkdurchsatz zwischen Amazon EC2 Linux Instances in derselben Amazon VPC?
Ich möchte die Netzwerkbandbreite zwischen Amazon Elastic Compute Cloud (Amazon EC2) Linux Instances in derselben Amazon Virtual Private Cloud (Amazon VPC) messen.
Kurzbeschreibung
Es gibt mehrere Faktoren, die sich auf die Leistung des Amazon EC2-Netzwerks auswirken können, 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 Enhanced Networking auf 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 Platzierungsgruppen.
- 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 kann es erhebliche Leistungsunterschiede zwischen Cloud-Umgebungen geben. Es ist ein bewährtes Verfahren, die Netzwerkleistung Ihrer Umgebung regelmäßig zu evaluieren und zu überprüfen, um die Anwendungsleistung zu verbessern. Das Testen der Netzwerkleistung bietet Erkenntnisse zur Bestimmung der EC2-Instance-Typen, -Größen und -Konfigurationen, die Ihren Anforderungen 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:
- Starten Sie zwei Linux Instances, von denen aus Sie Netzwerkleistungstests ausführen können.
- Stellen Sie sicher, dass die Instances Erweitertes Netzwerk für Linux unterstützen und dass sie sich in derselben Amazon VPC befinden.
- (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.
- 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 Version 2.x. Der Befehl iperf3 bezieht sich auf Version 3.x. Da Version 2.x Multi-Thread-Unterstützung bietet, können Sie damit EC2-Instanzen mit hohem Durchsatz benchmarken. Version 3.x unterstützt mit dem Flag -P auch parallele Streams, aber es handelt sich um einen Single-Thread und ist auf eine einzige CPU beschränkt. 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:
-
Entwicklungstools und Git installieren:
sudo yum groupinstall "Development Tools" sudo yum install git
-
Klonen Sie den iperf-Code:
cd /usr/local/ sudo git clone https://git.code.sf.net/p/iperf2/code iperf2-code
-
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.
-
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]
-
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.
-
Konfigurieren Sie eine Instance als Server, der auf dem Standard-UDP-Anschluss lauscht. Oder geben Sie mit dem Schalter -p einen alternativen Listener-Anschluss an. Ersetzen Sie 5001 gegebenenfalls durch Ihren Port:
$ sudo iperf -s -u [-p 5001]
-
Konfigurieren Sie eine zweite Instance als Client. Führen Sie dann einen Test gegen den Server mit den gewünschten Parametern durch. Das folgende Beispiel führt einen UDP-Test für die angegebene Server-Instance aus, wobei der Parameter -b auf 5g gesetzt ist. Der Parameter -b ändert die Bandbreite von der 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
Im Folgenden sehen Sie ein Beispiel für die Ausgabe des UDP-Tests:
$ 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
Relevanter Inhalt
- AWS OFFICIALAktualisiert vor 4 Jahren
- AWS OFFICIALAktualisiert vor 4 Jahren
- AWS OFFICIALAktualisiert vor einem Jahr