Ich habe ein Problem mit der trägen Netzwerkleistung zwischen Docker-Containern und dem Netzwerk des Hosts. Ich habe diese Frage im Docker-Forum gestellt, aber bisher keine Antworten erhalten.Sehr geringe Netzwerkleistung von Docker-Containern mit dem Netzwerk des Hosts
Problem
Set-up: zwei Macs auf dem gleichen lokalen Netzwerk; der erste betreibt einen MQTT-Broker (mosquitto); Die zweite läuft Docker für Mac. Zwei C++ - Programme laufen auf dem zweiten Mac und tauschen Daten mehrfach über den MQTT-Broker (auf dem ersten Mac) unter Verwendung der Paho MQTT C-Bibliothek aus.
Nativer Lauf: Wenn ich die zwei C++ - Programme nativ lief, war die Netzwerkleistung wie erwartet ausgezeichnet. Die Programme wurden mit XCode 7.3 erstellt.
Docker läuft: Wenn ich eines der C++ - Programme oder beide in Docker ausgeführt habe, fiel die Netzwerkleistung dramatisch ab, etwa 30 mal langsamer als die native Ausführung. Das Docker-Image basiert auf ubuntu: neuste, und die Programme wurden von gcc (Ubuntu 5.4.0-6ubuntu1 ~ 16.04.1) erstellt. 5.4.0 20160609.
Ich habe versucht, das Host-Netzwerk (--network = "host" in Docker run) aber es hat nicht geholfen. Ich habe auch versucht, den MQTT-Broker auf dem zweiten Mac auszuführen (so dass der Broker und die Container auf demselben Host ausgeführt wurden); Das Problem blieb bestehen. Das Problem bestand sowohl in meinem Arbeits-LAN als auch in meinem Heimnetzwerk.
In der Theorie könnte es sein, dass die C++ - Programme in Docker-Containern im Allgemeinen langsam waren. Aber ich bezweifle, dass dies der Fall war, denn nach meiner Erfahrung ist die allgemeine Leistung von C++ - Code in Docker ungefähr so schnell wie in der nativen Umgebung.
Frage
Was könnte die Ursache für dieses Problem sein? Gibt es irgendwelche Einstellungen in Docker, die dieses Problem lösen können?
Danke für Ihre Antwort. Ich habe versucht, was du vorgeschlagen hast. Die CPU-Auslastung war sehr niedrig (0,3%), die Speicherbelegung betrug 4,4 MB bei 2 GB, die Gesamt-I/O über 500 KB/400 KB insgesamt über 35 Sekunden.Die Netto-I/O-Geschwindigkeit betrug daher nur 14 KB und 11 KB pro Sekunde, ungewöhnlich langsam auf modernen Computern und Netzwerken. Der native Lauf dauerte weniger als 1 Sekunde. Irgendein Vorschlag? – Truong
@Truong Können Sie die MTU-Einstellungen überprüfen, wie ich sie in EDIT hinzugefügt habe? –
Die MTU-Option existiert nicht auf Docker für Mac: https://docs.docker.com/docker-for-mac/networking/. Ich nehme an, die MTU wird standardmäßig auf den Host-Wert eingestellt (1500 in meinem Fall). – Truong