ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

【云计算奇妙学习之旅】第四期:华为计算虚拟化精讲

2021-09-16 15:02:54  阅读:194  来源: 互联网

标签:虚拟化 Xen KVM 虚拟机 内核 计算 红帽 精讲


在上一期中,我们讲到华为的虚拟化Fusioncompute,它包含两个部分CNA和VRM。而虚拟化开发的难点在CNA上,因为所有计算、存储、网络的虚拟化是在CNA上实现完成的。其实华为的虚拟化也不是它自己一层层开发写出来的,而是基于开源的虚拟化,进行二次开发而来的,以前是基于XEN 现在是基于KVM。

计算虚拟化的重要概念

虚拟化是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机。在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。

这也是我们学习虚拟化最初的概念,在传统物理机场景里:底层是硬件Host Machine、中间是操作系统Host OS、最上层是应用程序;而在虚拟化场景里,是在底层硬件之上多加了一个虚拟化层,也是虚拟化最核心的Hypervisor,在Hypervisor之上运行虚拟机,在虚拟机里安装操作系统,最终运行应用程序。
在这里插入图片描述
说明一下,如果大家以后看到VM是代表虚拟机(Virtual Machine),VMM是代表虚拟机监视器(Virtual Machine Monitor),它是虚拟化开发最重点也是难度最大的地方。那它为什么有难度呢?因为它要做很多事情。比如说,一台机器有128G内存,它要虚拟出164G内存来;还有底层是一个intel的网卡,它还能虚拟出多个网卡,分配给多个多个虚拟机等等,这些都是需要Hypervisor来实现。

计算虚拟化的类型
在CPU的架构里,这里先要了解一下CPU特权环这个概念,是指在CPU里面存在4个逻辑的环,分别是ring0、ring1、ring2、ring3。在原来物理机的世界里,以前做CPU的厂商也没有意识到未来会有虚拟化的存在,所以当时CPU被分为4个逻辑环,只有ring0可以与操作系统内核交互,ring3运行应用程序。但是在虚拟化的里,又是另外一种世界了,虚拟机运行在ring3这一层,而虚拟机也有内核,在ring3这一层无法和虚拟机的内核交互,只有ring0这层才可以和内核交互,所以这个时候会产生19条敏感指令集的问题,也就是说ring3这层没有办法把这19条指令进行翻译和转换,因为ring3没法和虚拟机的内核进行交互,就会导致虚拟机无法运行,也就意味着装不了虚拟机。
图片
| 特权环与虚拟机 |

那么,现在为什么又能安装虚拟机了呢?

其实在原来就出现了两种技术,一种是全虚拟化,另一种是半虚拟化,就是为了解决那19条敏感指令集的问题。

这怎么说呢?

只有虚拟化世界的老大,VMware在这一点上做的最好。它在当时90年代,2000年的时候就可以装windows的操作系统了,而半虚拟化是装不了windows的,只能安装Linux的操作系统。这是为什么呢?

这是因为当时CPU的指令集不支持转换敏感指令集,所以需要在操作系统内核中写入一个系统调用程序Hypercall进行拦截和转换 ,因为Windows不开源,所以无法写入Hypercall,而Linux开源,支持写入Hypercall,所以半虚拟化只支持Linux系统。
在这里插入图片描述
那是怎么做到的呢?

其实是ring3拦截后,把指令给了ring0,对于虚拟机而言,它以为它直接进行交换了,其实是ring3在中间做了转换,模拟欺骗它说可以执行指令,但是这样的话开销特别大。但是vmware老强大了,自己可以拦截的,叫全虚拟化。只是这样来做转换,性能特别低下。所以,后来在CPU里加了一个特殊的指令集VT-X(VT-X是不是大家就熟悉一些啦)。

拿到一台机器,可以用lscpu这个命令来进行查询,如果有VT-X,说明CPU是支持虚拟化的。
**图片**
还可以用这个命令cat /proc/cpuinfo来查询,flags这栏就是指令集,如果里面有vmx(代表intel的)、svm(代表AMD的),就说明支持硬件虚拟化。因为在一些就版本没有lscpu这个命令,所以可以用这条命令来查询。
在这里插入图片描述
现在这样是通过CPU自身来拦截处理和转换,提升了效率,不用Hypervisor来拦截和转换。
这种方式就是硬件辅助虚拟化。

