0

同じホストからの複数の接続が、異なるホストからの複数の接続よりも優れたスループットを達成するのはなぜですか?

カーネル関連 (Linux) であると思われますが、確認が大いに役立ちます。

詳細 受信側プロセスが 1 つあります。これを R と呼びましょう。着信接続を受け入れ、select() を使用してデータを受信します。

私は3つの送信者プロセスS1、S2、S3を持っています。それらは R に接続し、固定レート、つまりそれぞれ 200Mbit/秒でデータを送信します。

S1、S2、および S3 が同じマシン上にある場合、それぞれを別のマシンに配置するよりも良い結果が得られます。(Rはどちらの場合も他のマシンにあります)

例: host0 の R、host2 の S1、S2、S3、R は 600Mbit/s で受信

host0 の R、host1 の S1、host2 の S2、host3 の S3、R は 480Mbit/s で受信

2 番目のケースでは、送信者がネットワーク カードとプロセッサを共有する必要がないため、これは直感に反するように見えます (プロセッサまたはネットワーク カードがボトルネックになるとは考えていません...)。

[上記のホストは、専用の全二重ギガビット スイッチを備えた Linux クラスタ内のノードです。彼らは2.6.24-24-genericを実行しています(最新のUbuntuだと思います)]

4

1 に答える 1

2

これはおそらく、送信者がすべて 1 つのマシン上にある場合、発信パケットがすべて適切にキューに入れられ、一度に 1 つずつ送信されるためです (すべてのパケットが 1 つの NIC を通過するという事実による)。

一方、複数の送信者の場合、2 台のマシンが同時にパケットを送信することが多く、ネットワーク スイッチがそれらをキューに入れます。これは、送信側の TCP に不安定な遅延として現れます。パケットが直接受信側にスイッチングされる場合もあれば、スイッチ キュー内の他の送信者からの 1 つか 2 つのパケットを待たなければならない場合もあります。

遅延ジッターだけでも、帯域幅を大幅に削減できると思います。標準の TCP ウィンドウで 200 mbps を維持するには、最小ラウンドトリップ時間が 2.6 ミリ秒である必要があることを思い出してください。これはかなりタイトです。

于 2009-10-08T00:33:13.623 に答える