wy168 发表于 2023-12-31 17:41:33

云计算虚拟化三部曲(1):CPU和内存虚拟化


    <p style="font-size: 18px; line-height: 40px; text-align: left; margin-bottom: 30px;">大家好,我是IT售前工程师Bernie.</p>
    <p style="font-size: 18px; line-height: 40px; text-align: left; margin-bottom: 30px;">我们知道,虚拟化技术是云计算的核心技术。通过虚拟化,可以切割计算、存储和网络资源的颗粒度。虚拟机可根据需要从池子里获取和释放各类型资源。</p>
    <p style="font-size: 18px; line-height: 40px; text-align: left; margin-bottom: 30px;">也就是说:当<strong style="color: blue;">一个虚拟机繁忙的时候可以从池子里申请资源;当它闲置的时候,再把这部分资源让出来,让其他的这个虚拟机获取。</strong></p>
    <p style="font-size: 18px; line-height: 40px; text-align: left; margin-bottom: 30px;">Bernie将用3篇文章详细论述计算资源虚拟化、存储资源虚拟化和网络资源虚拟化的底层原理。本文是第一篇,讨论<strong style="color: blue;">计算资源的虚拟化</strong>,欢迎阅读。</p>
    <div style="text-align: left; margin-bottom: 10px;"><img src="https://p3-sign.toutiaoimg.com/tos-cn-i-qvj2lq49k0/280da0b5e8b64d6091f266a5343f39ef~noop.image?_iz=58558&amp;from=article.pc_detail&amp;lk3s=953192f4&amp;x-expires=1704566322&amp;x-signature=5EJmi33az5muGcPAE%2F4HaLQKZ5c%3D" style="width: 100%; margin-bottom: 20px;"></div>
    <p style="font-size: 18px; line-height: 40px; text-align: left; margin-bottom: 30px;">计算资源主要是CPU和内存,虚拟化也就是这两种资源的虚拟化。</p>
    <h1 style="text-align: left; margin-bottom: 10px;">CPU虚拟化</h1>
    <p style="font-size: 18px; line-height: 40px; text-align: left; margin-bottom: 30px;">我们以一台Intel6248R服务器为例,进行深度的剖析。服务器的CPU配置为:24核心、48线程,主频是3GHz,并且支持超线程。</p>
    <div style="text-align: left; margin-bottom: 10px;"><img src="https://p3-sign.toutiaoimg.com/tos-cn-i-qvj2lq49k0/27eff284334549bca8af1144a0adf7c5~noop.image?_iz=58558&amp;from=article.pc_detail&amp;lk3s=953192f4&amp;x-expires=1704566322&amp;x-signature=XKp5YhafEIHpZsxsbOCpKH1izi4%3D" style="width: 100%; margin-bottom: 20px;"></div>
    <p style="font-size: 18px; line-height: 40px; text-align: left; margin-bottom: 30px;">那么一颗CPU的算力是多少呢?</p>
    <p style="font-size: 18px; line-height: 40px; text-align: left; margin-bottom: 30px;"><span style="color: green;"><span style="color: green;">未开启超线程时</span></span></p>
    <p style="font-size: 18px; line-height: 40px; text-align: left; margin-bottom: 30px;"><strong style="color: blue;">一个CPU的算力 = 主频 * CPU核心数;</strong></p>
    <p style="font-size: 18px; line-height: 40px; text-align: left; margin-bottom: 30px;">所以一颗6248R的CPU算力是 = 3*24 = 72GHz。</p>
    <p style="font-size: 18px; line-height: 40px; text-align: left; margin-bottom: 30px;"><span style="color: green;"><span style="color: green;">开启超线程时</span></span></p>
    <p style="font-size: 18px; line-height: 40px; text-align: left; margin-bottom: 30px;">超线程也是一个十分重要的概念,后续可以专门写一篇文章说明,这里简单说一下:超线程是将一颗物理CPU通过复用的方式变为2颗逻辑CPU。</p>
    <p style="font-size: 18px; line-height: 40px; text-align: left; margin-bottom: 30px;">所以,如果开启超线程的话,一颗物理6248R的CPU算力是</p>
    <p style="font-size: 18px; line-height: 40px; text-align: left; margin-bottom: 30px;">3*24*2=144GHz</p>
    <p style="font-size: 18px; line-height: 40px; text-align: left; margin-bottom: 30px;">正常情况下一台服务器是不会只配置一颗CPU的,至少也是2颗,我们就按照2颗计算。那么,在开启超线程的情况下,一台服务器的总算力就是288GHz。</p>
    <p style="font-size: 18px; line-height: 40px; text-align: left; margin-bottom: 30px;">开启超线程后,对于单个CPU来说,可以提供出来的计算资源为</p>
    <div style="text-align: left; margin-bottom: 10px;"><img src="https://p3-sign.toutiaoimg.com/tos-cn-i-qvj2lq49k0/2a88679ac7264356981aae512c00b753~noop.image?_iz=58558&amp;from=article.pc_detail&amp;lk3s=953192f4&amp;x-expires=1704566322&amp;x-signature=5HniTDYkMK3caJXnLupCEMECcvM%3D" style="width: 100%; margin-bottom: 20px;"></div>
    <p style="font-size: 18px; line-height: 40px; text-align: left; margin-bottom: 30px;">如果我们规定:一个最小集群中可以部署了4台同样的服务器,那么这个集群的总算力就是<strong style="color: blue;">288*4=1152GHz</strong></p>
    <div style="text-align: left; margin-bottom: 10px;"><img src="https://p3-sign.toutiaoimg.com/tos-cn-i-qvj2lq49k0/dcec9df1a2444b469f6ff008bc3a530a~noop.image?_iz=58558&amp;from=article.pc_detail&amp;lk3s=953192f4&amp;x-expires=1704566322&amp;x-signature=QVvrUj%2FcN9PLPUGi9dyoTzXU54I%3D" style="width: 100%; margin-bottom: 20px;"></div>
    <p style="font-size: 18px; line-height: 40px; text-align: left; margin-bottom: 30px;">接下来,最重要的一步要来了!</p>
    <p style="font-size: 18px; line-height: 40px; text-align: left; margin-bottom: 30px;">虚拟化之后,我们会通过云管平台创建一些虚拟机VM,这些虚拟机是如何分配上面说的这么多CPU算力的呢?</p>
    <p style="font-size: 18px; line-height: 40px; text-align: left; margin-bottom: 30px;">实际上,我们是给创建的虚拟机划分线程的形式分配算力的。比如下图,创建两个虚拟机:VM1和VM2,然后给VM1划分3个线程,给VM2划分4个线程。这就意味着VM1具备了9GHz的算力,VM2具备了12GHz的算力。</p>
    <p style="font-size: 18px; line-height: 40px; text-align: left; margin-bottom: 30px;">虚拟机VM中的vCPU即为一个线程。所以,对于一台服务器来说,<strong style="color: blue;">在同一时刻</strong>所有VM中vCPU的总数不能高于总线程数。比如例子中的vCPU个数不能大于96.</p>
    <div style="text-align: left; margin-bottom: 10px;"><img src="https://p3-sign.toutiaoimg.com/tos-cn-i-qvj2lq49k0/7b2cec2fabef4a2e9991fa8c7bf0eab5~noop.image?_iz=58558&amp;from=article.pc_detail&amp;lk3s=953192f4&amp;x-expires=1704566322&amp;x-signature=HeXj871cDuQhPHiVtnZ2EoVKDSY%3D" style="width: 100%; margin-bottom: 20px;"></div>
    <p style="font-size: 18px; line-height: 40px; text-align: left; margin-bottom: 30px;">这里有一个问题:在上述例子中,我们假设总共创建了10个VM,把96个线程全部瓜分完了。我们还能继续创建虚拟机吗?</p>
    <p style="font-size: 18px; line-height: 40px; text-align: left; margin-bottom: 30px;">答案是:</p>
    <p style="font-size: 18px; line-height: 40px; text-align: left; margin-bottom: 30px;">YES!</p>
    <p style="font-size: 18px; line-height: 40px; text-align: left; margin-bottom: 30px;">原因是:在云计算中存在资源超分的概念。</p>
    <p style="font-size: 18px; line-height: 40px; text-align: left; margin-bottom: 30px;"><span style="color: green;"><span style="color: green;">资源超分</span></span></p>
    <p style="font-size: 18px; line-height: 40px; text-align: left; margin-bottom: 30px;">比如下面是7个线程,我们创建了3个虚拟机,每台虚拟机分配了3个线程。如果在同一时刻,3个VM同时占满3个线程显然是不合适的,也做不到。</p>
    <div style="text-align: left; margin-bottom: 10px;"><img src="https://p3-sign.toutiaoimg.com/tos-cn-i-qvj2lq49k0/5f3fced009e54ef3965238770ea39eb6~noop.image?_iz=58558&amp;from=article.pc_detail&amp;lk3s=953192f4&amp;x-expires=1704566322&amp;x-signature=Ki7eG5W66GRrJSwV8urxZ6ThplI%3D" style="width: 100%; margin-bottom: 20px;"></div>
    <p style="font-size: 18px; line-height: 40px; text-align: left; margin-bottom: 30px;">但是,云计算的超分状态完美地解决了资源过饱和的问题。在超分模式下,vCPU可以通过时间分片轮流使用线程的方式进行计算。</p>
    <p style="font-size: 18px; line-height: 40px; text-align: left; margin-bottom: 30px;">不过超分模式也并不是十分完美的,它有可能降低vCPU实际算力。比如:原本一个线程是3GHz,即每秒钟计算30亿次,有可能在时间片轮流使用的情况下,平均1秒钟它能够使用到的时间只有0.5s,也就是说:每秒只能计算15亿次。</p>
    <p style="font-size: 18px; line-height: 40px; text-align: left; margin-bottom: 30px;">所以,<strong style="color: blue;">超分模式下vCPU的最高算力是主频,最低可能是总算力/vCPU个数</strong>。</p>
    <p style="font-size: 18px; line-height: 40px; text-align: left; margin-bottom: 30px;">我们在实际的虚拟化中,一般是会使用到超分的,这也是云计算的边际效应。否则,云计算的灵魂也就不复存在了。不过,超分比也不是越高越好,太高了会影响VM的实际算力。</p>
    <p style="font-size: 18px; line-height: 40px; text-align: left; margin-bottom: 30px;"><span style="color: green;"><span style="color: green;">CPU回收</span></span></p>
    <p style="font-size: 18px; line-height: 40px; text-align: left; margin-bottom: 30px;">当虚拟机销毁或者暂时不需要这么多计算资源时,就涉及到CPU的回收,以实现物理资源的最大化利用。因为vCPU虚拟化是通过分时复用实现的,所以只要VM结束就会自动将CPU释放掉,其他的虚拟机就可以申请使用空闲区的CPU算力了。</p>
    <div style="text-align: left; margin-bottom: 10px;"><img src="https://p3-sign.toutiaoimg.com/tos-cn-i-qvj2lq49k0/147dc9fe74704711ac344dcd2e77c7b5~noop.image?_iz=58558&amp;from=article.pc_detail&amp;lk3s=953192f4&amp;x-expires=1704566322&amp;x-signature=oSc7TKj6SJcdnz5AavTZsfMDyfA%3D" style="width: 100%; margin-bottom: 20px;"></div>
    <h1 style="text-align: left; margin-bottom: 10px;">内存虚拟化</h1>
    <p style="font-size: 18px; line-height: 40px; text-align: left; margin-bottom: 30px;">在一个资源池中,总的内存资源是每台服务器的内存的累加。内存的虚拟化过程比CPU简单一些,我们重点关注其申请和回收两个过程即可。</p>
    <p style="font-size: 18px; line-height: 40px; text-align: left; margin-bottom: 30px;"><span style="color: green;"><span style="color: green;">内存申请</span></span></p>
    <p style="font-size: 18px; line-height: 40px; text-align: left; margin-bottom: 30px;">每个虚拟机VM可以向资源池申请内存,比如某个虚拟机VM1在创建时设置内存参数为4G,有可能开机的时候给它1G内存,在程序运行较多时再给它2G内存,但总数不超过4G。</p>
    <div style="text-align: left; margin-bottom: 10px;"><img src="https://p26-sign.toutiaoimg.com/tos-cn-i-qvj2lq49k0/8bcb3843837f45d285ee00c20b4cbf0e~noop.image?_iz=58558&amp;from=article.pc_detail&amp;lk3s=953192f4&amp;x-expires=1704566322&amp;x-signature=L8oxN%2FRVEcHfG0oaiNwLg%2BCDKUM%3D" style="width: 100%; margin-bottom: 20px;"></div>
    <p style="font-size: 18px; line-height: 40px; text-align: left; margin-bottom: 30px;"><span style="color: green;"><span style="color: green;">内存回收</span></span></p>
    <p style="font-size: 18px; line-height: 40px; text-align: left; margin-bottom: 30px;">由于VM存在超分的情况,所以不是说虚拟机VM销毁后,它占用的内存立即回收。因为这个内存有可能也在被其他VM使用ing。底层操作系统平台会周期性地扫描判断内存使用情况,来决定回收与否。</p>
    <p style="font-size: 18px; line-height: 40px; text-align: left; margin-bottom: 30px;">比如在v-Sphere虚拟化方案中,当服务器:</p><span style="color: green;">6%=&lt;可用内存,hostOS使用“TPS”方式回收;</span><span style="color: green;">4%=&lt;可用内存可用内存&lt;6%,使用“TPS”+“气球”回收;</span><span style="color: green;">2%=&lt;可用内存可用内存&lt;4%,使用“TPS”+“气球”+“压缩”+“交换文件”加速内存回收;</span><span style="color: green;">可用内存&lt;2%,使用“TPS”+"气球“压缩”+“交换文件”加速内存回收,同时禁止所有VM申请更多内存。</span>
    <div style="text-align: left; margin-bottom: 10px;"><img src="https://p3-sign.toutiaoimg.com/tos-cn-i-qvj2lq49k0/ebdb688d33764b0fa8d106c5021aa13b~noop.image?_iz=58558&amp;from=article.pc_detail&amp;lk3s=953192f4&amp;x-expires=1704566322&amp;x-signature=8Ws%2BUWVcmXOrP%2FJqViF0%2B9JI1Mg%3D" style="width: 100%; margin-bottom: 20px;"></div>
    <h1 style="text-align: left; margin-bottom: 10px;">总结</h1>
    <p style="font-size: 18px; line-height: 40px; text-align: left; margin-bottom: 30px;">以上是云计算中CPU和内存虚拟化的全部分享,篇幅有限,后续将发文进一步探讨存储虚拟化和网络虚拟化的相关内容。</p>
    <p style="font-size: 18px; line-height: 40px; text-align: left; margin-bottom: 30px;">我是IT售前工程师Bernie,欢迎关注!下期见~</p>


页: [1]
查看完整版本: 云计算虚拟化三部曲(1):CPU和内存虚拟化