2011-10-06 49 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並查看哪些內核屬於給定的處理器。