当前位置:文档之家› VMware vSphere资源分配管理观念入门

VMware vSphere资源分配管理观念入门

善用虛擬化特性VMware vSphere資源分配管理觀念入門在虛擬化的世界裡,資源的分配與管理是很重要的課題,但也最容易被忽略或誤解。

在此要介紹的是一些有關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 CPULogical CPU表示一個真實的運算單位(處理器或核心),例如一顆4核心的CPU,表面上看起來是一個處理器,但是因為內含有4個核心(Cores),而這些核心都是具有實體運算效能,所以真正的Logical CPU有4個。

圖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 ThreadingHyper 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 使用超額的記憶體。

舉個例子,如果你準備將公司機房的老舊伺服器改成虛擬化的方式運作,在評估導入的階段,決定先採購一台全新的實體伺服器,並且將幾個不是擔任重要任務的老舊伺服器,以P2V的方式移轉成VM,如果成效好的話,再逐步地將重要關鍵的伺服器線上P2V轉移過去。

假設這些老舊伺服器當初購買的配置都是2GB的RAM,我們現在打算先移轉5台老舊伺服器變成VM,集中在新採購的伺服器上運作,那麼新伺服器在購買的時候應該配置多少記憶體呢?既然要將5部老舊主機P2V,而這些老舊主機每部都是配置2GB記憶體,所以採購新伺服器的時候,假設一口氣安裝了10GB的實體記憶體(在此排除TPS、COS、VMkernel memory、VM memory overhead等因素)。

等到你真正地完成5部老舊伺服器的P2V動作,然後從Virtual Hardware、Guest OS的工作管理員資訊中,確定每個VM都分配到2GB的記憶體。

5個VM經過幾天測試也都運作得很順暢,甚至效能比以前更好。

整體運作效能提升可以理解,畢竟多年前的老舊伺服器,可能當時需要4顆CPU才跑得順的應用,現在只要一顆CPU就能應付得了。

但是你同時也發現了另外一件事,透過vSphere Client顯示ESX/ESXi host的資訊,配備10GB實體記憶體的新伺服器,居然只被用了一半(5GB)左右。

這到底是怎麼一回事呢?明明每個VM的Virtual Hardware配置的都是2GB,在Windows OS看到的可用記憶體也都是2GB,但為什麼5個VM運作時只吃了總共5GB的實體記憶體?這就是虛擬化的好處。

每個VM雖然配置了2GB記憶體,但是它不見得實際需要用到這麼多。

相关主题