現在、さまざまなDockerオーバーレイネットワークのパフォーマンス(特にUDPスループット)を調べています。これを行うには、Dockerオーバーレイネットワークに接続されている2つのホスト間にポイントツーポイント接続を作成し、Dockerコンテナー内でiperf
を実行してスループットを調べます。 iperf
をクライアントとして実行して、iperf
をサーバーとして実行している他のコンテナーにデータを送信するたびに、クライアントホストのCPU使用率が100%に達することに気付きました。 here で見つけた次のコマンドを実行すると、その結果が得られました。
top -bn1 | grep "Cpu(s)" | \
sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | \
awk '{print 100 - $1"%"}'
したがって、スループットテストの制限要因は、ホストのCPU容量です。これは、ホストが100%で実行され、ネットワーク接続を飽和させるためにそれ以上のトラフィックを生成できないためです。これがiperf
固有の問題かどうか疑問に思っているので、別のツールで同じテストを実行したかったのですが、どちらの方法が最適かわかりません。ホストはUbuntuを実行しています。たとえば、qperf
、uperf
、netpipe
が見つかりました。
また、より一般的には、スループットパフォーマンスのボトルネックは通常何であるか疑問に思い始めました。常に[〜#〜] cpu [〜#〜]容量または帯域幅リンクの?オーバーレイネットワークに直接関係しない要因はどれですか。
つまり、アプリケーション(またはオーバーレイネットワーク)のスループットは、特定の量のデータを転送するために必要なCPUサイクル数と、ネットワークを介してデータを収めるためにデータを圧縮する方法(それがボトルネックになる場合)に依存するということですか?.
DPはCPUと帯域幅の両方にバインドされています。パケットが送信、送信、または受信されることを保証せずにパケットを送信します。
一般的に言って、UDPのパフォーマンスは無意味です。1秒間に1億パケットを送信しようとすることを妨げるものは何もありません。これにより、送信側のCPUとネットワークが飽和状態になり、受信側はほとんど何も取得しない可能性があります。
あなたが本当にUDPをテストしたいのなら、それは本に値するかなり長いトピックです。手始めに、エラー率と実際に送受信されるデータを監視する必要があります。
TCPでテストして、ホスト間の使用可能な帯域幅を測定する必要があります。iperf
はそれを問題なく実行できるはずです。