在计算vCPU前需要了解一些术语:
Socket:插槽是一个阵列的引脚,用于固定处理器并将主板连接到可用的处理能力,插槽的数量由主板的容量决定。
Thread:线程是进程内的执行路径。一个进程可以包含一个或多个线程,线程与进程的主要区别在于,同一进程内的线程在共享内存空间中运行,而进程在独立的内存空间中运行。
Physical Core:物理核心,也被称为处理单元,位于CPU内。一个物理核心可能对应一个或多个逻辑核心。
Logical Core:逻辑核心使得单个物理核心能够同时执行两个或更多的操作。
在计算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:这个计算过程根据实际需求进行调整。
我们可以从下图中看到虚拟机系统的结构与功能划分,客户操作系统与虚拟机监视器共同构建了一个精巧的两级调度框架,这一框架在多核环境下尤为显著。客户操作系统负责第二级调度,主要是线程或进程在vCPU上的调度。虚拟机监视器负责第一级调度, 即vCPU在物理处理单元上的调度。
值得注意的是,这两级调度的调度策略和机制是相互独立的,它们之间不存在依赖关系,这使得虚拟机系统能够根据不同的需求和应用场景进行优化。