Leistungsabfall der Download-Geschwindigkeit von Amazon EC2 VPC: NAT-Instanz

7

Ich habe eine Reihe von Servern in Amazon EC2 in VPC. In dieser VPC habe ich ein privates Subnetz und ein öffentliches Subnetz. Im öffentlichen Subnetz habe ich eine NAT-Maschine auf einer t2.micro-Instanz eingerichtet, die dieses NAT-Skript beim Start grundsätzlich ausführt und Regeln in iptables einfügt . Das Herunterladen von Dateien aus dem Internet von einem Computer im privaten Subnetz funktioniert einwandfrei.

Ich habe jedoch die Download-Geschwindigkeit einer Datei auf einem externen FTP-Server mit hoher Bandbreite direkt von meinem NAT-Computer mit der Download-Geschwindigkeit von einem Computer in meinem privaten Subnetz (über denselben NAT-Computer) verglichen. Es gab einen wirklich signifikanten Unterschied: ca. 10 MB / s vom NAT-Computer gegenüber 1 MB / s beim Herunterladen vom Computer im privaten Subnetz.

Auf dem NAT-Computer ist keine CPU-Auslastung vorhanden, daher kann dies nicht der Engpass sein. Wenn ich den gleichen Test mit größeren Computern versuche (m3.medium mit "mäßiger Netzwerkleistung" und m3.xlarge mit "hoher Netzwerkleistung"), konnte ich auch keine Download-Geschwindigkeiten von mehr als 2,5 MB / s erzielen.

Ist dies ein allgemeines NAT-Problem, das optimiert werden kann (und sollte)? Woher kommt der Leistungsabfall?

Aktualisieren

Mit einigen Tests könnte ich dieses Problem eingrenzen. Wenn ich ab 2013 Ubuntu 12.04- oder Amazon Linux NAT-Computer verwende, läuft alles reibungslos und ich erhalte die vollen Download-Geschwindigkeiten, selbst auf den kleinsten t2.micro-Instanzen. Es spielt keine Rolle, ob ich PV- oder HVM-Maschinen benutze. Das Problem scheint kernelbezogen zu sein. Diese alten Maschinen haben eine Kernel-Version 3.4.x, während die neueren Amazon Linux NAT-Maschinen oder Ubunut 14.XX die Kernel-Version 3.14.XX haben. Gibt es eine Möglichkeit, die neueren Maschinen zu optimieren?

j0nes
quelle
Im Allgemeinen ist der NAT-Zugriff langsamer als der direkte Zugriff, da eine zusätzliche Proxy-Schicht erforderlich ist. Sie können versuchen, auf einer Ihrer öffentlichen Instanzen herunterzuladen oder eine größere NAT-Instanz (mindestens t2.medium) zu haben
Nummer 5
Hab das schon versucht. Die offiziellen Amazon NAT AMIs zeigten die gleiche oder eine schlechtere Leistung, und größere Instanzen bis zu m3.xlarge (siehe oben) halfen ebenfalls nicht. Ich kann damit leben, dass Downloads über NAT langsamer sind, aber 10-mal langsamer scheint mir ziemlich viel zu sein.
j0nes

Antworten:

6

Wir haben endlich die Lösung gefunden. Sie können die Download-Geschwindigkeit festlegen, indem Sie sie auf dem NAT-Computer (als Root) ausführen:

ethtool -K eth0 sg off

Dadurch wird der Scatter-Gather-Modus deaktiviert, wodurch (soweit ich das verstehe) keine Netzwerkarbeit mehr auf der Netzwerkkarte selbst entladen wird. Das Deaktivieren dieser Option führt zu einer höheren CPU-Auslastung auf dem Client, da die CPU nun die Arbeit selbst erledigen muss. Auf einem t2.micro-Computer konnten wir jedoch beim Herunterladen eines DVD-Images nur etwa 5% der CPU-Auslastung feststellen.

Beachten Sie, dass dies einen Neustart nicht überlebt. rc.localStellen Sie daher sicher, dass Sie dies in oder zumindest vor dem Einrichten von NAT einstellen.

j0nes
quelle
Das ist faszinierend. Schöner Fund.
Liyan Chang
Vielen Dank. Ich habe viele Stunden damit verbracht, zeitweise auftretende Netzwerkleistungsprobleme bei einer neuen VPC-Konfiguration zu beheben. Meine privaten EC2-Instanzen fordern Dateien von S3 an, und die Anforderungen werden häufig für längere Zeit (manchmal über 2 Minuten) angehalten. Dies konnte leicht reproduziert werden, indem eine Liste von URLs durch curl geleitet wurde. Das Ausführen derselben Anforderungen direkt von der NAT-Instanz zeigte nicht dieselben Probleme. Durch Deaktivieren des Scatter-Gather-Modus auf der NAT-Instanz wurde das Problem sofort behoben.
Mike
Vielen Dank für den Tipp. Ich habe die von @Liyan Chang erwähnten Tests in zwei Fällen mit EIN- und AUS-Streuung durchgeführt und festgestellt, dass das Deaktivieren dieser Option das Herunterladen und Hochladen negativ beeinflusst hat: Test: for ((n=0;n<10;n++)); do speedtest-cli --simple --server 935; done M1.Small: sg: ON Down: 350 Up: 165 M1.Small sg: OFF Down: 355 Up: 165 -------- -------------- T2.Medium sg: ON Down: 875 Up: 520 T2.Medium sg: OFF Down: 812 Up: 317
Montaro
3

Ich verwende auch NAT-Boxen in einem ähnlichen Setup in der Produktion, die sehr an Ihren Ergebnissen interessiert sind. Ich hatte vor der Produktion keine ähnlichen Ergebnisse, aber vielleicht ist es ein Problem, auf das ich vorher nicht geachtet habe.

