HPの QLogic(fka Broadcom)NetXtremeIIアダプターに関するホワイトペーパー これには、私がテストしている特定のNIC)が含まれています(ページ7)256バイト/パケットまでのパケットのスモールパケットパフォーマンスが5,000,000パケット/秒を超えていること。
単なるUDP受信部分を除くすべての処理を無効にしたアプリでのテストでは、最大120,000パケット/秒しか実行できません。パケットは12のマルチキャストグループに均等に分散されます。
1コア(2つのソケットにそれぞれ12コアのうち)があることに気付きました。UDP送信レートを上げると、負荷が徐々に増加し、約120,000で最大になります 。しかし、そのコアが何をしているのか、そしてその理由はわかりません。すべてのマルチキャストグループに対してアプリの単一インスタンスを実行するか、それぞれ1つのマルチキャストグループを処理する12のインスタンスを実行するかは問題ではないため、これは私のアプリのシングルスレッドのボトルネックではありません。したがって、ボトルネックは私のレシーバーアプリではありません。
MSIが有効になっており(デバイスマネージャーの "resources by type"ビューで確認 )、RSSもNIC設定で有効になっています、8つのキューがあります。その1つのコアに何がしがみついているのでしょうか?すべてのNICオフロード機能は現在オンになっていますが、オフにしても効果はありませんでした。
では、ボトルネックはどこにあるのでしょうか。
システムの詳細:
RSSもNIC設定で、8つのキューで有効になっています。
残念ながら、RSSが採用されているという意味ではありませんでした。
netsh int tcp show global
示した:
TCP Global Parameters
----------------------------------------------
Receive-Side Scaling State : disabled
実行後(再起動せずに)
netsh int tcp set global rss=enabled
RSSが機能し始め、以前はその1つの貧弱なコアに蓄積されていた負荷が、2つのNUMAノードの1つにある多くのコアに均等に分散されるようになりました。
宣伝されているMppsの負荷を処理できるかどうかは確認していませんが、必要なものをベンチマークするために天井が十分に持ち上げられました。