在虛擬化的世界裡,資源的分配與管理是很重要的課題,但也最容易被忽略或誤解。在此要介紹的是一些有關VMware vSphere虛擬化資源的重要觀念,主要內容為Virtual CPU、Memory的運作概念,以及VM的資源設定配置基礎,還有了解何謂資源池(Resource Pool)。
本篇文章重點不在VMware vSphere資源分配管理的操作與設定,而是著重於虛擬化資源分配的初步理解。首先,就從Virtual CPU的運作概念開始說起。
Virtual CPU的運作概念
要了解Virtual CPU的運作概念,可從實體運算資源如何分配與對應、Logical CPU、Hyper Threading、Multicore Virtual CPUs來加以說明。
實體運算資源如何分配與對應
在以往傳統的運作模式,一部實體伺服器可能配備有一顆或多顆實體的處理器(Physical CPU),但是卻只有一個作業系統在使用這些CPU。
作業系統並非時常要使用這些CPU的運算能力,可能只有某段時間才需要運算能力,過了一陣子又不需要。
這種情形往往造成CPU大部分的時間都處於閒置的狀態,整體時間拉長來看,處理器的使用效率非常的低落。
有沒有想過,一個資料中心有著數百數千部伺服器散落於各個角落,平時這些伺服器所要利用到的CPU資源,可能都只是一整天當中的某一小段時間,其他時候,這些已開機卻閒置的CPU資源,形成了多大的浪費呢?
正因運算資源閒置的時間太長、太零散,所以如果有一種方法可以統籌這些運算資源,透過疏導與分配的方式,讓很多的OS排隊來利用這些閒置的資源,當有需要時,就來請求使用,不需要時,就不要霸佔著位置不放。虛擬化就是一帖良方,可以有效拉高運算資源的使用率。
首先,要探討的是Virtual CPU(vCPU)的概念。以一個VM來說,當你給了它兩顆vCPU的時候,並不是代表這個VM真的擁有兩個實體CPU的運算能力。
因為它的CPU是虛擬出來的,每個VM上的Guest OS所看到的CPU,其實都不是真的,沒有實際的運算能力。那麼,要如何讓這個VM真正擁有運算能力呢?
當虛擬的CPU能夠「對應」到一個實體運算單位(Logical CPU,或稱為Hardware Execution Context、HEC)的時候,它就真正取得了實體的運算能力。
我們知道一個實體CPU在同一時間,是不可能幫多個OS作運算的,在一個CPU Cycle單位時間內,一次只能處理一個執行緒,沒辦法被切成兩半,分割資源給VM_A,同時又切割給VM_B來使用。
所以,假設要讓一個4GHz的實體CPU分給兩個VM同時來使用,希望VM_A拿到3GHz運算資源,另一個VM拿到1GHz運算資源,那Hypervisor該怎麼做呢?答案就是剛剛所說的,利用虛擬「對應」實體的方式來達成目的。
Hypervisor採用CPU Mapping的方式分配運算資源,實體CPU先四分之三的時間對應給VM_A,然後再將四分之一的時間對應給VM_B,實體CPU(或核心)一次只服務一個VM,並且這段時間是全速來幫它做運算。
靠著時間分配快速切換於不同的VM之間,這樣子等於VM_A掌握了75%的運算資源,而VM_B則拿到25%,看起來VM_A就像是有3GHz的效能,而VM_B則是1GHz。
Logical CPU
Logical CPU表示一個真實的運算單位(處理器或核心),例如一顆4核心的CPU,表面上看起來是一個處理器,但是因為內含有4個核心(Cores),而這些核心都是具有實體運算效能,所以真正的Logical CPU有4個。