kvm有個叫做超分的概念,根據這個特性可以分配出超出物理機配置的數台虛擬機。
以下是自己總結的一些划分技巧:
一、最保守方法(性能最好)
根據物理機的資源,按虛擬機的數量疊加但不超過物理機的總和。不超過物理機也就是不存在資源競爭問題,性能達到最優。
二、超分概念(性能相對較差,存在資源競爭)
RedHat Linux KVM:
-
KVM 由 libvirt API 和基於該 API的一組工具進行管理和控制。
-
KVM 支持系統資源超分,包括內存和CPU的超分。RedHat Linux 最多支持物理 CPU 內核總數的10倍數目的虛擬CPU,但是不支持在一個虛機上分配超過物理CPU內核總數的虛擬CPU。
-
客戶機 vCPU 數目的分配方法
-
不是客戶機的 vCPU 越多,其性能就越好,因為線程切換會耗費大量的時間;應該根據負載需要分配最少的 vCPU。
-
主機上的客戶機的 vCPU 總數不應該超過物理 CPU 內核總數。不超過的話,就不存在 CPU 競爭,每個 vCPU 線程在一個物理 CPU 核上被執行;超過的話,會出現部分線程等待 CPU 以及一個 CPU 核上的線程之間的切換,這會有 overhead。
-
將負載分為計算負載和 I/O 負載,對計算負載,需要分配較多的 vCPU,甚至考慮 CPU 親和性,將指定的物理 CPU 核分給給這些客戶機。
我們來假設一個主機有 2 個socket,每個 socket 有 4 個core。主頻2.4G MHZ 那么一共可用的資源是 2*4*2.4G= 19.2G MHZ。假設主機上運行了三個VM,VM1和VM2設置為1socket*1core,VM3設置為1socket*2core。那么VM1和VM2分別有1個vCPU,而VM3有2個vCPU。假設其他設置為缺省設置。
那么三個VM獲得該主機CPU資源分配如下:VM1:25%; VM2:25%; VM3:50%
假設運行在VM3上的應用支持多線程,那么該應用可以充分利用到所非配的CPU資源。2vCPU的設置是合適的。假設運行在VM3上的應用不支持多線程,該應用根本無法同時使用利用2個vCPU. 與此同時,VMkernal層的CPU Scheduler必須等待物理層中兩個空閑的pCPU,才開始資源調配來滿足2個vCPU的需要。在僅有2vCPU的情況下,對該VM的性能不會有太大負面影響。但如果分配4vCPU或者更多,這種資源調度上的負擔有可能會對該VM上運行的應用有很大負面影響。
確定 vCPU 數目的步驟。假如我們要創建一個VM,以下幾步可以幫助確定合適的vCPU數目
1 了解應用並設置初始值
該應用是否是關鍵應用,是否有Service Level Agreement。一定要對運行在虛擬機上的應用是否支持多線程深入了解。咨詢應用的提供商是否支持多線程和SMP(Symmetricmulti-processing)。參考該應用在物理服務器上運行時所需要的CPU個數。如果沒有參照信息,可設置1vCPU作為初始值,然后密切觀測資源使用情況。
2 觀測資源使用情況
確定一個時間段,觀測該虛擬機的資源使用情況。時間段取決於應用的特點和要求,可以是數天,甚至數周。不僅觀測該VM的CPU使用率,而且觀測在操作系統內該應用對CPU的占用率。特別要區分CPU使用率平均值和CPU使用率峰值。
假如分配有4個vCPU,如果在該VM上的應用的CPU
-
使用峰值等於25%, 也就是僅僅能最多使用25%的全部CPU資源,說明該應用是單線程的,僅能夠使用一個vCPU (4 * 25% = 1 )
-
平均值小於38%,而峰值小於45%,考慮減少 vCPU 數目
-
平均值大於75%,而峰值大於90%,考慮增加 vCPU 數目
3 更改vCPU數目並觀測結果
每次的改動盡量少,如果可能需要4vCPU,先設置2vCPU在觀測性能是否可以接受。
-
-
支持 KSM (Kenerl Same-page Merging 內核同頁合並)
-
KSM (Kernel SamePage Merging 或者 Kernel Shared Memory)
KSM 在 Linux 2.6.32 版本中被加入到內核中。
原理
其原理是,KSM 作為內核中的守護進程(稱為 ksmd)存在,它定期執行頁面掃描,識別副本頁面並合並副本,釋放這些頁面以供它用。因此,在多個進程中,Linux將內核相似的內存頁合並成一個內存頁。這個特性,被KVM用來減少多個相似的虛擬機的內存占用,提高內存的使用效率。由於內存是共享的,所以多個虛擬機使用的內存減少了。這個特性,對於虛擬機使用相同鏡像和操作系統時,效果更加明顯。但是,事情總是有代價的,使用這個特性,都要增加內核開銷,用時間換空間。所以為了提高效率,可以將這個特性關閉。
好處
其好處是,在運行類似的客戶機操作系統時,通過 KSM,可以節約大量的內存,從而可以實現更多的內存超分,運行更多的虛機。
參考:
http://blog.51cto.com/xiaoqinglang/1880269
http://blog.51cto.com/xiaoqinglang/1880271
http://blog.51cto.com/xiaoqinglang/1880274