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

我目前正在使用两个12核心处理器(即24核心)检查服务器应用程序的限制。 (超线程目前禁用)。

根据任务pipe理器的说法,我在这个盒子上运行着12个UDP接收重要的应用程序的实例,并且最大化了2个sockets之一的所有12个核心。 但另一个sockets是闲置的。 我也尝试启动该应用程序的第13个实例,但它仍然在第一个已经忙的套接字上运行。

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

一些想法:

  • 难道它必须与RSS(接收方缩放),这是启用,并将参与核心select至less为我们的应用程序的接收线程(但该应用程序还有其他工作繁忙的线程)?
  • RSS(或MSI / MSI-X)限于一个套接字?
  • 单个应用程序实例可以同时在多个套接字上运行吗?

系统详情:

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

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

例如, DDIO最适合连接到PCI插槽/ IO设备的处理器。