专栏首页云计算奇妙学习之旅【云计算奇妙学习之旅】第四期:云计算虚拟化精讲
原创

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

在上一期中,我们讲到虚拟化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了,但是这段历史还是要知道的。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【云计算奇妙学习之旅】第一期:初识云计算

    说起“云计算”这三个字,相信你一定听过无数遍了,那么我想问问你,“云计算”到底是什么?你能回答出来吗?首先我们听到云计算三个字时,感觉非常高大上,高不可测的,新...

    誉天小鹿
  • 【云计算奇妙学习之旅】第三期:云计算虚拟化基础

    在之前的文章中,我们有了解到VMware公司推出的VMware Workstation这个软件,它实现的是单机版虚拟化,可以用来做实验或者搭建测试环境,但是它不...

    誉天小鹿
  • 【云计算奇妙学习之旅】第七期:存储基础配置

    在上一期的分享中,我们了解到RAID是什么,以及各种RAID的优缺点。那么,本期分享我们在存储中该怎样配置RAID?然后怎么使用存储提供的空间呢?

    誉天小鹿
  • Cloudera助力中联重科利用大数据分析平台转型成功,成本大降

    中联重科是国内领先的工程机槭、农业机械等高新技术装备研发制造商,是全球产品链最齐备的工程机械企业,为全球6大洲100多个国家的客户创造价值。

    挖掘大数据
  • 第17章 KOTLIN语言生态《Kotin 编程思想·实战》

    17.1 测试(Testing)框架 17.2 依赖注入(Dependency Injection)框架 17.3 JSON序列化(JSON seriali...

    一个会写诗的程序员
  • webkit中BFC元素临近浮动元素时的边距bug

    一直以来我们都很熟悉IE的“浮动边距加倍”的bug,并且绝大多数重构人员都已经很擅长在需要浮动时就直接绕过他。其实以webkit为核心的浏览器,包括但不限于Sa...

    小李刀刀
  • 给企业微信加个群机器人

    现在很多企业在使用企业微信或钉钉进行工作交流,我们可以在群里添加一个自定义群机器人,定时发送一些提醒或咨询信息,它可以作为一个小组手,也为工作增加一点乐趣。

    NanBox
  • 中国台湾大学林轩田机器学习基石课程学习笔记8 -- Noise and Error

    上一节课,我们主要介绍了VC Dimension的概念。如果Hypotheses set的VC Dimension是有限的,且有足够多N的资料,同时能够找到一个...

    红色石头
  • 爬虫训练之--获取错误并将其保存进本地文件

    明天依旧可好
  • Python之easy_install安装出错

    forrestlin

扫码关注云+社区

领取腾讯云代金券