虚拟化技术:什么是vCPU?与物理CPU有啥关系?

张彦琦 2024-05-19 14:23:00

在数字化浪潮席卷的今天,虚拟化技术已成为数据中心、云计算以及IT领域不可或缺的一环。它以其出色的灵活性和资源利用率,为现代计算体系注入了新的活力。而在虚拟化技术中,vCPU(虚拟中央处理单元)则扮演着重要的角色。本篇文章将深入剖析vCPU与物理CPU的关系,帮助大家更好地了解虚拟化这一技术的核心。

 

 

 

一、什么是vCPU

 

vCPU,全称为虚拟中央处理器(Virtual Central Processing Unit),是虚拟化环境中分配给虚拟机实例的重要计算资源。它是物理CPU的虚拟化产物,能够在逻辑上被虚拟机独立使用。每个vCPU都具备执行指令和处理数据的能力,使得虚拟机能够在没有物理CPU核心的情况下运行多线程应用程序。

 

vCPU的出现,极大地提高了物理CPU的利用率。通过将物理CPU分割成多个vCPU,我们可以在同一时间运行多个任务,从而实现资源的最大化利用。此外,vCPU还赋予了虚拟化环境更大的灵活性。我们可以根据虚拟机的实际需求,动态调整vCPU的数量,无需更换物理硬件即可满足不同的计算需求。

 

然而,正如任何技术都有其两面性一样,vCPU也不例外。虚拟化技术会带来一定的性能开销,尽管这一开销在大多数情况下并不显著,但在某些对性能要求极高的场景中,它可能成为影响系统性能的关键因素。此外,过度分配vCPU也可能导致CPU资源的浪费,从而降低整体的资源利用率。

 

二、vCPU VS CPU

 

vCPU和CPU是两个在计算机体系结构中具有不同概念的术语:物理CPU,被称为处理器或中央处理器,它是计算机系统的核心组件,负责执行指令、进行运算和控制计算机的各个部分。而vCPU则是在虚拟化环境中对物理CPU的模拟和分配。它们之间的关系,可以说是共生共荣的伙伴关系。

 

一台物理计算机可以有多个CPU,每个CPU可以包含多个核心,每个核心可以处理独立的任务。同时,每个核心可以支持多个线程,通过超线程或多核心技术,实现并行处理。在虚拟化环境中,一台物理计算机可以同时运行多个独立的虚拟机,每个虚拟机都可以拥有一个或多个vCPU。这些vCPU在逻辑上是相互独立的,它们通过虚拟化层的调度和资源管理,实现了与物理CPU之间的资源隔离。这种隔离性使得不同虚拟机之间的计算任务可以互不干扰地运行,提高了系统的稳定性和安全性。

 

同时,vCPU与物理CPU之间的协作也至关重要。虚拟化层负责将虚拟机的指令转换为物理处理器可以执行的指令,从而实现了vCPU与物理CPU之间的无缝对接。当虚拟机需要执行计算任务时,它会将任务发送给vCPU,vCPU再将任务转化为物理CPU可以执行的指令。物理CPU则负责执行这些指令,完成计算任务。

 

三、vCPU的计算

 

在计算vCPU前需要了解一些术语:

 

Socket:插槽是一个阵列的引脚,用于固定处理器并将主板连接到可用的处理能力,插槽的数量由主板的容量决定。

 

Thread:线程是进程内的执行路径。一个进程可以包含一个或多个线程,线程与进程的主要区别在于,同一进程内的线程在共享内存空间中运行,而进程在独立的内存空间中运行。

 

Physical Core:物理核心,也被称为处理单元,位于CPU内。一个物理核心可能对应一个或多个逻辑核心。

 

Logical Core:逻辑核心使得单个物理核心能够同时执行两个或更多的操作。

 

图片

 

 

1、系统可用的VCPU总数计算

 

在计算vCPU的数量时,通常需要考虑以下几个因素:

 

物理 CPU 的数量:这是服务器上实际插槽中的CPU个数;

 

每颗物理 CPU 的核心数:这是一块CPU上面能处理数据的芯片组的数量;

 

每个核心的超线程数:如果物理CPU支持超线程技术,那么每个CPU核心可以支持两个vCPU。

 

vCPU数量是通过芯片组为每个核心提供的处理线程数乘以占用的插槽数来计算的,即:

 

vCPU 数量=(线程 x 核心)x 物理 CPU

 

图片

图片来源于网络

 

假设有一款物理CPU,该CPU具有8个核心和16个线程:(16线程x8核心x1物理CPU=128 vCPU),这意味着在这个物理CPU上,可以分配128个vCPU,这是通过将每个核心的线程数相乘,然后乘以物理CPU的数量得出的。

 

具体的 vCPU 分配取决于工作负载和应用程序的需求。例如,在一个大型数据库服务器上,我们可以选择将更多的 vCPU 分配给每个虚拟机,以确保足够的计算资源。而在轻负载的情况下,可以分配较少的 vCPU。假设总共有128个vCPU,然后根据每个虚拟机所需的vCPU数量来计算虚拟机的数量:如果每个虚拟机需要4个vCPU,则虚拟机数量=128vCPU/4vCPU=32:如果每个虚拟机需要2个vCPU,则虚拟机数量=128vCPU/2vCPU=64:这个计算过程根据实际需求进行调整。

 

 

2、虚拟机VCPU的分配与调度

 

