我们知道,虚拟化技术是云计算的核心技术。通过虚拟化,可以切割计算、存储和网络资源的颗粒度。虚拟机可根据需要从池子里获取和释放各类型资源。
也就是说:当一个虚拟机繁忙的时候可以从池子里申请资源;当它闲置的时候,再把这部分资源让出来,让其他的这个虚拟机获取。
Bernie将用3篇文章详细论述计算资源虚拟化、存储资源虚拟化和网络资源虚拟化的底层原理。本文是第一篇,讨论计算资源的虚拟化,欢迎阅读。
计算资源主要是CPU和内存,虚拟化也就是这两种资源的虚拟化。
CPU虚拟化
我们以一台Intel6248R服务器为例,进行深度的剖析。服务器的CPU配置为:24核心、48线程,主频是3GHz,并且支持超线程。
那么一颗CPU的算力是多少呢?
未开启超线程时
一个CPU的算力 = 主频 * CPU核心数;
所以一颗6248R的CPU算力是 = 3*24 = 72GHz。
开启超线程时
超线程也是一个十分重要的概念,后续可以专门写一篇文章说明,这里简单说一下:超线程是将一颗物理CPU通过复用的方式变为2颗逻辑CPU。
所以,如果开启超线程的话,一颗物理6248R的CPU算力是
3*24*2=144GHz
正常情况下一台服务器是不会只配置一颗CPU的,至少也是2颗,我们就按照2颗计算。那么,在开启超线程的情况下,一台服务器的总算力就是288GHz。
开启超线程后,对于单个CPU来说,可以提供出来的计算资源为
如果我们规定:一个最小集群中可以部署了4台同样的服务器,那么这个集群的总算力就是288*4=1152GHz
接下来,最重要的一步要来了!
虚拟化之后,我们会通过云管平台创建一些虚拟机VM,这些虚拟机是如何分配上面说的这么多CPU算力的呢?
实际上,我们是给创建的虚拟机划分线程的形式分配算力的。比如下图,创建两个虚拟机:VM1和VM2,然后给VM1划分3个线程,给VM2划分4个线程。这就意味着VM1具备了9GHz的算力,VM2具备了12GHz的算力。
虚拟机VM中的vCPU即为一个线程。所以,对于一台服务器来说,在同一时刻所有VM中vCPU的总数不能高于总线程数。比如例子中的vCPU个数不能大于96.
这里有一个问题:在上述例子中,我们假设总共创建了10个VM,把96个线程全部瓜分完了。我们还能继续创建虚拟机吗?
答案是:
YES!
原因是:在云计算中存在资源超分的概念。
资源超分
比如下面是7个线程,我们创建了3个虚拟机,每台虚拟机分配了3个线程。如果在同一时刻,3个VM同时占满3个线程显然是不合适的,也做不到。
但是,云计算的超分状态完美地解决了资源过饱和的问题。在超分模式下,vCPU可以通过时间分片轮流使用线程的方式进行计算。
不过超分模式也并不是十分完美的,它有可能降低vCPU实际算力。比如:原本一个线程是3GHz,即每秒钟计算30亿次,有可能在时间片轮流使用的情况下,平均1秒钟它能够使用到的时间只有0.5s,也就是说:每秒只能计算15亿次。
所以,超分模式下vCPU的最高算力是主频,最低可能是总算力/vCPU个数。
我们在实际的虚拟化中,一般是会使用到超分的,这也是云计算的边际效应。否则,云计算的灵魂也就不复存在了。不过,超分比也不是越高越好,太高了会影响VM的实际算力。
CPU回收
当虚拟机销毁或者暂时不需要这么多计算资源时,就涉及到CPU的回收,以实现物理资源的最大化利用。因为vCPU虚拟化是通过分时复用实现的,所以只要VM结束就会自动将CPU释放掉,其他的虚拟机就可以申请使用空闲区的CPU算力了。
内存虚拟化
在一个资源池中,总的内存资源是每台服务器的内存的累加。内存的虚拟化过程比CPU简单一些,我们重点关注其申请和回收两个过程即可。
内存申请
每个虚拟机VM可以向资源池申请内存,比如某个虚拟机VM1在创建时设置内存参数为4G,有可能开机的时候给它1G内存,在程序运行较多时再给它2G内存,但总数不超过4G。
内存回收
由于VM存在超分的情况,所以不是说虚拟机VM销毁后,它占用的内存立即回收。因为这个内存有可能也在被其他VM使用ing。底层操作系统平台会周期性地扫描判断内存使用情况,来决定回收与否。
比如在v-Sphere虚拟化方案中,当服务器:
- 6%=<可用内存,hostOS使用“TPS”方式回收;
- 4%=<可用内存可用内存<6%,使用“TPS”+“气球”回收;
- 2%=<可用内存可用内存<4%,使用“TPS”+“气球”+“压缩”+“交换文件”加速内存回收;
- 可用内存<2%,使用“TPS”+"气球“压缩”+“交换文件”加速内存回收,同时禁止所有VM申请更多内存。
总结
以上是云计算中CPU和内存虚拟化的全部分享,篇幅有限,后续将发文进一步探讨存储虚拟化和网络虚拟化的相关内容。
文章出自:IT一指禅,如有转载本文请联系【IT一指禅】今日头条号。