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