如何强制CPU Socket亲和力?

时间:2011-10-06 04:59:12

标签: multithreading cpu multicore affinity

我知道有一些方法可以强制执行线程/进程关联,以便将特定线程/进程绑定到各种操作系统中的CPU /核心。我只是想知道是否有办法强制执行CPU Socket亲和性。即强制执行一个线程/进程绑定到一个CPU套接字,它可以容纳一个多处理器芯片。

问题出现的原因是每个芯片的多处理器日益增加。

2 个答案:

答案 0 :(得分:1)

我知道这样做的唯一方法是找出哪个线程ID映射到哪个套接字(或NUMA节点)。获得此信息后,您可以使用常用的线程绑定方法来强制执行此操作。

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

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

如果它们没有一对一映射(例如Core 2 Xeons,两个套接字都位于同一个NUMA节点上),从性能角度看它可能无关紧要,除非你'重新尝试对每个处理器上的共享缓存进行微观管理。

答案 1 :(得分:1)

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

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