2011-10-06 64 views
2

我知道有很多方法可以强制执行线程/进程关联,以将特定的线程/进程绑定到各种操作系统中的CPU /内核。我只是想知道是否有办法强制执行CPU套接字亲和力。即强制将线程/进程绑定到可以容纳多处理器芯片的CPU插槽。如何执行CPU套接字亲和力?

由于每个芯片的多处理器日益增加,这个问题就出现了。

回答

1

我知道这样做的唯一方法是找出哪些线程ID映射到哪个套接字(或NUMA节点)。一旦获得了这些信息,就可以使用通常的线程绑定方法来执行它。

如果您在Linux上,可以使用numactl.h库来找出哪个硬件线程属于哪个NUMA节点。尽管NUMA节点并不总是与套接字一对一,但所有后Core 2 Xeons和所有Opteron系统都是如此。

在Windows上,您可以使用GetNumaNodeProcessorMask来确定节点上的哪些硬件线程。

如果它们不是一对一映射的(例如Core 2 Xeons,其中两个套接字位于同一个NUMA节点上),那么从性能的角度来看,它可能无关紧要,除非您试图对每个处理器上的共享缓存进行微观管理。

+0

这意味着当前的操作系统不允许以API的形式提供这样的功能。 –

+0

Windows在其API中本地支持它。对于Linux,您需要该库。多插座机器通常不足以在默认情况下安装这些软件包。 – Mysticial

+0

你可以分享一些关于linux的多套接字库的链接。这将是非常有益的。谢谢。 –

1

如果我正确理解你的问题,你所需要做的就是将进程或线程的关联性设置为驻留在CPU上的一组核心。

根据您的操作系统,可以推断出这些信息。例如,在linux中,您可以查看/proc/cpuinfo并查看哪些内核属于给定的处理器。