我们可以从下图中看到虚拟机系统的结构与功能划分,客户操作系统与虚拟机监视器共同构建了一个精巧的两级调度框架,这一框架在多核环境下尤为显著。客户操作系统负责第二级调度,主要是线程或进程在vCPU上的调度。虚拟机监视器负责第一级调度, 即vCPU在物理处理单元上的调度。

 

图片

图片来源于网络

 

值得注意的是,这两级调度的调度策略和机制是相互独立的,它们之间不存在依赖关系,这使得虚拟机系统能够根据不同的需求和应用场景进行优化。

 

此外,vCPU的调度方式也十分灵活。它可以在一个或多个物理处理单元上执行,实现分时复用或空间复用物理处理单元的效果。同时,它也可以与物理处理单元建立一对一固定的映射关系,限制访问指定的物理处理单元。这种灵活的调度方式使得虚拟机系统能够更好地适应各种复杂的计算场景。

 

当需要为云服务器的计算能力设置上限、下限以及云服务器占用资源的优先级时,可以选择启用  CPU QoS,即对CPU做QoS(Quality of Service):

 

CPU预留:分配给该VM的最少CPU资源,即云服务器获得的最低计算能力。配置值为vCPU在竞争物理CPU资源时,至少占有物理CPU主频的大小,单位为MHz。例如,该规格对应的vCPU个数为2,若预留值配置为2000,则云服务器获得的计算能力不低于4000MHz。

 

CPU上限:分配虚拟机占用CPU资源的上限,即云服务器获得的最大计算能力。配置值为单个vCPU在竞争资源时最多占有单个物理CPU的比例。例如,配置为0.5时,表示该云服务器单个vCPU最多可占用单个物理CPU 50%的资源。

 

CPU份额:多个虚拟机在竞争CPU资源时,根据比例分配资源,按优先级有低、中、高三种。CPU份额只在各虚拟机竞争计算资源时发挥作用,如果没有竞争,有需求的虚拟机可以独占主机的物理CPU资源。例如,云服务器A的优先级为“中”,云服务器B的优先级为“低”,则在资源竞争时,云服务器A竞争获得的CPU资源约为云服务器B的两倍。

 

以一台24线程(24GHz)的单核物理机为例,按照vCPU数量计算公式,可分配的vCPU数量为1*1*24=24vCPU,如果我们负载三台虚拟机,在没有资源竞争的情况下,每台虚拟机使用的资源都是8Ghz(平均分配);如果资源发生抢占,每台虚拟机都分配了24个VCPU(可以分配给单台VM所在的物理CPU虚拟出来的最大VCPU个数,这时真实的物理CPU资源则不是根据VCPU个数来确定对应的使用资源,而是根据份额来分配),即按份额分配获得CPU资源。

 

图片

图片来源于网络

 

总的来说,计算 vCPU 的关键在于了解底层硬件的规格,并根据工作负载和性能需求进行合理的分配。

 

四、vCPU的应用场景

 

vCPU在多个领域有广泛的应用场景。以下是一些主要的应用场景:

 

虚拟化环境:虚拟化软件可以将物理CPU的计算能力划分为多个vCPU,并为每个虚拟机分配一个或多个vCPU,从而实现多个虚拟机同时运行的功能。在虚拟化环境下,通过使用vCPU,可以有效地管理和利用物理服务器的资源,提高服务器的利用率,降低了IT成本。

 

多租户系统:在多租户系统中,vCPU 是计算资源的主要计量单位。用户可以根据自己的需求,选择具有不同 vCPU 数量的云服务器。每个用户都可以根据业务需求灵活调整计算资源,以满足其应用程序的灵活计算需求,同时保证资源的隔离性和安全性。

 

弹性扩展:随着业务的发展,当应用负载增加时,可以动态调整vCPU的数量来保证应用的可用性和性能。这种弹性伸缩的能力使得vCPU能够根据实际需求合理分配计算资源。

 

云计算和数据中心管理:vCPU在云计算和数据中心管理中发挥着关键作用。通过合理地分配vCPU资源,可以实现高效的资源利用和成本控制。

 

此外,vCPU的应用还受到应用类型的影响。对于需要大量计算资源的应用,如科学计算、数据分析等,更高的vCPU数量可以提供更好的计算性能,将计算任务分配到多个vCPU 上,加快任务的执行速度。而对于对计算资源要求不高的应用,如网站托管、数据库等,较低的vCPU数量也能满足基本的需求。

 

总结

 

本文介绍了vCPU的定义、计算方式与应用场景,其中虚拟CPU(vCPU)与物理CPU(pCPU)之间的关系是虚拟化技术的核心。vCPU作为虚拟机中的虚拟处理器,通过虚拟化层与物理服务器上的pCPU进行交互,实现了硬件资源的共享与高效利用。虚拟化技术不仅提高了服务器的利用率,还降低了运营成本,为云计算、大数据等现代信息技术的快速发展提供了有力支撑。随着技术的不断进步,虚拟化技术将在未来继续发挥重要作用,推动计算机领域不断创新与发展。

 

作者丨张彦琦
来源丨公众号:EBCloud(ID:KKHsuCheney)
dbaplus社群欢迎广大技术人员投稿,投稿邮箱:editor@dbaplus.cn
 
最新评论
访客 2023年08月20日

230721

访客 2023年08月16日

1、导入Mongo Monitor监控工具表结构(mongo_monitor…

访客 2023年08月04日

上面提到: 在问题描述的架构图中我们可以看到,Click…

访客 2023年07月19日

PMM不香吗?

访客 2023年06月20日

如今看都很棒

活动预告