close

 

目前剛好在整理 Resource Management 的部份,所以本月教學文開放 vSphere 4 書裡的部分內容,這些觀念從以前到現在都是通用的喔~ 

VM的資源設定與分配

前面已經提到在虛擬化環境中,實體CPUMemory資源怎樣運作,由Hypervisor統一調度、分配給VM來使用。但是在企業環境裡頭,一定有很多時候,不同的應用其實是有分優先順序的,對於重要的服務,當然會擺在首位,得到最多的關愛眼神。 

如今,VM已經都集中化在虛擬環境互相競爭,我們當然也可以針對不同的VM給予不同的資源,經由這些設定,來確保某些VM能夠享有更豐富硬體資源。 

CPUMemory的資源有三種設定:LimitReservationShare

 

Limit

限制VMCPU或記憶體資源,訂出一個上限值,此VM無論如何不能使用超過這個數值的資源,CPU數值單位是MHzMemory數值單位是MB

l   例(CPU):VM ACPU Limit設定為1000MHz,則無論實體CPU有多少運算資源,有沒有其他的VM參與競爭,VM A「最多」就是拿到1000MHz的資源。

l   例(Memory):VM AMemory Limit設為1000MB的話,表示不管有多少實體記憶體可分配,也不管VM配置多少RAM,「最多」就是拿到1GB記憶體使用。

註:Memory Limit的最大上限值取決於VM的上一層(ESX hostResource Pool)最大擁有的可分配記憶體資源。而CPU Limit則受限VM有多少vCPU、實體CPU的運算時脈、以及VM的上一層(ESX hostResource Pool)最大擁有的可分配資源。 

QMemory Limit設定的意義在哪裡?不是可以一開始就配置VM需要多少RAM嗎?而且Virtual Hardware也可以隨時更改配置呀?

 

其實Memory Limit比較常用於Resource Pool這個等級,增加臨時調度需求的彈性。通常一般情況下,不用針對個別VM設定Memory LimitVMavailable memory自動等於Memory Limit。 例如VMA配置了2GB的記憶體,如果Memory Limit你設定為3GB,這樣並無意義,因為VM不會使用超過2GB

 

不過VM設定Memory Limit的好處是,可隨時限制VM的記憶體使用量而不用重新開機。舉例來說,VMA目前配置2GB的記憶體,但你認為它只要1GB就足夠使用,那就設Limit1000MB即可,不用關機後重新更改Virtual Hardware的記憶體配置。等到VM需要更多,再取消Memory Limit就好了。

 

Reservation

Reservation是保留值,簡單的說就是「保證」VM一定會有的資源。VM設定了Reservation,如果開機起來,就一定會拿到這些專屬、獨占的實體資源,這個部份是不會被分享或被別人搶走的。

 l   例(CPU):若VM AReservation設定為500MHz,則當VM A成功開機後,保證至少會有500MHz的運算效能可用。

 l   例(Memory):若VM AReservation設定為500MB,則當VM A成功開機後,保證至少會有500MB的實體記憶體可用。既然確定會有500MB記憶體,所以VM Avswp檔案就會少掉這500MB的大小,因為這個部份不會進入硬碟做Virtual Swap

 註:Reservation預設值是0,代表沒有設定保留。在如果完全沒有實體記憶體可分配的最壞情況下,則Guest OS自認為擁有的記憶體,其實全部來自VMkernel Swap。反過來說,為了避免用到vswp而影響效能,為VM設定保留值也是一個解決方案。但是實際上有沒有辦法設定這麼多的Reservation?這是必須要思考的問題。

 

Q:假設實體CPU或記憶體已經沒有剩餘,VM又設了Reservation,那如何能保證VM能得到這些資源?

 

答案是既然無法保證,就不讓你的VM開機。因為Hypervisor已經沒有足夠的實體資源,無法保證給你這麼多,VM此時就不能PowerOn。這時候也不能以vswp來取代,因為Reservation要求的是實體的記憶體資源。所以設定Reservation,是可能造成VM無法開機的原因之一。

 

