我們往往認(rèn)為物理服務(wù)器是內(nèi)存與CPU核心的集合,但虛擬化引發(fā)了沖突,因?yàn)橛卸鄠€(gè)核工作在共享的內(nèi)存空間內(nèi)。如果虛擬化管理員沒(méi)有完全掌握NUMA節(jié)點(diǎn)的規(guī)模及其對(duì)大型虛擬機(jī)的影響,那么虛擬機(jī)運(yùn)行時(shí)可能會(huì)導(dǎo)致性能問(wèn)題。
Intel在CPU內(nèi)處理內(nèi)存
自Nehalem芯片起,Intel改變了其處理器微架構(gòu)。Intel在CPU芯片內(nèi)而不是由北橋芯片對(duì)內(nèi)存進(jìn)行管理。在該架構(gòu)中,一個(gè)特別的雙內(nèi)聯(lián)內(nèi)存 模塊(DIMM)只會(huì)連接到一個(gè)CPU插槽。為使內(nèi)存連接另一個(gè)CPU插槽,必須通過(guò)連接CPU插槽的互聯(lián)總線(xiàn)請(qǐng)求內(nèi)存頁(yè),然后遠(yuǎn)程CPU插槽再訪(fǎng)問(wèn) DIMM并返回?cái)?shù)據(jù)。
由于經(jīng)過(guò)了其他總線(xiàn),所以訪(fǎng)問(wèn)遠(yuǎn)程DIMM要比本地DIMM的速度慢,這導(dǎo)致了非統(tǒng)一內(nèi)存訪(fǎng)問(wèn)(NUMA)。一個(gè)插槽內(nèi)的CPU核心與本地內(nèi)存的組合稱(chēng)為NUMA節(jié)點(diǎn);物理服務(wù)器的BIOS在啟動(dòng)時(shí)將該信息傳輸給ESXi服務(wù)器。
vSphere如何將虛擬機(jī)遷移到NUMA節(jié)點(diǎn)
讓我們舉個(gè)例子:一臺(tái)虛擬主機(jī)可能有4個(gè)插槽,每個(gè)插槽有6個(gè)核心、16內(nèi)存插槽,內(nèi)存大小為8GB。因此整臺(tái)主機(jī)有24個(gè)核心、128GB的內(nèi)存。每個(gè) NUMA節(jié)點(diǎn)將有六個(gè)CPU核心、32GB的內(nèi)存??雌饋?lái)運(yùn)行配置了4個(gè)vCPU、40GB 內(nèi)存或者配置了8個(gè)vCPU以及24GB內(nèi)存的虛擬機(jī)應(yīng)該不成問(wèn)題,但是上述虛擬機(jī)配置給VMkernel出了難題而且可能會(huì)引起潛在的性能問(wèn)題。
自動(dòng)ESX 3起,vSphere hypervisor就能夠感知NUMA,而且其試圖將虛擬機(jī)保留在單個(gè)NUMA節(jié)點(diǎn)內(nèi)以提供最好以及最穩(wěn)定的性能。大型虛擬機(jī)可能不適合保留在單個(gè) NUMA節(jié)點(diǎn)上。配置了4個(gè)vCPU以及40GB內(nèi)存的虛擬機(jī)可能不適合我所列舉的NUMA節(jié)點(diǎn)。該大型虛擬機(jī)需要在兩個(gè)NUMA節(jié)點(diǎn)之間進(jìn)行擴(kuò)展。大多 數(shù)內(nèi)存將位于一個(gè)NUMA節(jié)點(diǎn)內(nèi),但是某些內(nèi)存將會(huì)位于另一個(gè)NUMA節(jié)點(diǎn)內(nèi),因此訪(fǎng)問(wèn)速度會(huì)有些慢。所有的CPU將會(huì)位于第一個(gè)節(jié)點(diǎn)內(nèi),這樣所有的 vCPU能夠以相同的速度訪(fǎng)問(wèn)內(nèi)存頁(yè)。虛擬機(jī)配置8個(gè)vCPU以及24GB內(nèi)存非常常見(jiàn),盡管其內(nèi)存位于一個(gè)NUMA節(jié)點(diǎn),但兩個(gè)vcPU將會(huì)被安排到另 一個(gè)節(jié)點(diǎn)上。對(duì)于這兩個(gè)vCPU來(lái)說(shuō),所有的內(nèi)存都不在本地,因此其運(yùn)行速度會(huì)比較慢。
知道應(yīng)用負(fù)載以及架構(gòu)至關(guān)重要。如果高配置虛擬機(jī)能夠拆分為兩個(gè)小虛擬機(jī),那么每個(gè)虛擬機(jī)將會(huì)位于一個(gè)NUMA節(jié)點(diǎn)內(nèi),你很可能會(huì)獲得更好的性能。至少,你將會(huì)得到更為一致的結(jié)果,在發(fā)生故障時(shí)將會(huì)有利于故障診斷。
如果應(yīng)用能夠感知NUMA,那就更好了。vSphere使用vNUMA可以創(chuàng)建能夠感知NUMA的虛擬機(jī)。該虛擬機(jī)將會(huì)被分割為虛擬NUMA節(jié)點(diǎn),每個(gè) vNUMA節(jié)點(diǎn)將會(huì)被放置到一個(gè)不同的物理NUMA節(jié)點(diǎn)。盡管虛擬機(jī)仍舊在兩個(gè)NUMA節(jié)點(diǎn)之間擴(kuò)展,但虛擬機(jī)內(nèi)的操作系統(tǒng)和應(yīng)用能夠感知NUMA,資源 使用將會(huì)得到優(yōu)化。
管理員需要了解硬件配置
了解硬件也很重要。這意味著要了解物理服務(wù)器的NUMA節(jié)點(diǎn)規(guī)模并使虛擬機(jī)與節(jié)點(diǎn)規(guī)模相匹配。集群中的所有主機(jī)擁有相同的NUMA節(jié)點(diǎn)規(guī)模,保持集群的一 致性同樣很重要,因?yàn)榕c擁有六核CPU的NUMA節(jié)點(diǎn)相匹配的虛擬機(jī)可能不適合四核CPU主機(jī)。這同樣會(huì)影響你分配給虛擬機(jī)的vCPU的數(shù)量;如果有幾臺(tái) 虛擬機(jī)使用了兩個(gè)以上的vCPU,那么一定要確保多個(gè)虛擬機(jī)與NUMA的核心數(shù)相匹配。比如6核NUMA節(jié)點(diǎn)適合配置了2個(gè)vCPU以及3個(gè)vCPU的虛 擬機(jī),可能不適合配置了4個(gè)vCPU的虛擬機(jī),配置了4個(gè)vCPU的虛擬機(jī)更適合CPU配置為4核以及8核的NUMA節(jié)點(diǎn)。
和很多事情將會(huì)影響vSphere設(shè)計(jì)類(lèi)似,個(gè)人意識(shí)是避免問(wèn)題的關(guān)鍵。小型虛擬機(jī)不需要了解或者關(guān)心NUMA但是大型以及核心的虛擬機(jī)需要感知NUMA才能夠高效運(yùn)行。在設(shè)計(jì)大型虛擬機(jī)時(shí)要適合主機(jī)的NUMA架構(gòu),并確保HA和DRS集群NUMA節(jié)點(diǎn)規(guī)模的一致性。