2016-12-10 8 views
0

UDPデータパケットを1 ... N個のアドレス(多くの場合はマルチキャスト)に送信する既存のアプリケーションで、インフラストラクチャの一部を再設計しています。現在、T個のトランスミッタオブジェクトが存在し、場合によっては、すべてのトランスミッタが同じアドレスに送信しています。UDPパケットを同じアドレスに送信する効率

例を単純化して説明すると、3つのトランスミッタオブジェクトがあり、すべて1つの特定のアドレスに送信する必要があるとします。私の質問はより効率的です:

オプション1)1つのソケットにミューテックスを置き、すべての送信機(T)が同じソケットを共有するようにします。

T----\ 
T----->Socket 
T----/ 

オプション2)3つの別々のソケットを使用し、すべて同じ場所に送信します。

T----->Socket 1 
T----->Socket 2 
T----->Socket 3 

私は2番目のオプションを使用して、ボンネットの下に、OSまたはNICが大きな画像で最終的な送信の周りにミューテックスを置き、オプション2は、おそらくオプション1とは別の全体の多くではないと思われます。

私はおそらく私の開発PCで来週の実験をセットアップするつもりですが、ユーザーがインストールする可能性のあるすべてのコンピュータ設定をテストする方法はありません。私はまた、WindowsとLinux、別のNICチップセットメーカーなど、さまざまな実装があることを認識していますが、誰かが過去の経験やアーキテクチャーに関する知識を持っていて、

ありがとうございます!

+1

UDPは無接続で、UDPデータグラムは自己完結型のネットワークパケットです。 1つのソケットへのアクセスを手動でシリアル化する利点はありません。ネットワーキングスタックは、送信中にシリアル化を処理します。私は各トランスミッタに独自のソケットを使用させて、それらを放棄させます。 –

答えて

0

Windows 10コンピュータでベンチマークを実行した後、少なくとも私は何を期待するかという大まかな考えを示す "答え"を持っています。すべてのシステムが同じように動作することを100%保証することはできませんが、実行するサーバーのほとんどはIntel NICとWindows 10を使用しています。通常のパケットサイズは約1200バイトです。私の特定のシナリオでは正しいです。他の誰かがこの実験を利用するのを助けるかもしれない場合に備えて、結果をここに掲載することにしました。

私は最初にT送信スレッドを生成する単純なコマンドラインアプリケーションを構築します。このアプリケーションはすべて、その周りにmutexを持つ単一のソケットを使用します。直後に同じ数のトランスミッタで別のテストを実行しますが、今回は各トランスミッタに独自のソケットがあるため、ミューテックスは必要ありませんでした(ただし、ロック機構がある程度は低いとは思いますが)。各トランスミッタはできるだけ速くパケットを爆発させます。

  • 2,700,000パケットを1200バイトごとに:

    これは私が使用したテストのセットアップです。

  • リリースモード、64ビット。
  • i7-3930K CPU、Intel Gigabit CT PCIEアダプター。 SharedSocket = 28.2650秒:1ソケット= 28.2073秒

そして、ここでは結果

  • 1トランスミッタです。
  • 3送信機:SharedSocket = 28.4485 sec:MultipleSockets = 27.5190 sec。
  • 6送信機:SharedSocket = 28.7414 sec:MultipleSockets = 27.3485 sec。
  • 12トランスミッタ:SharedSocket = 27。9463秒:MulitpleSockets = 27.3479秒。

期待どおり、1つのスレッドだけのテストでは、ほぼ同じ時間が両方にありました。ただし、3,6、および12トランスミッタの場合、ソケットを共有する代わりにスレッドごとに1つのソケットを使用することで、パフォーマンスが約3%向上します。それは大きな違いではありませんが、あなたのシステムからすべての最後のオンスを絞り出そうとするなら、それは有用な統計になります。私の特定のアプリケーションは膨大な量のビデオを送信するためのものです。

ここでは、サーバー側のTaskManagerのネットワークページのスクリーンショットを示します。テストの途中でスループットが増加することがわかります。これは、2回目のマルチソケットテストに切り替えることと一致します。私はクライアントコンピュータのスクリーンキャプチャも含めました(それはWindows 7のボックスでした)。

Screenshot

関連する問題