Ich untersuche derzeit die Leistung (insbesondere den UDP-Durchsatz) verschiedener Docker-Overlay-Netzwerke. Dazu erstelle ich Punkt-zu-Punkt-Verbindungen zwischen zwei Hosts, die mit einem Docker-Overlay-Netzwerk verbunden sind, und führe sie dann iperf
in den Docker-Containern aus, um den Durchsatz zu untersuchen. Ich habe festgestellt, dass jedes Mal, wenn ich iperf
als Client ausgeführt werde, um Daten an den anderen Container zu senden, der iperf
als Server ausgeführt wird, die CPU-Auslastung des Client-Hosts 100% erreicht. Ich habe dieses Ergebnis erhalten, indem ich den folgenden Befehl ausgeführt habe, den ich hier gefunden habe :
top -bn1 | grep "Cpu(s)" | \
sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | \
awk '{print 100 - $1"%"}'
Daher scheint mir der begrenzende Faktor meiner Durchsatztests die CPU-Kapazität meines Hosts zu sein, da dieser zu 100% ausgeführt wird und nicht mehr Datenverkehr generieren kann, um die Netzwerkverbindung zu sättigen. Ich frage mich, ob dies ein iperf
spezifisches Problem ist, deshalb wollte ich dieselben Tests mit einem anderen Tool durchführen, bin mir aber nicht sicher, welche Alternative die beste wäre . Auf den Hosts wird Ubuntu ausgeführt. Zum Beispiel fand ich qperf
, uperf
und netpipe
.
Im Allgemeinen begann ich mich zu fragen, was normalerweise der Engpass für die Durchsatzleistung ist. Ist es nicht immer entweder die CPU- Kapazität oder die Bandbreite der Verbindung? Welches sind Faktoren, die nicht direkt mit den Overlay-Netzwerken zusammenhängen.
Bedeutet dies, dass der Durchsatz einer Anwendung (oder eines Overlay-Netzwerks) nur davon abhängt, wie viele CPU-Zyklen sie benötigt, um eine bestimmte Datenmenge zu übertragen, und wie sie komprimiert wird, um sie durch das Netzwerk zu passen (wenn dies der Engpass wäre).