web-dev-qa-db-ja.com

オーバーレイネットワークのパフォーマンスを測定する正しい方法

現在、さまざまな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を実行しています。たとえば、qperfuperfnetpipeが見つかりました。

また、より一般的には、スループットパフォーマンスのボトルネックは通常何であるか疑問に思い始めました。常に[〜#〜] cpu [〜#〜]容量または帯域幅リンクの?オーバーレイネットワークに直接関係しない要因はどれですか。

つまり、アプリケーション(またはオーバーレイネットワーク)のスループットは、特定の量のデータを転送するために必要なCPUサイクル数と、ネットワークを介してデータを収めるためにデータを圧縮する方法(それがボトルネックになる場合)に依存するということですか?.

7
arne.z

DPはCPUと帯域幅の両方にバインドされています。パケットが送信、送信、または受信されることを保証せずにパケットを送信します。

  • 送信側のCPUがビジー状態の場合、パケットは送信されません。
  • 帯域幅が追いつかない場合、パケットは転送中にドロップされます。
  • 受信側のCPUがビジー状態であるか、着信ネットワークデータを処理する準備ができていない場合、CPUは失われます。
  • アプリケーションがOSからパケットを抽出(および処理)する速度が十分でない場合、パケットは失われます。

一般的に言って、UDPのパフォーマンスは無意味です。1秒間に1億パケットを送信しようとすることを妨げるものは何もありません。これにより、送信側のCPUとネットワークが飽和状態になり、受信側はほとんど何も取得しない可能性があります。

あなたが本当にUDPをテストしたいのなら、それは本に値するかなり長いトピックです。手始めに、エラー率と実際に送受信されるデータを監視する必要があります。

TCPでテストして、ホスト間の使用可能な帯域幅を測定する必要があります。iperfはそれを問題なく実行できるはずです。

1
user5994461