4

2 つのシミュレーション アプリケーション (C++ で記述) 間の IO データ転送速度 (帯域幅) を測定しようとしています。実際のアプリケーションでこの計算方法を実装する前に、ネットワーク帯域幅を計算する私の方法が正しいことを確認するためだけに、非常に単純な perfclient および perfserver プログラムを作成しました。したがって、この場合、プログラムで行う必要があります (Iperf は使用しません)。

perfclient および perfserver プログラムをさまざまなドメイン (ローカルホスト、イーサネットに接続されたコンピューター、ワイヤレス接続に接続されたコンピューター) で実行しようとしました。ただし、これらの異なるホストのそれぞれで、約 1900 Mbps (1472 バイトのデータ サイズを使用してテスト) のほぼ同じ帯域幅を取得します。これは妥当な結果ですか、それともより正確な帯域幅を取得できますか?

各 send() と recv() の最大データ サイズとして 1472 (ヘッダーを含まないイーサネット MTU) を使用する必要がありますか? また、さまざまなデータ サイズを使用してみました。これが得られた平均帯域幅 (イーサネット接続を使用してテスト) です。数値が 1Gbps を超えて 28 Gbps のような値に達したため、意味がありませんでした。

SIZE    BANDWIDTH
1KB     1396 Mbps
2KB     2689 Mbps
4KB     5044 Mbps
8KB     9146 Mbps
16KB    16815 Mbps
32KB    22486 Mbps
64KB    28560 Mbps

ここに私の現在のアプローチがあります:
私は基本的なピンポン ファッション ループを行いました。このループでは、クライアントはデータ ストリームのバイトをサーバー プログラムに継続的に送信します。サーバーはそれらのデータを読み取り、そのデータをクライアント プログラムに反映 (送信) します。次に、クライアントはそれらの反映されたデータを読み取ります (双方向伝送)。上記の操作を 1000 回繰り返し、その時間を 1000 で割って平均待ち時間を求めました。次に、平均待ち時間を 2 で割り、片道の伝送時間を取得しました。帯域幅は次のように計算できます。

bandwidth = total bytes sent / average 1-way transmission time

私のアプローチに何か問題がありますか?結果が偏っていないことを確認するにはどうすればよいですか? これを正しく理解したら、元のアプリケーション (この単純なテスト アプリケーションではない) でこのアプローチをテストする必要があり、このパフォーマンス テストの結果を科学論文に掲載したいと考えています。

編集: 私はこの問題を解決しました。以下に投稿した回答を確認してください。

4

2 に答える 2

1

車輪を再発明する必要がない限り、iperfはこの問題だけを処理するように作られています。

Iperf は、最大の TCP および UDP 帯域幅パフォーマンスを測定するための最新の代替手段として NLANR/DAST によって開発されました。Iperf を使用すると、さまざまなパラメーターと UDP 特性を調整できます。Iperf は、帯域幅、遅延ジッター、データグラム損失を報告します。

于 2012-04-16T12:55:02.673 に答える
0

私はついにこれを理解して解決することができました:-)
質問で述べたように、使用したネットワークアーキテクチャ(ローカルホスト、1Gbpsイーサネットカード、ワイヤレス接続など)に関係なく、達成した帯域幅は最大28Gbpsに拡大されました. 次のように、サーバーの IP アドレスをいくつかの異なる IP アドレスにバインドしようとしました。

127.0.0.1  
IP address given by my LAN connection  
IP address given by my wireless connection

したがって、これは正しい結果をもたらすはずだと思っていましたが、実際にはそうではありませんでした。これは主に、クライアント プログラムとサーバー プログラムの両方を同じコンピューターで実行していたためです (クライアントとサーバーは両方とも異なる IP アドレスにバインドされていても、ターミナル ウィンドウは異なります)。私の推測では、これは内部ループバックが原因です。これが、結果に偏りがあり、正確でない主な理由です。

とにかく、クライアントを 1 つのワークステーションで実行し、サーバーを別のワークステーションで実行しようとしました。別のネットワーク接続を使用してテストしたところ、期待どおりに動作しました :-)
1Gbps 接続で、約 9800 Mbps (0.96 Gbps)、そして 10Gbps 接続では、約 10100 Mbps (9.86 Gbps) を得ました。したがって、これは私が期待したとおりに機能します。したがって、私のアプローチは正しいです。完全 !!

于 2012-04-18T07:36:45.480 に答える