在服务器虚拟化项目或者虚拟桌面项目中,经常会碰到这样的问题,虚机为高负载类型的业务,对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一核心,另外一个socket为4核心分配给虚机,而如果分配8个vCPU,那么虚机将会看到2个socket,每个4核心。其他的计算方法依次类推。所以,直接修改模板是安全省事的,但是这样是否会带来性能的开销,有待寻找其他资料佐证。
请问,XenServer6.2的环境,基于linux操作系统的VM,一部分VM用cat /proc/cpuinfo看到的CPU数和实际分配的vcpu数一致,而一部分VM用cat /proc/cpuinfo只能看到1个cpu信息,这是为什么呢?谢谢。
现在我们遇到的问题是,有1台SUSE 11操作系统的VM,虽然分配了16颗vcpu,但是cat /proc/cpuinfo只能看个1颗,并且利用率达到100%,其余vcpu在虚拟机里看不到。通过XenCenter看到vcpu的监视信息显示,有1颗利用率达100%,其余15颗利用率为0%。
一种可能的原因是刚开始安装的时候只给了1个vcpu,系统安装后是才改成多核。
谢谢,针对您说的这种情况,我先测试一下~还有其他可能的原因吗?
我的是双路28核心的服务器,可是我最多只能分配8个核心16线程给到虚机,设的再高也不生效,这是为什么呢?谢谢。
XS本身有些限制,目前单个 VM 的最大 vCPU 数量为16个。所以,也只能最多给到16线程到虚机。
感谢您的快速回复!那我也只好接受这个限制了。再次感谢
请问
1、cores-per-socket的最大参数是多少?
2、如果cores-per-socket设为4,win7最多能使用8个vCPU?如果是的,那给9个vCPU时也只能用8个vCPU吗?
1. cores-per-socket参数没有限制,其他参数应该也可以,但是推荐设置为2/4/6/8/12这种在现实环境也存在的参数。
2. 是的。因为如果设置为4,并且给了9个vCPU,那么,XS相当于给到win7三个(9/4=3)CPU,而win7最多支持2个物理CPU,这样的话,win7能使用4+1=5个,还是4+4=8个,这种行为也是不确定的。
请问XenDektop可以部署基于Linux系统的VDI吗?
目前为止还不支持基于Linux的VDI方案。
官方文档:
http://support.citrix.com/article/CTX126524
你的命令有误,应该是xe vm-param-set而不是xe vm-params-set
请问下像4核心超线程的 cpu
也就是任务管理器显示8 core
如何让windows 2003 64位的系统使用 8个 核心呢
1 socket 4 cores,开启超线程(hyper-threading)的时候,在系统里面就是显示8核心。
做法参考文章!已经讲的很清楚了
不错,鼓掌
( ^_^ )不错