【虛擬化實戰】VM設計之一vCPU

作者:範軍 (Frank Fan) 新浪微博:@frankfan7

虛擬機需要多少個vCPU呢?是不是個數越多性能越好呢?這方面存在着很多誤區。VM配置CPU資源的時候,要精打細算才能最大可能的利用已有資源,來滿足商業應用的需要。有的情況下爲某個VM設置過多vCPU數目,反而會造成該應能的性能下降。也造成整個系統的資源浪費。

本文從概念到實戰來闡述如何做好虛擬機上CPU資源規劃。

概念:

首先我們明確一些概念。

Socket

A CPU socket or a CPUpackage refers to a physical unit of CPU which is plugged into a system board.For example, a 4-way system or a 4-socket system can contain up to four CPUpackages

Core

A CPU socket or a CPUpackage refers to a physical unit of CPU which is plugged into a system board.For example, a 4-way system or a 4-socket system can contain up to four CPUpackages

Logical processor:

Hyperthreadingtechnology allows a single physical processor core to behave like two logical processors.The processor can run two independent applications at the same time. Aprocessor core may have multiple logical processors that share computeresources of the core

pCPU

A pCPU denotes aphysical CPU, referring to a logical processor on a system with Hyper-Threading(HT) enabled; otherwise, it refers to a processor core.


Virtual Socket和VirtualCore

在配置VM時設置。運行在VM上的操作系統讀取該設置。

vCPU

The virtual machine vCPUconfiguration is the sum of number of cores x number of sockets.

比如以一個VM有2個Virtual Socket爲例,每個virtual socket都有2個Virtual Core。那麼這個VM一共可用的vCPU個數 = number of cores x number of sockets = 2 *2 =4

VM可以設置的vCPU個數,不能超過ESXi主機上Logical CPU的實際個數

下圖揭示了上面一些術語之間的關係。該圖摘自frank denneman博客

112827362.png

上圖分三層,他們分別是是VM層,VMKernel層和物理層。對於物理服務器而言,所有的CPU資源都分配給單獨的操作系統和上面運行的應用。應用將請求先發送給操作系統,然後操作系統調度物理的CPU資源。

在虛擬化平臺中,在VM層和物理層之間加入了VMkernel層,從而允許所有的VM共享物理層的資源。VM上的應用將請求發送給VM上的操作系統,然後操縱系統調度Virtual CPU資源(操作系統認爲Virtual CPU和物理 CPU是一樣的),然後VMkernel層對多個物理CPU Core進行資源調度,從而滿足Virtual CPU的需要。在虛擬化平臺中OS CPU Scheduler和Hyperviisor CPU Scheduler都在各自的領域內進行資源調度。


關於NUMA我們會另文闡述.

二實例:

我們來假設一個主機有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 Sizing 步驟:

以下內容參考了david Davis的文章。假如我們要創建一個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在觀測性能是否可以接受。


參考:

http://frankdenneman.nl/2013/09/18/vcpu-configuration-performance-impact-between-virtual-sockets-and-virtual-cores/

http://datacenterpost.com/2012/03/vcpu-sizing-considerations.html

http://www.vmware.com/files/pdf/techpaper/VMware-vSphere-CPU-Sched-Perf.pdf

http://vpivot.com/2010/04/30/how-many-virtual-cpus-per-vm/

發佈了78 篇原創文章 · 獲贊 29 · 訪問量 22萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章