在服務器虛擬化項目或者虛擬桌面項目中,經常會碰到這樣的問題,虛機爲高負載類型的業務,對CPU的要求很高的時候,我們希望爲這些虛擬桌面分配更多的CPU資源,但是我們也發現,部分系統對CPU數量的支持有數量的限制,超過以後,即使分配,也沒法利用到。也有一些軟件會依據CPU的數量(socket的數量)來收費,所以也需要對CPU進行一些調整來減少費用。
首先說一下,在CPU中有幾個概念:Socket、Core、Hyper-Threading(HT)。首先得搞清楚這些。
- Socket:wikipedia的解釋是連接到主板的一個CPU,通俗講就是一個物理CPU
- Core:wikipedia的解釋同一個CPU芯片上集成的多個核心,也就是所謂的多核的核
- Hyer-Threading:wikipedia的解釋模擬的多線程,通俗講在一個核心上模擬出兩個CPU執行線程,能夠提高多任務的性能
搞明白了這些以後,我們就來說說系統本身對CPU這幾方面的支持限制。
操作系統對CPU的支持分Socket和Core兩方面,而Hyper-Threading對操作系統來說基本是不可見的(其實可以通過CPU參數以及其他機制系統會知道開啓了超線程)所以,HT可以簡單理解爲也是core。
windows 2003等服務器操作系統對物理CPU(socket)以及多核CPU(multi-Core)的支持受產品版本(標準、企業、數據中心版本等)的限制,具體就不詳細列舉了。本文主要針對windows 7和XP。(面向虛擬桌面用戶)
針對多物理CPU(multi-socket):
windows 7和XP最多支持2路CPU,企業版以上支持2路CPU,企業版以下(Home版)只支持1路CPU
針對多核心(multi-core):
windows 7 32位系統支持最多32核,64位windows 7支持多達256核的CPU。
而XenServer分配給虛機的vCPU都是以Socket的形式呈獻給上層虛機的,這就導致,通過XenCenter最多隻能給虛機分配2個vCPU,即使多分配,系統也無法識別到,因爲windows 7和XP最多隻支持2個socket。
而windows 7和XP又能支持多core,所以我們如果能夠以每個socket有多核,然後分配給虛機,這樣就可以達到分配更多的CPU自願給這些虛機系統。例如,如果我們每個socket有4核心,那麼我們就可以分配2路4核弓8個vCPU給虛機。
要進行這樣的調整,我們需要手動調整一下XenServer中虛機的CPU的平臺模式設置。
1
2
3
4
5
6
7
8
9
|
#查找對應模板或者虛機的UUID xe vm-list #or xe template-list #設置模板或者虛機的Platform參數,設置cores-per-socket xe vm-params- set Platform:cores-per-socket=<some count> uuid=<target vm uuid> #or xe template-params- set Platform:cores-per-socket=<some count> uuid=<target template uuid> |
這樣,我們就可以以每socket多個核心的方式分配 CPU了。推薦修改虛機模板,這樣減少很多工作。
BTW:如果cores-per-socket設置爲4,那麼如果分配一個vCPU給虛機,那麼就是一個socket,如果分配3個vCPU給虛機,由於不超過4,還是以一個socket3個核心的方式出現在虛機中,如果是5個,那麼將是一個socket 爲1核心,另外一個socket爲4核心分配給虛機,而如果分配8個vCPU,那麼虛機將會看到2個socket,每個4核心。其他的計算方法依次類推。所以,直接修改模板是安全省事的,但是這樣是否會帶來性能的開銷,有待尋找其他資料佐證。