VMware 中 vCPU 如何分配能得到性能最优化?

服务器
在应用使用多颗vCPU的时候,如何分配每颗插槽的CPU数量和插槽数,可以使CPU的性能得到最优化?

 来自社区交流

VMware中,vCPU的分配原则?

在应用使用多颗vCPU的时候,如何分配每颗插槽的CPU数量和插槽数,可以使CPU的性能得到最优化?

[[315607]]

@Jerry Lee :

在物理主机上,每个物理CPU均对应若干内存,CPU可读写所有内存的数据,但对本身对应的内存做读写操作时性能最佳。

基于此,虚拟机在使用多个CPU时,可通过设置虚拟机CPU插槽,使虚拟机的CPU平均地由多个物理CPU提供,此时对单个物理CPU的压力较小,同时也能达到更佳的内存读写性能。

虚拟机CPU插槽数量即指定了虚拟机的多个CPU可平均分布到多少个物理CPU上。因此,虚拟机CPU插槽的数量必须能整除虚拟机的CPU个数。

对于一台虚拟机来说,一般推荐CPU插槽数:每插槽的内核数=1:2,高计算力的虚拟机可能达到1:4甚至更高。

假设一个简单的场景:

环境中每台主机拥有4颗8核的物理CPU,总物理核数为32个。

一个未设置CPU插槽的虚拟机,CPU数量为8个,则可能由主机上一个物理CPU的8个内核组成虚拟机的8个虚拟CPU;或可能由一个物理CPU提供5个内核,另一个物理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)时,虚拟化管理系统为vCPU分配的资源不超过一个物理CPU核。vCPU与物理核的分配关系可以是绑定的,也可能是动态的。

比如服务器有20个核心,你创建了2个VM,每个VM 4个vCPU,那么这两个VM最多能够使用服务器的8个核心。

2、当系统内的VM所需要的vCPU核大于物理CPU核数时,虚拟化管理系统首先按照时间片轮流调度一遍,然后如果还有剩余的CPU资源,则给所需要的vCPU。比如系统配置了40个vCPU,只有20个物理核。那么平均每个vCPU获取一个核心50%的资源。由于一些VM忙,一些VM空闲,虚拟化系统会在一个调度周期内,划分出若干时间片,轮流给每个vCPU使用。忙的vCPU可以使用完整个时间片,而闲的vCPU用不完整个时间片,会提前释放资源。这样在一个调度周期内,对每个vCPU都调度一遍后还有空闲的时间,调度器会把用这剩余的资源去调度忙的vCPU。这样兼顾公平和效率。这中调度算法具体下来,大致是如下效果:系统有1个CPU 2.0 Ghz,两个VM,分配1个vCPU。如果VM1 和 VM2都忙,那么各自相当于拥有一个1.0 Ghz的CPU。如果VM1很忙,VM1只需要 500Mhz的处理能力,那么在VM1看来,相当于暂时获得了 1.5Ghz的处理器。

3、通过对Xen的测试,系统所有虚拟机的vCPU的总数目小于和等于CPU核数时,VM的性能是比较稳定的。VM的vCPU基本上绑定到了一个CPU核。当vCPU数目大于物理核数时,VM的性能稳定性变差。

@chinesezzqiang :

好问题!!

CPU的数量并非越多越好,尤其在虚拟化环境内。虚拟CPU要配合内存共同指定比例。在cpu的扩展上,尽量是扩展插槽而不是扩展虚拟CPU。但是槽位多少,要看物理主机的配置。至于峰值,要看物理主机的资源而定。

建议采用

1:4的配比,1是槽位,4是core,初始化建议是1:2

@xukang:

根据你虚机的对CPU的使用率来划分,一般情况下建议一个物理线程对应2-3个vCPU,你主机上32个物理线程 一般在这台主机上虚拟机总的开机状态的vCPU建议是64-96个 如果虚机的对CPU要求不那么高可以提高比率。我记得vmware最高限制1:25 。单个虚机的vCPU数量不能超过本机物理线程数,有特殊性能要求可以手动指定vCPU对应的物理线程。

@匿名用户:

分配vcpu时,不仅仅要考虑cpu的调度,还有考虑非一致性内存访问即numa。每个物理cpu访问内存的速率是不一致。numa对应的内存大小在访问时速率会大于跨numa节点访问内存,cpu的分配要根据实际业务之间的亲和力和实际使用率进行调配。

 

责任编辑:武晓燕 来源: twt社区
相关推荐

2020-02-05 14:49:04

网络性能优化微调

2017-08-15 15:36:41

VMwareLinux虚拟机

2010-12-08 13:34:05

SUSE Linux

2020-10-16 09:00:12

前端开发技术

2023-10-18 10:38:53

API

2020-10-16 10:40:39

前端性能可视化

2024-03-12 09:47:10

Redis数据库

2010-07-21 09:33:09

VMware View

2011-03-01 17:26:48

WLAN优化

2009-06-10 22:00:57

JavaScript脚

2009-06-11 17:15:23

JavaScript性

2023-11-21 08:03:43

语言架构偏移量

2022-08-03 09:11:31

React性能优化

2022-09-26 09:19:38

服务器优化

2023-01-30 08:30:09

Tomcat性能优化

2020-09-22 07:52:32

Java对象数组

2018-12-18 09:00:26

Kubernetes工作负载测试

2014-12-29 10:19:01

Java

2021-05-31 08:30:50

监控网站性能

2010-06-04 10:48:15

Hadoop性能
点赞
收藏

51CTO技术栈公众号