我們應該使用CPU親和力來提升Windows Server 2012 R2性能嗎?
在幾乎所有情況下,沒有必要使用Windows Server 2012 R2中的CPU親和力將一個工作負載限制在特定的處理器線程(假設每個英特爾處理器內核提供了兩個線程)。有幾個問題考慮。
首先,CPU親和力會與現(xiàn)代大多數(shù)服務器中的非一致性內存訪問(NUMA)產生沖突。NUMA的設計是每個線程幾乎不可能以同樣的速度訪問大量的可用內存:接近某個的核心或處理器封裝(槽)的內存可以比較遠的內存有更快的訪問速度。因此,服務器的調度程序將嘗試安排處理器上的線程最接近運行相應工作負載的內存。人們對此幾乎不了解,因此線程affinity更常驅動不同NUMA區(qū)的處理器線程,實際上是降低了工作負載的性能。
CPU親和力更適用于對稱多處理(SMP)系統(tǒng),該系統(tǒng)中所有的處理器平均訪問內存空間(跟NUMA架構不同)。在SMP模式中,任何線程可以平均地運行在任何處理器上,這是并行處理系統(tǒng)的首個重要條件。然而,操作系統(tǒng)可以根據(jù)線程優(yōu)先級進行自動調度。人為干預對性能的影響較小,但通常不會產生更好的工作負載性能。
現(xiàn)在使用關聯(lián)規(guī)則時,通常測試特定處理器(或特定處理器的核心)的性能。管理員可以看到當前線程使用GetProcessAffinityMask函數(shù)關聯(lián)過程或使用SetProcessAffinityMask函數(shù)來指定進程的線程關聯(lián)。IT管理員可以選擇使用SetThreadIdealProcessor函數(shù)為線程推薦首選(理想的)處理器。該函數(shù)并不迫使應用親和力,調度程序仍然可以選擇其他處理器,但設置理想的處理器可以促使調度程序使用建議的處理器。