VMWare虚拟机处理器数量与每个处理器内核数量概念,以及分配CPU资源详解

2021年1月1日 4点热度 0条评论 来源: 西方黑灵梦

VMWare虚拟机处理器数量与每个处理器内核数量概念,以及分配CPU资源详解

概念

处理器数量:虚拟机上的CPU个数(上图中的插槽数,是机器主板上CPU的个数,并非CPU的物理核心数
每个处理器的内核数量:每个虚拟的CPU有几个内核(可以看到虚拟机内部并不区分物理核心数和线程数)
处理器内核总数:处理器数量 * 每个处理器的内核数量(即物理机分配给虚拟机的CPU线程数,只要该参数一样,不管上面两个参数怎么调整整机性能都是一致的)
以上3个参数的上限由【当前要安装的目标操作系统所支持的CPU最大个数、物理机CPU线程总数、VMWare版本所支持的虚拟机最大核心数】三者中的短板决定

CPU的物理核心和超线程

问题:现有一台CPU为12核24线程的物理机(该CPU正常发挥水平),要使得目标虚拟机至多拥有其50%的CPU性能,该怎么分配?
错误回答:分配CPU资源时,使“处理器内核总数”等于12就行。
如果将问题中的CPU换为24核24线程,那这个回答就是正确的。(所以你的CPU如果没有超线程,那么文章到这里就结束了~笑)
超线程的性能并不等于两个CPU物理核心的性能,多出的线程能提供多少性能取决于CPU的架构。(多出的线程性能可用CPU性能测试工具测出)
操作系统在调用有超线程技术的CPU处理多核应用时,优先调用物理核心(物理线程),当所有的物理核心占满后再调用超线程技术提供的线程。
比如问题中的CPU有24个线程,其中物理线程为A1–A12,虚拟线程为B1–B12,A1与B1同属于一个核心,当A1占满后,操作系统会优先调用A2而不会调用B1。当A1–A12都占满后,才会调用B1–B12(实际调用情况可能不是如此,但是展现出来的算力可以依此表现),所以分配12个线程很可能会出现远超50%性能的情况。

上图就是12核24线程的5900X跑CPU-Z的分数,可以看到其多线程倍率(总线程得分/单核单线程得分)并不是24或者接近24的值,而是远低于24的14.xx。也就是说这颗处理器多出来的线程只增加了(14.73-12)/12=22.75%的性能(但这并不是准确的,请看下面)。

CPU的睿频机制


目前4C8T起步的主流CPU都有睿频机制,在CPU只占用少数核心的情况下把一个或是几个核心进行频率加速。

上图出现的CPU频率差异会导致全核状态下的CPU多线程倍率比实际偏低,所以要想得出准确的倍率需要先将CPU频率锁定。
两种锁定CPU频率办法:
1、通过Windows控制面板中的电源选项使更改“最小/最大处理状态”,使其小于100%
2、通过主板BIOS进行锁频
第二种方法由于不同品牌主板BIOS调节步骤不一致,所以这里介绍第一种方法


设置完后,运行CPU-Z,先勾选与自己CPU核心数一样的线程数进行测试,验证线程倍率是否≈核心数量,如果低于,那需要将“最小/最大处理状态”再次降低。

如上图,11.68≈12,所以接下来勾选全部线程进行跑分

最后得到多线程倍率为15.69,若要使虚拟机获得50%性能,则需要分配15.69*0.5≈8个线程。

验证:上图右边为分配了8个线程的虚拟机,4993.7/9664.1≈51.7%
测试完成后别忘了把电源计划还原,否则会限制CPU正常发挥性能。

总结

对于没有超线程的CPU:分配给虚拟机的线程数=目标性能比率 * 物理机线程总数
对于有超线程的CPU,若目标性能比率 <= 物理核心数 / 多线程倍率,则分配给虚拟机的线程数 = 目标性能比率 * 物理机多线程倍率若目标性能比率 > 物理核心数 / 多线程倍率,则分配给虚拟机的线程数 = 物理核心数 + (目标性能比率 - 物理核心数 / 多线程倍率) / (1 - 物理核心数 / 多线程倍率) * 虚拟线程数

PS:这里的目标性能比率为【虚拟机至多拥有的CPU性能/物理CPU机性能】;虚拟线程数=CPU总线程数 - 物理核心数;有睿频技术的处理器需要锁频来获得准确的多线程倍率

    原文作者:西方黑灵梦
    原文地址: https://blog.csdn.net/BlackReimu/article/details/112061501
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。