4

低レイテンシー (マイクロ秒を気にする金融取引所/コロケーションについて考えています) に関して、2 台の Unix コンピューターで C++ プログラムからパケットを送信するためのオプションは何ですか?

カーネル バイパス ネットワーク カードについて聞いたことがありますが、これはカードの API のようなものに対してプログラムするということですか? これは、標準の Unix berkeley ソケットを使用するよりも高速なオプションであると思いますか?

特にこの分野に携わる方々からの貢献に心から感謝します。

ミリ秒からマイクロ秒に編集

編集済み ネットワーク ハードウェア技術ではなく、C/C++ に基づいた回答を期待しています。これは、ソフトウェアに関する質問として意図されていました。

4

5 に答える 5

1

通常、遅延を減らすと、堅牢性が低下します。たとえば、ADSL の (よく宣伝されている) fastpath オプションと比較してください。パケット転送時間の短縮による遅延の減少は、エラーの影響を受けやすくなるという代償を伴います。多数のネットワーク メディアに同様のテクノロジが存在する可能性があります。そのため、関連するハードウェア テクノロジに大きく依存します。あなたの質問は、あなたがイーサネットについて言及していることを示唆していますが、リンクがイーサネットのみなのか、それとも何か他のもの (ATM、ADSL など) なのか、また他のネットワーク技術もオプションになるのかどうかは不明です。また、地理的な距離にも大きく依存します。

編集:
この質問のハードウェアの側面に少し夢中になりました。アプリケーション設計のレベルで具体的な側面を少なくとも 1 つ提供するには、(2)のようなゼロコピーネットワーク操作を見てください。これらは、元のデータがアプリケーション メモリ以外のソースから取得された場合に限りますが、潜在的な原因の 1 つを排除するために使用できます。sendfile

于 2012-08-09T19:22:18.590 に答える
1

ソフトウェア プロファイリングは、プログラムの明らかな問題を解決します。ただし、ネットワーク パフォーマンスについて話している場合、ネットワーク レイテンシが最大のボトルネックになる可能性があります。TCP を使用している場合は、再送信を防ぐために、ネットワークの輻輳と損失を回避する必要があります。対処するには、いくつかのことを行う必要があります。

  • 帯域幅と信頼性が保証されたネットワークを使用してください。
  • TCP パラメーターのサイズを適切に設定して、損失を招くことなく使用率を最大化します。
  • 発生する可能性のあるわずかな損失を修正するには、データ転送でエラー修正を使用します。

または、TCP の使用を完全に避けることができます。しかし、信頼性が必要な場合は、すでに TCP にあるものの多くを実装することになります。

ただし、これらの問題の多くをすでに検討している既存のプロジェクトを活用することはできます。UDT プロジェクトは、私が知っているプロジェクトの 1 つであり、注目を集めているようです。

于 2012-08-09T19:16:49.977 に答える
1

UDP ソケットは、高速で待ち時間が少なく、両方のマシンが同じ LAN 上にある場合に十分な信頼性があります。TCP は UDP よりもはるかに低速ですが、2 台のマシンが同じ LAN 上にない場合、UDP は信頼できません。

于 2012-08-09T19:09:45.770 に答える
1

過去のある時点で、Windows カーネルにロードされたパケット送信ドライバーを使用しました。このドライバーを使用すると、ソケット レイヤーを使用していたアプリよりも 10 ~ 15 倍強力なパケット ストリームを生成できました (正確な数は覚えていません)。

利点は単純です。送信要求はカーネルから直接来て、ソフトウェアの複数のレイヤーをバイパスします: ソケット、プロトコル (UDP パケットの場合でも単純なプロトコル ドライバー処理が必要です)、コンテキスト スイッチなど。

于 2012-08-09T19:21:16.190 に答える
0

本業として、とある証券取引所で働いています。以下の回答は、この種の高スループットで低遅延のデータ転送に正確に対応するソフトウェア ソリューションから得た私自身の意見です。これは、マーケティング ピッチとして解釈されることを決して意図したものではありません (私は開発者です。) これは、この種の高速データに対するこのソリューションのソフトウェア スタックの必須コンポーネントを示すためのものです (データはストック/取引市場データまたは一般的なデータ):-

1] 物理層 - TCP-UDP/IP ベースのイーサネット ネットワークの場合のネットワーク インターフェイス カード、またはInfiniband Host Channel Adapter と呼ばれる非常に高速で高帯域幅のインターフェイス。IP/イーサネット ソフトウェア スタックの場合は、OS の一部です。Infiniband の場合、カード メーカー (Intel、Mellanox) は、ソケット コードを実装する必要があるドライバー、ファームウェア、および API ライブラリを提供します (infiniband でさえ、2 つのノード間のネットワーク通信に独自の「ソケット」プロトコルを使用します。

2] 私たちが持っている物理層の上の次の層は、基本的に下位ネットワークプロトコルの詳細を抽象化し、物理層からアプリケーション層へのデータ I/O のためのある種のインターフェースを提供するミドルウェアです。このレイヤーは、ある種のネットワーク データ品質保証 (tCP を使用する IF) も提供します。

3] 最後のレイヤーは、ミドルウェアの上に提供するアプリケーションです。私たちから 1] と 2] を取得した人は誰でも、プログラミング言語インターフェイス (C、C++、 Java、C#。

基本的に、お客様のようなクライアントは、当社が提供する API を使用して C、C++ で独自のアプリケーションを開発できます。この API は、NIC または HCA (つまり、実際の物理ネットワーク インターフェイス) とやり取りしてデータを高速で送受信します。

私たちは、クライアントが要求するさまざまな品質と遅延プロファイルに対応する包括的なソリューションを持っています - 一部のニーズ マイクロ秒の遅延は問題ありませんが、高いデータ品質/非常に少ないエラーが必要です。いくつかのエラーは許容できるが、ナノ秒のレイテンシが必要な場合、マイクロ秒のレイテンシが必要な場合、エラーが許容できないなど...

この種のソリューションが必要な場合、または興味がある場合は、SO でここに記載されている連絡先にオフラインで連絡してください。

于 2012-08-11T13:53:34.910 に答える