|
发表于 2013-8-22 10:24:54
|
显示全部楼层
结合你使用的环境来看,应该从Xen这个角度去解决。
以下内容摘自Citrix官网以级xenme博客,经测可行,希望帮您解决问题。
How to Set Cores-Per-Socket Parameter for a Virtual Machine
Complete the following procedure to set the cores-per-socket parameter for Windows virtual machine:
- Get the Universally Unique Identifier (UUID) of the Virtual Machine for which the parameter needs to be set:
xe vm-list name-label=<Name of the VM>
- Set the cores-per-socket parameter:
xe vm-param-set platform:cores-per-socket=’X’ uuid=<VM UUID from Step1>
Here, X equals 2 for dual core and 4 for quad core.
For example: To have a CPU with four cores:
xe vm-param-set platform:cores-per-socket=4 uuid=<VM UUID>
- Set the virtual CPUs startup parameter equal to the number of virtual CPUs (number of cores) to be assigned to the virtual machine and set the VCPUs-max parameter to the total number of cores.
xe vm-param-set VCPUs-at-startup=<Number of VCPUs> uuid=<VM-UUID>
xe vm-param-set VCPUs-max=<Maximum number of cores>.
For a dual quad core CPUs, VCPUs-max=8
The number of virtual CPUs at startup is the number of cores to assign to the virtual machine.
If your XenServer has dual quad core CPUs and you have set the cores-per-socket=4 and VCPUs-at-startup=8, then you will see 8 CPUs in the Performance tab of Task Manager and 2 processors in the Computer Properties of the virtual machine. Here the virtual machine is using all 8 cores of the 2 Processors.
Similarly, if VCPUs-at-startup=4, then you will see 4 CPUs in the Performance tab of Task Manager but only 1 processor in the Computer Properties. Here the virtual machine is using only 4 cores and only one processor out of 2 processors. However, if the number of VCPUs-at-startup is greater than 4, then it will make use of the second processor and show 2 processors in the computer’s properties.
From the preceding discussion, you can conclude that the number of processors the virtual machine makes use of depends on the number of cores assigned to the virtual machine.
XenServer中Windows 7与XP多vCPU支持配置
在服务器虚拟化项目或者虚拟桌面项目中,经常会碰到这样的问题,虚机为高负载类型的业务,对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
| #查找对应模板或者虚机的UUID
xe vm-list
#or
xe template-list
#设置模板或者虚机的Platform参数,设置cores-per-socket
xe vm-param-set Platform:cores-per-socket=<some count> uuid=<target vm uuid>
#or
xe template-param-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核心。其他的计算方法依次类推。所以,直接修改模板是安全省事的,但是这样是否会带来性能的开销,有待寻找其他资料佐证。
参考资料:http://support.citrix.com/article/CTX126524
http://www.xenme.com/1223
|
|