XenServer中Windows 7与XP多vCPU支持配置

在服务器虚拟化项目或者虚拟桌面项目中,常常会碰到这样的问题,虚机为高负载类型的业务,对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>
 
 
这样,咱们就能够以每socket多个核心的方式分配 CPU了。推荐修改虚机模板,这样减小不少工做。

BTW:若是cores-per-socket设置为4,那么若是分配一个vCPU给虚机,那么就是一个socket,若是分配3个vCPU给虚机,因为不超过4,仍是以一个socket3个核心的方式出如今虚机中,若是是5个,那么将是一个socket一核心,另一个socket为4核心分配给虚机,而若是分配8个vCPU,那么虚机将会看到2个socket,每一个4核心。其余的计算方法依次类推。因此,直接修改模板是安全省事的,可是这样是否会带来性能的开销,有待寻找其余资料佐证。