Lass uns etwas Wissenschaft machen!

================================================== ==========================

Theorie: NAT-Boxen können schneller heruntergeladen und hochgeladen werden als ein Client, der NAT verwendet.

Experiment: Passen Sie das Experiment des Fragestellers an. t2.micros mit Amazon NAT 2014.09 2 Subnetze, wobei das NAT zu einem IGW und einem privaten Subnetz geht, das auf das NAT verweist. (Geteiltes Mietverhältnis. Allzweck-SSD)

Verfahren:

# install speedtest
$ sudo yum install python-pip -y --enablerepo=epel; sudo pip install speedtest-cli
# run against the same server
$ speedtest-cli --server 935 --simple
# run it many times
$ for ((n=0;n<10;n++)); do speedtest-cli --simple --server 935; done

Daten:

          Nat:     Client
Download  727.38   157.99
Upload    250.50   138.91

Fazit: OP lügt nicht.

================================================== ==========================

Theorie: Unterschiedliche Kernelversionen führen zu unterschiedlichen Ergebnissen.

Experiment: Richten Sie 3 Nat-Boxen mit jeweils magnetischer SSD, m3.medium (kein Platzen) und dediziertem Mietverhältnis ein. Führen Sie einen Geschwindigkeitstest durch.

Vorgehensweise: Siehe letztes Experiment. Richten Sie außerdem eine Routing-Tabelle für jede NAT-Box ein. Verwendete eine Blackhole-Routing-Tabelle, um zu beweisen, dass sich die Änderungen beim Austausch von Routing-Tabellen verbreitet haben.

  1. Verwenden eines NAT.
  2. curl google.com funktioniert.
  3. Wechseln Sie zu Blackhole.
  4. Warten Sie, curl google.combis der Client fehlschlägt.
  5. Wechseln Sie zu neuem NAT.
  6. curl google.com funktioniert.

Hier sind meine 3 Nat-Boxen: 2014.09 3.14.20-20.44.amzn1.x86_64 2014.03 3.10.42-52.145.amzn1.x86_64 2013.09 3.4.62-53.42.amzn1.x86_64

Daten:

Alle 3 Boxen erzielen beim Laufen sehr ähnliche Ergebnisse speedtest-cli --server 935

09/14   03/14   09/13
355.51, 356.55, 364.04
222.59, 212.45, 252.69

Vom Kunden:

09/14   03/14   09/13
351.18, 364.85, 363.69
186.96, 257.58, 248.04

Schlussfolgerung: Gibt es eine Verschlechterung? Gibt es einen Unterschied zwischen den Kernel-Versionen? Nein.

================================================== ==========================

Theorie: Engagiertes versus gemeinsames Mietverhältnis macht einen Unterschied.

Experiment: 2 NAT-Boxen. Beide verwenden NAT 2014.09. Eine mit geteiltem Mietverhältnis, eine mit dediziertem Mietverhältnis.

Daten: Beide Boxen haben eine ähnliche Leistung:

Shared Nat   Dedicated Nat
387.67       387.26
296.27       336.89

Sie haben auch ähnliche Standardabweichungen:

$ python3
>>> import statistics
>>> shared_download = [388.25, 333.66, 337.44, 334.72, 338.38, 335.52, 333.73, 333.28, 334.43, 335.60]
>>> statistics.stdev(shared_download)
16.858005318937742
>>> dedicated_download = [388.59, 338.68, 333.97, 337.42, 326.77, 346.87, 336.74, 345.52, 362.75, 336.77]
>>> statistics.stdev(dedicated_download)
17.96480002671891

Und wenn Sie die 2x2-Kombinationen ausführen:

      Shared Client/Sh. NAT  Sh. Client/Dedicated Nat  Ded. Client/Sh. Nat  Ded. Client/Ded. NAT
Upload       290.83                      288.17                283.13              340.94
Download     260.01                      250.75                248.05              236.06

Fazit: Wirklich unklar, ob Shared versus Dedicated keinen großen Unterschied zu machen scheint.

Meta Schlussfolgerungen:

Der Test, der wahrscheinlich wiederholt werden sollte, wäre der OP-Test mit m3.mediums. Ich konnte die t2.micro-Ergebnisse duplizieren, aber mein m3.medium scheint mit den m3.medium-Ergebnissen von OP in Konflikt zu stehen.

Ich würde gerne Ihre Daten auch in Kernelversionen sehen.

Der vielleicht interessanteste Teil ist, dass ich nicht in der Lage war, ein m3.medium NAT schnell zum Laufen zu bringen.

Liyan Chang
quelle
Vielen Dank für Ihre Experimente! Können Sie Ihren zweiten Test mit den Ubuntu 12.04-Instanzen reproduzieren? Dies verwenden wir derzeit ohne Probleme.
j0nes
Ich habe gerade versucht, dies zu reproduzieren. Es sieht so aus, als ob speedtest-cli einfach zu kleine Dateien verwendet. Der Effekt wird deutlich, wenn größere Dateien heruntergeladen werden (z. B. ein Debian-Bild oder ähnliches).
j0nes
0

Meine Tests haben gezeigt, dass meine Downloads dadurch schlechter wurden.

m3.large speedtest server m3.medium dedizierter NAT Server.

Kein anderer Verkehr in dieser Umgebung.

sg im Durchschnitt Download-Geschwindigkeit: 292,19 sg im Durchschnitt Download-Geschwindigkeit: 259,21

Mein Test war: für ((n = 0; n <10; n ++)); mache speedtest-cli - einfach; erledigt

Magd
quelle