虛擬化的算術(shù)題:4個CPU不再只是4個CPU
譯文虛擬化技術(shù)優(yōu)勢眾多,其中最顯著的自然要數(shù)隨時為虛擬機添加CPU與內(nèi)存的能力。想讓自己的虛擬環(huán)境瞬間性能爆表?只要為其分配更多內(nèi)存容量,就能得到令人滿意的結(jié)果。對于系統(tǒng)管理員而言,這簡直是夢幻般的解決方案——面對運算量巨大的任務(wù),我們不必再進行停機升級和煩人的斷線維護,也無需擔心重要資料因重新啟動而丟失,這在無形中消除了日常工作中的巨大麻煩。
然而,無論是動態(tài)方式還是其它類似方式,為虛擬機分配額外CPU與內(nèi)存在某些情況下還是可能對服務(wù)器造成潛在危害。在方便之余,我們還必須正確認真設(shè)備的工作負載與操作系統(tǒng)運行狀態(tài)。
這一切都取決于大家平時所執(zhí)行的工作負載類型、操作系統(tǒng)高度方案以及虛擬機中的虛擬CPU布局。虛擬CPU在資源分配方面有著得天獨厚的優(yōu)勢,其便于上手且流程簡單的特性贏得無數(shù)喝彩與人氣。設(shè)定虛擬CPU數(shù)量然后導(dǎo)入新配置,虛擬機性能直接就會邁上新臺階。不過隨著物理CPU運算核心數(shù)量的不斷攀升以及NUMA的普及,以往簡單的選擇如今也開始復(fù)雜起來?,F(xiàn)在,幾乎每款主流管理程序都提供多套虛擬CPU備選方案。
舉例來說,如果我們要為自己的虛擬機設(shè)置四個虛擬CPU,那么可行方案就有四個單核CPU、兩個雙核CPU和一個四核CPU三種。三者的運行機制差異很大,這些不同之處很可能會影響虛擬服務(wù)器中操作系統(tǒng)的資源調(diào)度機制,進而給管理工作帶來諸多問題。
虛擬機的魔力
由于缺乏快捷的硬性衡量標準,因此我們很難從上述方案中直接做出選擇。要做出適合業(yè)務(wù)需求的判斷,我們必須認真考量工作負載配置文件、資源調(diào)度機制以及操作系統(tǒng)或內(nèi)核版本。早期版本的系統(tǒng)內(nèi)核通常不太善于處理多核心CPU,因此在這類情況下我們最好選擇單核CPU選項。新內(nèi)核及操作系統(tǒng)版本則更偏向于多核心CPU,擅長利用多計算單元進行復(fù)雜的任務(wù)處理。
除此之外,工作負載本身的性質(zhì)同樣影響重大。單線程與多線程工作負載在處理具體實例時所采取的方式有所不同,也許在某些負載中細微到足以忽略不計的差別,卻可能在其它環(huán)境下引發(fā)難以估量的后續(xù)問題。
現(xiàn)代操作系統(tǒng)需要與NUMA緊密契合。在充分利用NUMA的優(yōu)勢之下,內(nèi)存訪問速度將得到顯著提高,進而大大加快處理器與內(nèi)存密集型處理流程的運行周期。當CPU核心只與由其控制的內(nèi)存交互時,由于無需跨越到其它CPU轄區(qū)內(nèi)進行內(nèi)存分配及調(diào)用,速度自然會大大加快。
這是一種基礎(chǔ)特性而且很容易理解,就像去街對面的商店肯定比跑到其它城鎮(zhèn)購物更快捷。然而當我們把管理程序塞入操作系統(tǒng)底層之后,CPU核心與內(nèi)存分配之間的關(guān)系卻變得更為復(fù)雜且難以捉摸。
根據(jù)管理程序為虛擬服務(wù)器提交CPU的不同方式,操作系統(tǒng)可能會認為每個CPU擁有其獨立內(nèi)存控制器或者四個核心共享一套內(nèi)存控制器。在這種情況下,虛擬機管理程序會不斷查詢虛擬服務(wù)器的內(nèi)存分配狀況,同時評估是否需要為當前處理虛擬機工作負載的CPU分配更多活動內(nèi)存。當上述狀況同時出現(xiàn)時,虛擬機的整體性能可能會隨之大幅下降——事實上這種失速現(xiàn)象相當常見。
金玉良言
幸運的是如今我們已經(jīng)找到了能夠確定當前工作負載類型的有效方法——測試,情況一測咱就有數(shù)了。首先建立多套虛擬服務(wù)器,并為其設(shè)定彼此不同的虛擬CPU布局,然后運行相對較簡單的日常工作負載。接下來在更深層面的調(diào)整中,我們可以在虛擬機管理程序級別進行NUMA分配,并測試不同情況下的具體運行效果,最終確定合適的參數(shù)分配方案。
舉例來說,VMware vSphere就擁有asnuma.vcpu.maxPerMachineNode 和 numa.vcpu.maxPerClient兩條調(diào)整參數(shù),其作用在于允許我們調(diào)整可以駐留在單個NUMA節(jié)點中的最大虛擬CPU數(shù)量以及由管理程序作為整體控制的最大虛擬CPU數(shù)量。當然以上二者只是其中一部分,另有一些能夠在特殊情況下發(fā)揮巨大作用的其它參數(shù)。總而言之,大多數(shù)情況下我們只要進行少量調(diào)試與檢測工作,就能為日常工作負載找到最合適的性能解決方案。
這絕不算是什么新概念。早在18個月之前,我就已經(jīng)在InfoWorld網(wǎng)站的虛擬化方案評析文章中提到過這種性能調(diào)整模式,并以紅帽企業(yè)級虛擬化產(chǎn)品為例展開過討論。不過那時候我只是把它當成大家容易忽視的知識要點來談,但今天我則把它作為實實在在的必要管理技能。在大家創(chuàng)建并調(diào)整自己的虛擬機時,請記住在虛擬CPU領(lǐng)域,同樣的數(shù)字“四”卻可能包含著完全不同的意義?;c時間做好測試工作,未來的執(zhí)行流程可能因此變得更加順暢——這就是磨刀不誤砍柴工的道理。