XEN和KVM
在今天虚拟化的种类很多,商业化的虚拟化有VMware的,还有微软的Hype-V,但是这些都不开源。云时代不用昂贵的虚拟化,用开源的虚拟化。开源可以做二次开发,对于厂商而言,可以不用给虚拟化厂商付钱。

现在主流的开源的虚拟化主要有2种,分别是Xen和KVM。

从Xen开始说起,在2002年,Xen正式被开源,它是英国剑桥大学开发的。因为Xen开源,所以在各个系统中都可以使用,华为在Fusioncompute 6.1之前的版本,它用的虚拟化就是Xen,Fusioncompute 6.1之后的版本就改为KVM了。

而在2007年,红帽发布了第一个企业版的虚拟化,叫RHEL5.0(红帽企业版Linux5.0)。但是在2008年,Xen被思杰citrix收购了,就是大家现在看到的Xen server。按理来说Xen是开源的,谁都可以用,但是被Xen收购后,再继续使用就需要付费给思杰citrix。红帽表示不想给思杰付钱,后来红帽就不用XEN了,反而用KVM,在2008年红帽收购了KVM。因为在继续用Xen是帮别人做嫁衣,不是红帽自己的。

当时2008亚马逊做云最好的,它的底层就是Xen,而后来阿里在2008年成立云计算的底层也是Xen,但是在2017年,亚马逊把虚拟化迁到KVM,阿里云也一样,华为是2018年把虚拟化迁到KVM上的。所以今天Xen的身影看到的就比较少了。

这些就是历史故事了,下面再来讲继续技术。在rhel5.8里可以看到安装的时候有两种选择,Xen和KVM。
在这里插入图片描述
这里也有一个故事

红帽5.0用Xen,直到5.4支持KVM,但是红帽的技术支持是7年,有些客户刚买Xen的系统,又不愿意改到KVM,就出现红帽继续支持Xen,直到7年有效期结束,所以当时红帽支持两种虚拟化Xen和KVM。如果客户买5.4的,就推荐KVM,5.4之前的用xen,直到2014年,红帽就再也不用支持xen了,之后红帽发布的RHEL6.0就只有kvm了。但是Xen和KVM都只能在Linux上运行,还有现在云的世界底层也是Linux、不是windows,除了微软。

那么Xen和KVM有什么区别呢?

第一点:先说Xen有什么特点,在Linux系统中有两个内核,一个是是标准内核,一个是Xen内核。运行业务用标准内核,运行虚拟化用xen内核。因为安装一套内核,必须要维护一套全新的内核,标准内核的一些驱动,在Xen内核是用不了。而且内核版本一定要在同版本内编译,才能使用,操作特别麻烦。

第二点:Domain 0。它也是和KVM最大的区别。在Xen内核,Hypervisor它在安装是时候需要安装Domain 0 ,需要预留CPU和内存。一个指令数据包请求先到物理机,再到Domain 0,由Domain 0在给到指定的VM,所以Domain 0的开销特别大,也存在性能瓶颈。如果给Domain 0预留的资源不足,无法维持VM正常运行;如果分配过多,又存在资源浪费。
在这里插入图片描述
只要安装xen虚拟化,就出现一个特殊的虚拟机Domain 0。
在这里插入图片描述
而KVM不一样,它不需要升级内核,而是直接用标准内核。

每一个虚拟化在内核中是一个进程。一旦进程启动,标准内核有的,进程都可以使用。
不需要由Domain 0来处理,相对于来说更轻量一些,这就是KVM和Xen最大的区别。

总结:
Xen有两个不好的地方,升级内核,要有Domain 0,而KVK直接用标准内核实现的,不用Domain 0。后来,KVM吐槽Xen,我们多轻量,Xen太重了;而Xen吐槽KVM就是,那家伙是个小毛孩子太年轻了,发展起来才几年,我们Xen已经特别成熟了。

这些年KVM也逐渐成熟发展起来,弥补了缺点,成为行业的标准,像华为云、阿里云等都是用KVM了。所以,现在不用学Xen,只用学KVM了,但是这段历史还是要知道的。

下期预告:
华为存储虚拟化基础

通过上面的学习我们了解到计算虚拟化的实现方式,那么第二大重点存储虚拟化,它又是怎么实现的呢?下期为大家揭晓,欢迎关注并转发~

标签:虚拟化,Xen,KVM,虚拟机,内核,计算,红帽,精讲
来源: https://blog.csdn.net/weixin_44149606/article/details/120328748

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有