CPU親和力

CPU親和力,在虛擬機上設定CPU親和力可能會導致性能降低,並且更難於管理。 在vSphere資源控制方面有幾個被誤解的地方,CPU親和力就是其中之一。控制交付給一台虛擬機的CPU資源是性能管理的一個重要部分。在虛擬機上很少見到CPU親和力的配置,一旦配置就很難移除。一旦虛擬機設定了CPU親和力就無法獲得更多的CPU資源。

基本介紹

  • 中文名:CPU親和力
無保障,其他問題,用途,

無保障

在ESXi伺服器中核心較少,由VMkernel負責處理和調度更多的虛擬CPU(vCPU)給虛擬機。這樣的分配行為使得CPU親和力可以過量使用。過量使用是虛擬化技術節省成本的核心部分。VMkernel會每個幾毫秒去查看一下每個核心上的vCPU狀態,選擇是否改變運行著的vCPU。虛擬機中的工作負載有它們自己的工作負載高峰和低谷。而VMkernel必須將vCPU從這個核上移動到另一個核上,可能將任意vCPU運行在任意的核上。VMkernel將嘗試使用每個核心交付虛擬機所需的所有CPU親和力。
對CPU親和力的主要誤解是它將一個核心提供給一個特定的虛擬機。這也是管理員通常錯誤地將CPU親和力套用到一個非常依賴CPU親和力性能的關鍵虛擬機上的原因。這樣反而會造成虛擬機性能下降。因為CPU親和力並不能保證核心,從而導致虛擬機不能使用其他的核心。目前vSphere無法保證將特定的核心提供給單個虛擬機。對於有關鍵CPU親和力資源需求的虛擬機,你應該設定足夠的CPU親和力預留來保證虛擬機的SLA。在虛擬機上設定CPU親和力永遠不會提高該虛擬機的CPU性能,事實上,結果完全相反。
CPU親和力的目的是刪除一些VMkernel上的調度靈活性。CPU親和力會限制可能用於虛擬機vCPU的核心。不管什麼時間我們限制了VMkernel的靈活性,都會導致效率降低與性能風險。一個12核的ESXi伺服器意味著有12個地方讓VMlernel運行vCPU。如果一個虛擬機為核心2和3設定CPU親和力,那么其他10個核心都不能用於該虛擬機。即使這10個核是空閒的,VMkernel也不能將它們用於這個虛擬機。更糟糕的是如果兩個繁忙的虛擬機CPU親和力設定了相同的核心。那么這兩個虛擬機將被迫爭奪這一個核,即使其他CPU親和力核心都處於空閒狀態。下圖為在虛擬機屬性里設定CPU親和力核心2和3。

其他問題

CPU親和力的另一個問題是禁用vMotion。CPU親和力是在ESXi伺服器中指定特定的核心用於虛擬機。因為這些物理核心不能在CPU親和力主機之間移動,也不能移動必須運行在這些核心上的虛擬機。這在分散式資源調度(DRS)群集中具有很大的影響。這是在ESXi伺服器之間的vCenter vMotions虛擬機交付峰值性能的體現。
不用使用vMotion的虛擬機導致集群不平衡,從而導致性能問題。在ESXi維護期間將會遷移大量的CPU親和力虛擬機,不能移動的CPU親和力虛擬機將會導致操作問題。甚至更糟的是,如果你將DRS群集設定成全自動的模式,那么CPU親和力界面就會沒有了。如果有任何CPU親和力設定已經套用,你都不能移除這個設定。下圖是已經設定了CPU親和力,在全自動的DRS群集裡就不能移除該設定。
雖然設定了CPU親和力不能vMotion,但能支持HA故障轉移。一個設定了CPU親和力的虛擬機會在HA集群里的其他主機上啟動,並在新的主機上保留CPU親和力設定。

用途

CPU親和力的好處是什麼?我用它來模擬兩個虛擬機爭奪CPU。如果你設定兩個虛擬機來使用相同的核心,它們可以使核心運行飽和而ESXi不飽和。這不是一個現實的用途,但CPU親和力是一個很好的實驗室技術。
在現實中,我只聽說過關於CPU親和力的一個用途,那就是為了在虛擬機中支持老的需要授權的應用程式。在虛擬化中支持該應用程式的唯一方式就是使用CPU親和力綁定一個核心。

相關詞條

熱門詞條

聯絡我們