Windowsで毎秒数百万のデータグラムを処理することは可能ですか?
数十または最大200のマルチキャストグループを使用して、高速UDPマルチキャストデータグラム(ほとんど100〜400バイト)を受信するHPCアプリをWindowsに実装できるかどうかを調査しています(つまり、MSI-XとRSSを使用して複数のコアに拡張)、パケットごとに処理を行ってから送信します。TCP経由で送信すると、壁にぶつかることなく(6.4Gb /秒)必要な範囲まで上昇しましたが、高いppsレートでデータグラムを受信することが問題であることが判明しました。 で、最近のテストのWindows 2012 R2上の2ポートを持つハイスペックNUMAマシン上での10GbイーサネットNIC、私はすることができた毎秒UDPデータグラムの数十万人受けし、実際にデータを処理せずに(早期低下、すなわち2x12コアを使用して、アプリの処理オーバーヘッドを式から削除して、取得速度を確認します。テストされた12のマルチキャストグループのカーネル部分は、1つのNUMAノードの8コアまたは10コアに分散しているように見えました(最大RSSキューが設定されていました) 16)-.netアプリではありますが、ネイティブアプリはより高速に動作するはずです。 しかし、たとえレンホルゲートは 唯一500kppsでUDPパケットを受信するために管理における彼の、高性能のWindows RIOテスト 1024バイトのUDPペイロードを使用して、。 でQLogicのホワイトペーパー(言及されていないテスト対象OS)「ルーティングマルチスレッド超小型パケット」の制限は、(受信及び送信以降の両方を含むように?)に設定されている5.7Mpps。で記事のLinuxのネットワーク、限界がに設定されている2Mppsに1Mppsコアあたり(伝え多かれ少なかれ直線的にスケールアップ)、あるいは15Mppsそのバイパスカーネルの特別なソリューションを。 例えばネットマップ 900Mhzで実行されている単一のコアを備えた10GigEリンクで、ラインレート(14.88Mpps)でトラフィックを生成できます。これはパケットあたり約60〜65クロックサイクルに相当し、コアとクロック周波数(4コアでは、450 MHz未満でラインレートが達成されます)に合わせて拡張できます。受信側でも同様のレートに達します。 では、Windows / Windows Server(の最新バージョン)、特に先行段落で説明したUDPマルチキャストの受信はどこまでできますか? 編集 Linuxでそれを行う方法について、cloudflareブログの投稿と興味深いコメントセクションがあります。1秒間に100万パケットを受信する方法、および対応するハッカーニュースのコメントページがあります。