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?
quelle
Antworten:
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:
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.local
Stellen Sie daher sicher, dass Sie dies in oder zumindest vor dem Einrichten von NAT einstellen.quelle
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
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:
Daten:
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.
curl google.com
funktioniert.curl google.com
bis der Client fehlschlägt.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
Vom Kunden:
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:
Sie haben auch ähnliche Standardabweichungen:
Und wenn Sie die 2x2-Kombinationen ausführen:
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.
quelle
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
quelle