Q:所以如果VM A是很重要的VM,配置2GBRAM,我應該也要設定2GB  Reservation,確保它實際有百分之百的記憶體可以使用嗎?

 

 錯。Reservation是專屬、保證的硬體資源,給出去後,即使VM A的記憶體閒置,Hypervisor也不會將VM A Reservation資源,收回(reclaim)給其它的VM來使用。也就是說這將會減少實體記憶體在分配上的彈性,Reservation設定的越多,VM開機後ESX / ESXi host實體記憶體被獨占的就越多,所以正確的設定Reservation方式應該是以VM的「最低運作需求」為原則來給予保留資源。

舉例來說,若VMA配置為2GB,但它的服務對於記憶體的基本要求是800MB的話,那Reservation就設定800MB就好。在最低的限度,VMA也會有800MB的實體記憶體可用,維持最基本,但足以提供服務的效能。等到有多餘的記憶體,再多分配給VM A使用。

 

Shares

如果說VM設定了LimitReservation,例如VM A Memory Limit設定1000Reservation設定500,代表VM A最少會有500MB可以用,最多不能超過1GB,那請問VM到底可以用到多少呢?600MB?還是800MB

答案是不一定,這個時候到底能額外得到多少資源,就由Shares來決定。

 

Shares是一個相對比重的數值,並非絕對,每一個VM創建出來的時候就會帶有Shares Number,可隨時更改數字來改變資源比重。我們以CPU Shares舉例。

l   CPU SharesLow500)、Normal1000)、High2000)以及Custom。所佔比重即為124

l   VMCPU Shares預設皆為NormalShares Value1000

 

現在假設有3VMABC)在ESX / ESXi運作:

1. 每個VM預設為Normal1000),表示總共的Shares Number3000

2. 當3VM開始競爭硬體資源時,每個VM會按造Shares比例分配資源,此例目前VMShares都是1000,所以每個VM都分配到三分之一(33%)的CPU運算資源。

3. 如果我們將VM CShares調整為High2000),那此時Share Number總和就變成4000,而VM C握有2000,所分到的CPU資源就有二分之一(50%),VM AVM B雖然Shares數字不變,但是就資源就被稀釋,每個VM得到四分之一(25%)。

4. 現在將VM C關機,Share Number總和就變成2000VM AVM B各握有1000,所以每個VM分到了50%的運算資源。

上述的例子是VM都同時在搶CPU資源時才會發生,很重要的一個觀念是,Shares Number平時並不起作用,在沒有競爭的狀態下,VM可獨享所有資源,只有當VM間彼此產生競爭的時候,才會依照Shares來分配硬體資源的比例。

再來看下圖的範例(假設不考慮額外開銷的問題),如果實體CPU的運作時脈是4GHz,有三個VM「同時」需要取用運算能力,這個時候就產生了競爭,按照Shares來分配資源比重。如果三個VM都設了Reservation,保留值為500MHz,那麼首先三個VM至少都有500MHz的運算效能,是獨享不會被瓜分的。至於想要用到額外的效能,這個部份就要靠Shares競爭來取得。

 總實體運算資源(4GHz)扣掉了已經給出去的Reservation500MHz X 3),剩下2500MHz提供,讓每個VM來做競爭。當三個VMSharesNormal1000)的時候,每一個VM都額外拿到了2.5GHz的三分之一資源(約833MHz,下圖左)。

snap187  

如果這個時候我們將VM AShares調整為High2000),VM BVM C改為Low500)的話,那麼這三個VM各取得多少CPU資源呢?答案是VM A拿到2500MHz的三分之二(1666MHz)資源,VM BVMC各拿六分之一(416MHz),再加上各自的Reservation,就可得知每個VM大約的運算效能了(上圖右)。

 

Q:如果沒有設置Reservation,在競爭時大家就完全依照Shares比重分配嗎?

 

是的,不過Memory會稍牽扯微複雜一點。例如ESX / ESXi host4GB的記憶體,VM ABC通通配置2GBRAM,但是若三個VM目前都只使用了1GB RAM,此時實體記憶體足夠供應,並沒有競爭的問題。

 一旦每個VM使用到了2GB的記憶體,就產生競爭狀態了,此時VM就依照Shares Number來分配實體記憶體的比重,若此時假設VM AShares比重佔三分之二,那它應該要拿到2.65GB的記憶體。但是實際上VM A只有配置2GB,所以不會使用超過2GB。那0.65GB不會分配給VM A,會回到Hypervisor手上再重新配發給其它VM使用。

 

 

 

arrow
arrow
    全站熱搜

    Johnny 發表在 痞客邦 留言(1) 人氣()