在多处理器系统中,线程如何在核心之间分布?

在多处理器系统中,线程如何在核心之间分布?

我目前正在检查具有两个 12 核处理器(即 24 核)的系统上的服务器应用程序的限制。(超线程当前已禁用)。

我在该盒子上运行了 12 个 UDP 接收密集型实例,根据任务管理器显示,它占用了 2 个插槽中一个的所有 12 个核心。但另一个插槽处于空闲状态。我还尝试启动该应用程序的第 13 个实例,但它仍然在第一个已经很忙的插槽上运行。

为什么?在多处理器系统中,线程调度到核心的规则是什么?

一些想法:

  • 这是否与 RSS(接收方缩放)有关?它已启用并且至少会参与选择我们应用程序的接收线程的核心(但该应用程序也有其他工作繁重的线程)?
  • RSS(或 MSI/MSI-X)是否仅限于一个插槽?
  • 单个应用程序实例可以/将会同时在多个套接字上运行吗?

系统详细信息:

  • ProLiant BL460c Gen9
  • 英特尔至强 E5-2670 v3
  • Windows 2012 R2

答案1

一些插槽/IO 设备直接与其中一个处理器通信(其他插槽可能与另一个处理器通信)。在该处理器上执行该卡/IO 设备生成的工作具有优势。

例如直接输入输出系统最适合连接到 PCI 插槽/IO 设备的处理器。

相关内容