マルチプロセッサ システムでは、スレッドはコア間でどのように分散されますか?

マルチプロセッサ システムでは、スレッドはコア間でどのように分散されますか?

現在、2 つの 12 コア プロセッサ (つまり 24 コア) を搭載したシステム上のサーバー アプリケーションの限界を確認しています (ハイパースレッディングは現在無効になっています)。

私はそのボックスで同じアプリの UDP 受信が多いインスタンスを 12 個実行しており、タスク マネージャーによると、2 つのソケットのうちの 1 つの 12 個のコアすべてが最大限に使用されています。しかし、もう 1 つのソケットはアイドル状態です。また、そのアプリケーションの 13 番目のインスタンスを開始しようとしましたが、それでも、すでにビジー状態の最初のソケットで実行されます。

なぜですか? マルチプロセッサ システムでスレッドがコアにスケジュールされるルールは何ですか?

いくつかのアイデア:

  • これは、有効になっており、少なくともアプリの受信スレッドのコアの選択に関係する RSS (受信側スケーリング) と関係があるのでしょうか (ただし、アプリには他の負荷の高いスレッドもあります)?
  • RSS (または MSI/MSI-X) は 1 つのソケットに制限されていますか?
  • 単一のアプリインスタンスを同時に複数のソケットで実行できますか?

システムの詳細:

  • プロリアントBL460c第9世代
  • インテル Xeon E5-2670 v3
  • Windows 2012 R2

答え1

一部のスロット/IO デバイスは、プロセッサの 1 つと直接通信します (他のスロットは他のスロットと通信する場合があります)。そのカード/IO デバイスによって生成された作業をそのプロセッサ上で実行することには利点があります。

例えばDDIOPCI スロット/IO デバイスに接続されたプロセッサに最適に機能します。

関連情報