ベンダーのホワイトペーパーには次のように書かれています: 5Mpps なら問題ありません。120kpps ですでに限界に達しています。ボトルネックはどこにあるのでしょうか?

ベンダーのホワイトペーパーには次のように書かれています: 5Mpps なら問題ありません。120kpps ですでに限界に達しています。ボトルネックはどこにあるのでしょうか?

HPのQLogic (旧 Broadcom) NetXtreme II アダプタに関するホワイトペーパー私がテストしている特定の NIC を含む では、最大 256 バイト/パケットの小さなパケット パフォーマンスは 5,000,000 パケット/秒を超えると記載されています (7 ページ)。

UDP 受信部分以外のすべての処理を無効にしたアプリでのテストでは、1 秒あたり最大 120,000 パケットまでしか実行できませんでした。パケットは 12 個のマルチキャスト グループに均等に分散されます。

私は気づいた1コア(2つのソケットにそれぞれ12個のコアがある)UDP送信速度を上げると負荷が徐々に増加し、最大で約120,000しかし、そのコアが何をしているのか、またその理由はわかりません。これは私のアプリのシングルスレッドのボトルネックではありません。すべてのマルチキャスト グループに対してアプリのインスタンスを 1 つ実行しても、1 つのマルチキャスト グループを処理するインスタンスを 12 個実行しても問題ないからです。したがって、ボトルネックは私の受信アプリではありません。

MSIが有効になっている(デバイス マネージャーの「タイプ別リソース」ビュー)、RSS も NIC 設定で 8 つのキューで有効になっています。では、その 1 つのコアに何が残っているのでしょうか? 現在、すべての NIC オフロード機能がオンになっていますが、オフにしても効果はありませんでした。

では、ボトルネックはどこにあるのでしょうか?

システムの詳細:

  • プロリアントBL460c第9世代
  • Intel Xeon E5-2670 v3 (2 x 12コア)
  • HP FlexFabric 10Gb 2ポート 536FLB NIC
  • Windows 2012 R2

答え1

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 の負荷を処理できるかどうかは確認していませんが、必要なベンチマークを行うには上限が十分に引き上げられました。

関連情報