Hyper-V性能加速之NUMA
SMP和NUMA
根據(jù)CPU訪問內(nèi)存中地址所需時間和距離我們可以將CPU和內(nèi)存結(jié)構(gòu)分為SMP(SMP,Symmetric Multi-Processor,也稱之為一致內(nèi)存訪問UMA)、NUMA和MPP(Massive Parallel Processing)三種結(jié)構(gòu)。而我們在虛擬化環(huán)境中常用的結(jié)構(gòu)包括SMP和NUMA這兩種。相對SMP(UMA)來說,NUMA具有更加好的擴(kuò)展性。NUMA將CPU和相近的內(nèi)存配對組成節(jié)點(diǎn),在每個NUMA節(jié)點(diǎn)里,CPU都有本地內(nèi)存,訪問距離短,性能好。NUMA比SMP具有更好的擴(kuò)展性,SMP使用共享內(nèi)存控制器,所有的CPU使用共享內(nèi)存總線訪問內(nèi)存,如圖1所示。在CPU不多的時候,SMP可以很好地工作,但是一旦CPU的數(shù)量很大的時候,這些 CPU 既可能造成內(nèi)存總線的壓力,也可能發(fā)生CPU之間相互“爭奪”對共享內(nèi)存總線的訪問。NUMA采用分組的形式,限制一個NUMA節(jié)點(diǎn)里面的CPU數(shù)量和內(nèi)存大小,并使用緩存一致性內(nèi)部連接總線將各個NUMA節(jié)點(diǎn)連接起來,如圖2所示。在服務(wù)器CPU日益增多和虛擬化普及的時代,NUMA更能適應(yīng)高密度虛擬化環(huán)境的要求。
圖1
圖2
虛機(jī)NUMA 拓?fù)溆成?/p>
那么虛機(jī)是否能用到NUMA的特性呢?從Windows Server2012開始,Hyper-V虛機(jī)可以映射虛擬的NUMA拓?fù)洌谔摍C(jī)配置了較多內(nèi)存的時候,使用NUMA拓?fù)溆成淠鼙WC分配給虛機(jī)的CPU只訪問本地的內(nèi)存,從而達(dá)到提升性能。Hyper-V為虛機(jī)提供虛擬NUMA節(jié)點(diǎn),虛擬NUMA的拓?fù)浣Y(jié)構(gòu)及原理與物理機(jī)的NUMA拓?fù)浼敖Y(jié)構(gòu)一致,虛擬CPU和虛機(jī)內(nèi)存組合成虛擬NUMA節(jié)點(diǎn),每個虛機(jī)的虛擬NUMA節(jié)點(diǎn)都映射到相關(guān)的物理CPU上,如圖3所示。Hyper-V虛機(jī)能夠感知物理機(jī)NUMA拓?fù)洳⒃趩⒂肗UMA時進(jìn)行默認(rèn)映射,通常如果虛機(jī)虛擬CPU沒有超過物理機(jī)單顆CPU的核數(shù),那么通常只生成一個虛機(jī)NUMA節(jié)點(diǎn)。雖然我們可以進(jìn)行自定義給虛機(jī)分配設(shè)置多個虛擬NUMA節(jié)點(diǎn),但是跨NUMA節(jié)點(diǎn)的拓?fù)淦x了物理機(jī)的拓?fù)浣Y(jié)構(gòu),會影響性能的提升速度,所以在一些高負(fù)載應(yīng)用場景下不建議不經(jīng)規(guī)劃設(shè)置多個虛擬NUMA節(jié)點(diǎn)。
圖3 虛擬NUMA拓?fù)溆成?/p>
舉個例子,物理機(jī)有兩顆CPU,每顆CPU有20個邏輯核,因此該物理機(jī)一共有40個邏輯核和256GB內(nèi)存,所以每個CPU邏輯核對應(yīng)約6.4GB內(nèi)存。每顆CPU和它臨近的內(nèi)存組成一個NUMA拓?fù)涔?jié)點(diǎn),因此物理機(jī)一共有兩個NUMA節(jié)點(diǎn),每個NUMA節(jié)點(diǎn)包含20個邏輯核和128GB內(nèi)存,如果虛機(jī)啟用NUMA映射,那么這個虛機(jī)的NUMA節(jié)點(diǎn)拓?fù)淅锇畲蟮奶摂MCPU數(shù)是20,內(nèi)存數(shù)是128GB,如圖4所示。
圖4 虛機(jī)NUMA拓?fù)鋬?nèi)存和CPU
虛擬NUMA也支持跨物理NUMA,如果單個虛擬NUMA超過了單個物理NUMA節(jié)點(diǎn)的CPU數(shù)量,可能會出現(xiàn)虛機(jī)NUMA拓?fù)浜臀锢頇C(jī)NUMA拓?fù)涑霈F(xiàn)偏離的情況,導(dǎo)致CPU訪問遠(yuǎn)程內(nèi)存的情況發(fā)生,如圖5所示。因?yàn)檫h(yuǎn)程內(nèi)存的訪問速度比本地內(nèi)存訪問速度慢,因此可能導(dǎo)致性能提升沒有在NUMA拓?fù)鋬?nèi)那么明顯。
圖5 跨物理NUMA
舉個例子,給虛擬NUMA拓?fù)湓O(shè)置成最多10個虛擬CPU,那么依據(jù)當(dāng)前的環(huán)境,按照NUMA拓?fù)涞淖畲髢?nèi)存應(yīng)該限制在64GB內(nèi)存,如果虛機(jī)分配了10個CPU和超過64GB內(nèi)存,則虛擬機(jī)必然要訪問其NUMA節(jié)點(diǎn)之外的遠(yuǎn)程內(nèi)存。同理,如果虛機(jī)的NUMA節(jié)點(diǎn)的CPU超過了物理機(jī)NUMA節(jié)點(diǎn)的CPU,這些CPU也將訪問其他NUMA節(jié)點(diǎn)的遠(yuǎn)程內(nèi)存。
要查看物理機(jī)的NUMA拓?fù)?,可以在服?wù)器系統(tǒng)的任務(wù)管理器查看,也可以使用PowerShell命令查看。在系統(tǒng)里打開任務(wù)管理器,再打開資源監(jiān)視器,選擇CPU選項(xiàng)卡后,可以查看到NUMA的節(jié)點(diǎn)數(shù)和每個節(jié)點(diǎn)的CPU使用情況,如圖6所示。
圖6 在任務(wù)管理器查看NUMA拓?fù)?/p>
使用PowerShell命令Get-VMHostMumaNode可以查看物理機(jī)的NUMA節(jié)點(diǎn)更加詳細(xì)的信息,包括內(nèi)存以及剩余內(nèi)存,如下示例所示。
PS C:\> Get-VMhostNumaNode
NodeId
: 0
ProcessorsAvailability
: {0, 0, 0, 0...}
MemoryAvailable
: 38459
MemoryTotal
: 131035
ComputerName
: Host01
NodeId
: 1
ProcessorsAvailability
: {0, 0, 0, 0...}
MemoryAvailable
: 38470
MemoryTotal
: 131072
ComputerName
: Host01
虛擬化
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。