在虛擬化的世界裡,資源的分配與管理是很重要的課題,但也最容易被忽略或誤解。在此要介紹的是一些有關VMware vSphere虛擬化資源的重要觀念,主要內容為Virtual CPU、Memory的運作概念,以及VM的資源設定配置基礎,還有了解何謂資源池(Resource Pool)。
圖1表示了vCPU與LCPU之間的對應關係因為是單顆處理器但是有4個核心,所以一個VM最多可虛擬出4個Virtual CPU(當然也要看OS限制)。
|
▲圖1 vCPU與LCPU之間的對應關係(1) |
若先不考慮多個VM在一個實體機器上互相競爭的問題,假設是單一VM:在圖1的例一中,VM有一個vCPU,對應到一個LCPU即可運算;例二,VM為雙CPU,須一次對應2個核心才能做平行運算處理(Virtual SMP);例三,VM為四CPU,須一次對應4個核心,才能做平行運算處理(Virtual SMP)。
假設在這個單顆4核心的實體伺服器上,搭載10個VM,每個VM都給予一個vCPU,那麼就會有10個vCPU隨時要對應這4個Logical CPU來取得運算資源。
當這10個VM要使用運算資源時,透過VMkernel CPU Scheduler的分配來mapping目前閒置的Logical CPU,取得實體運算單位的資源,若是此時4個Logical CPU都是忙碌狀態,VM就得排隊,運算資源依照比重來切換給每個VM運作。
vCPU必須要對應到LCPU,才能真正擁有實體運算能力,而對應事件是無時無刻在發生的,當VM的vCPU對應LCPU1,下一秒它不使用了,資源就釋放出來給別的VM來mapping,隔一分鐘又需要用到,此時VMkernel就會安排另一個空閒的LCPU來服務這個VM。
再看圖2,如果實體機器是2顆雙核心的CPU呢?那就是2個實體CPU乘以雙核心,伺服器一樣有4個Logical CPU可以提供給VM來mapping。
|
▲圖2 vCPU與LCPU之間的對應關係(2) |
Hyper Threading
Hyper Threading(超執行緒)是Intel CPU的一項技術,在一個實體核心整合兩個邏輯處理單元,在某些有支援超執行緒的OS與程式下運作,可以同時處理兩個執行緒,提升運作效能(但在某些不支援的狀態下,反而會造成效能下降)。
如果在實體伺服器BIOS開啟HT的功能,就會發現LCPU多了一倍出來,例如雙核心的CPU會變成了有4個Logical CPU。VMkernel會儘量避免讓一個VM的多個vCPU因為開啟HT的關係而對應在同一個核心上,因為這並非是一個真正SMP的狀態。
圖3中的例二與例三,VM多處理器架構的vCPU都是對應於處理器不同的核心,用以取得真正的平行運處理能力。
|
▲圖3 vCPU與LCPU之間的對應關係(3) |
在不得已的情況之下,vCPU才會被對應到同一個實體核心的另一個LCPU,但這個時候的VM因為vCPU都在同一核心運作,所以無法發揮出SMP應有的效能。
另外,如果是ESX host,因為有Service Console的緣故,當它要使用CPU運算資源時,也會mapping到實體的CPU,因為COS也是一個VM,也需要運算能力。
比較特別的是,當COS需要運算資源的時候,永遠會佔用第一顆實體CPU的第一個Logical CPU,而不會被VMkernel安排到別的地方,這時候若是這個LCPU有被佔用的話,由於COS擁有最高的順位,其他VM就要讓出這個LCPU給它使用,暫時被安排到其他LCPU,或是排隊等候Logical CPU閒置出來。
Multicore Virtual CPUs
各位可能有發現到一些端倪,如果VM的vCPU對應的是Logical CPU,那麼就有可能發生下列的情形:
VM想要使用一個實體的四核心CPU運作,但在Guest OS會被辨識成4個Virtual CPU(Virtual SMP),可能就會造成軟體授權額外收費的問題。假使VM只使用1個vCPU,又會產生實際上只運用到多核心的其中一核的問題。
在vSphere 4.1之後,新增一個Multicore Virtual CPUs功能,可以透過設定讓VM「知道」它實際正使用一個實體的CPU,但上面有四核心,就可以有效運用Virtual SMP,讓Virtual SMP來做平行運算,以增加效能(不過,還是得看應用軟體授權是否合法)。
Memory Virtualization的運作概念
Memory Virtualization的運作概念,可以從Memory over-commit、Transparent Page Sharing(TPS)、Memory Ballooning三方面來加以說明。
Memory over-commit
有經驗的人可能會發現,在虛擬化的環境下,CPU的運算資源並非是首要最吃緊的,除非一開始規劃配置失當,例如錯估VM型態或實體CPU運算能力,造成瓶頸。否則絕大多數的情況下,CPU運算資源分配應該都游刃有餘。
但記憶體就不是這麼一回事了。由於虛擬化環境要達成伺服器統合的需求,越高比例的VM集中在實體機器上,往往需要的實體記憶體就越大。
但因實體記憶體資源有限,不可能永無止盡地供應給VM,因此可以利用某些方式來活化記憶體資源,有效率、動態地利用它來達成「以更少、做更多」的目標。
接下來為各位介紹的,是在VMware vSphere虛擬化環境裡,記憶體虛擬化的技術。VMware在虛擬化記憶體配置的部分下了很大的功夫,讓大家在伺服器裡有限的實體記憶體,可以發揮出最大的使用價值。這就是所謂的「Memory overcommitment」,讓VM使用超額的記憶體。