在服務器虛擬化項目或者虛擬桌面項目中,常常會碰到這樣的問題,虛機爲高負載類型的業務,對CPU的要求很高的時候,咱們但願爲這些虛擬桌面分配更多的CPU資源,可是咱們也發現,部分系統對CPU數量的支持有數量的限制,超過之後,即便分配,也無法利用到。也有一些軟件會依據CPU的數量(socket的數量)來收費,因此也須要對CPU進行一些調整來減小費用。shell
首先說一下,在CPU中有幾個概念:Socket、Core、Hyper-Threading(HT)。首先得搞清楚這些。windows
- 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):socket
windows 7和XP最多支持2路CPU,企業版以上支持2路CPU,企業版如下(Home版)只支持1路CPUide
針對多核心(multi-core):性能
windows 7 32位系統支持最多32核,64位windows 7支持多達256核的CPU。ui
而XenServer分配給虛機的vCPU都是以Socket的形式呈獻給上層虛機的,這就致使,經過XenCenter最多隻能給虛機分配2個vCPU,即便多分配,系統也沒法識別到,由於windows 7和XP最多隻支持2個socket。spa
而windows 7和XP又能支持多core,因此咱們若是可以以每一個socket有多核,而後分配給虛機,這樣就能夠達到分配更多的CPU自願給這些虛機系統。例如,若是咱們每一個socket有4核心,那麼咱們就能夠分配2路4核弓8個vCPU給虛機。
要進行這樣的調整,咱們須要手動調整一下XenServer中虛機的CPU的平臺模式設置。
#查找對應模板或者虛機的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>
BTW:若是cores-per-socket設置爲4,那麼若是分配一個vCPU給虛機,那麼就是一個socket,若是分配3個vCPU給虛機,因爲不超過4,仍是以一個socket3個核心的方式出如今虛機中,若是是5個,那麼將是一個socket一核心,另一個socket爲4核心分配給虛機,而若是分配8個vCPU,那麼虛機將會看到2個socket,每一個4核心。其餘的計算方法依次類推。因此,直接修改模板是安全省事的,可是這樣是否會帶來性能的開銷,有待尋找其餘資料佐證。