Richtige Methode zur Messung der Overlay-Netzwerkleistung

7

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 iperfin den Docker-Containern aus, um den Durchsatz zu untersuchen. Ich habe festgestellt, dass jedes Mal, wenn ich iperfals Client ausgeführt werde, um Daten an den anderen Container zu senden, der iperfals 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 iperfspezifisches 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, uperfund 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).

arne.z
quelle

Antworten:

1

UDP ist sowohl an die CPU als auch an die Bandbreite gebunden . Es sendet Pakete, ohne zu garantieren, dass sie gesendet, gesendet oder empfangen werden.

  • Wenn die Sender-CPU zu beschäftigt ist, wird das Paket nie gesendet.
  • Wenn die Bandbreite nicht mithalten kann, werden Pakete während der Übertragung verworfen.
  • Wenn die Empfänger-CPU zu beschäftigt ist oder nicht bereit ist, eingehende Netzwerkdaten zu verarbeiten, geht sie verloren.
  • Wenn die Anwendung Pakete nicht schnell genug aus dem Betriebssystem extrahiert (und verarbeitet), gehen sie verloren.

Im Allgemeinen sind UDP-Leistungen bedeutungslos. Nichts hindert Sie daran, 1 Bazillion Pakete pro Sekunde zu senden. Das sättigt die Sender-CPU und das Netzwerk, während der Empfänger möglicherweise nicht viel von irgendetwas bekommt.

Wenn Sie UDP wirklich testen möchten, ist dies ein ziemlich langes Thema, das eines Buches würdig ist. Für den Anfang müssen Sie die Fehlerraten und die tatsächlich gesendeten / empfangenen Daten überwachen.

Sie sollten mit TCP testen, um die verfügbare Bandbreite zwischen Hosts zu messen. iperfsollte in der Lage sein, das ganz gut zu tun.

user5994461
quelle