来自VMware社区交流,vCPU分配原则?当应用程序使用多个vCPU时,如何分配每个插槽的CPU数量和插槽数以优化CPU的性能?@JerryLee:在物理主机上,每个物理CPU对应若干个内存,CPU可以读写所有内存中的数据,但是读写自己对应的内存时性能最好。基于此,当一个虚拟机使用多个CPU时,通过设置虚拟机CPU槽位,可以使虚拟机的CPU平均由多个物理CPU提供。这时候单个物理CPU的压力就小了,也能达到更好的内存读写性能。虚拟机CPU槽数指定了虚拟机的多个CPU可以平均分配到多少个物理CPU上。因此,虚拟机的CPU插槽数必须能被虚拟机的CPU数整除。对于虚拟机,一般建议CPU插槽数:每插槽核心数=1:2,计算能力高的虚拟机可能达到1:4甚至更高。假设一个简单的场景:环境中每台主机有4个8核物理CPU,物理核总数为32。一个没有设置CPU插槽的虚拟机,CPU数量为8,该虚拟机的8个虚拟CPU虚拟机可能由主机上一个物理CPU的8个核心组成;或者5个核心可能由一个物理CPU提供,另一个物理CPU提供3个核心,8个虚拟机CPU共同组成虚拟机,以此类推。另一台虚拟机将CPU槽数设置为4,此时虚拟机的8个CPU平均由主机上的4个物理CPU提供,每个物理CPU提供2个核心,达到最佳计算性能。@doc:顾名思义,vCPU是一个虚拟CPU。创建虚拟机时,需要配置vCPU资源。因此,vCPU是虚拟机的一个组件。因此,脱离VM谈论vCPU是没有意义的。虚拟化管理系统如何调度vCPU取决于系统中的虚拟机数量和虚拟机上配置的vCPU。一般情况如下:1.当系统中VM需要的vCPU总数小于物理CPU核数(包括超线程Core)时,虚拟化管理系统分配不超过1个物理CPU核给虚拟处理器。vCPU和物理核心之间的分配关系可以是绑定的或动态的。例如,如果服务器有20个核心,您创建2个虚拟机,每个虚拟机有4个vCPU,那么这两个虚拟机最多可以使用服务器的8个核心。2.当系统中VM需要的vCPU核数大于物理CPU核数时,虚拟化管理系统先按照时间片依次调度,如果有剩余则分配需要的vCPUCPU资源。例如,系统配置了40个vCPU,只有20个物理内核。然后平均每个vCPU获得一个核心的50%的资源。由于有的VM很忙,有的VM很空闲,因此虚拟化系统会在一个调度周期内划分出多个时间片,依次为每个vCPU使用。繁忙的vCPU可以使用整个时间片,而空闲的vCPU则不能使用整个时间片,会提前释放资源。这样,在一个调度周期内,每个vCPU调度完后,还有空闲时间,调度器会用剩余的资源去调度繁忙的vCPU。这平衡了公平和效率。这里的具体调度算法大致如下:系统有1个CPU2.0Ghz,2个VM,分配1个vCPU。如果VM1和VM2都忙,那么每个都相当于拥有一个1.0Ghz的CPU。如果VM1很忙,而VM1只需要500Mhz的处理能力,那么从VM1的角度来说,相当于临时获得了一个1.5Ghz的处理器。3、通过Xen的测试,当系统中所有虚拟机的vCPU总数小于或等于CPU核数时,VM的性能比较稳定。VM的vCPU基本上绑定到CPU内核。当vCPU数量大于物理核心数量时,虚拟机性能稳定性变差。@chinesezzqiang:好问题!!CPU的数量并不总是更好,尤其是在虚拟化环境中。必须指定虚拟CPU与内存的比率。在cpu扩展方面,尽量扩展slot而不是虚拟CPU。但是,插槽的数量取决于物理主机的配置。至于峰值,取决于物理主机的资源。建议使用1:4的比例,1是slot,4是core,初始化建议是1:23个vCPU,你主机上32个物理线程。通常,该主机上虚拟机启动状态的vCPU总数建议为64-96个。如果虚拟机的CPU要求不是那么高,可以增加该比例。我记得vmware的最高限制是1:25。单个虚拟机的vCPU数不能超过机器上的物理线程数。如果有特殊的性能需求,可以手动指定vCPU对应的物理线程。@匿名用户:在分配vcpu时,不仅要考虑cpu的调度,还要考虑内存访问的非均匀性,即numa。每个物理CPU访问内存的速率不一致。numa对应的内存大小会比跨numa节点访问内存的访问速度更快,cpu的分配要根据实际业务的亲和度和实际使用率来分配。
