设为首页 收藏本站
查看: 2017|回复: 0

[经验分享] openstack第四天——nova之虚拟化

[复制链接]

尚未签到

发表于 2017-6-24 23:30:13 | 显示全部楼层 |阅读模式
  什么是虚拟化?
  虚拟化说白了就是本来是一个完整的资源,切分或虚拟成多份,让这些资源都使用起来,物尽其用,减少了浪费,提高了利用率,省了钱
  百科定义;虚拟化,是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机。在计算机上同时运行多个逻辑计算机,每个逻辑计算机可以运行不同的操作系统,并且应用程序都可以在相互独立的空间内运行而互补影响,从而显著提高计算机的工作效率。
  虚拟化使用软件的方法从新定义划分IT资源,可以实现IT资源的动态分配,灵活调用,跨域共享,提高IT资源利用率,使IT资源能够真正的为社会基础服务,服务于各行各业中灵活多变的应用需求
  虚拟化(Virtualization)技术最长出现在20世纪60年代的IBM大型机系统,在70年代的system730系列中逐渐流行起来。
  在物理硬件之上安装软件:虚拟机监控器(Virtual Machine Monitor VMM),并且用VMM来控制产生多个的虚拟机(Virtual Machine)实例,每个vm都可以运行独立操作系统及应用软件。
  虚拟化是一个广义的术语,对于不同的人来说都可能意味着不同的东西,这要取决于他们所处的环境。在计算机科学领域,虚拟化代表作计算资源的抽象,而不仅仅局限于虚拟机的概念。
  比如对物理内存的抽象,产生了虚拟内存技术,使得应用程序认为其自身拥有连续可用的地址空间(Address Space),而实际上,应用程序的代码和数据可能被分割成多个碎片页或段,甚至被交换到磁盘、闪存等外部存储器上,即使物理内存不足,应用程序也能顺利执行。
  为什么要学习虚拟化
  随着近年来多核系统、集群、网络甚至云计算的广泛部署,虚拟化技术在商业应用上的优势日益体现,不仅降低了IT成本,而且还增强了系统安全性和可靠性,虚拟化的概念也逐渐深入到人们的日常生活中和工作中


DSC0000.gif DSC0001.gif


网格(Grid),在信息学中,网格是一种用于集成或共享地理上分布的各种资源(包括计算机系统、存储系统、通信系统、文件、数据库、程序等),使之成为有机的整体,共同完成各种所需任务的机制。
网格  虚拟化是云计算的基础,而我们学习虚拟化的目的之一是为云平台提供云主机,具体的:在一台真实物理机上产生多台虚拟机(每台vm安装不同的操作系统),它们共享物理机的cpu、内存、IO硬件资源,但是逻辑上彼此隔离
  虚拟化技术的分类(简单了解下就可以)
  注意:本文讨论的虚拟化技术只针对x86平台,并假定虚拟机中运行的Guest OS也是为x86平台设计的。
  一、虚拟化计算主要分为以下几大类:
  1.平台虚拟化:针对计算机和操作系统的虚拟化,即创建虚拟机
  2.资源虚拟化:针对特定的系统资源的虚拟化,比如内存,cpu等
  3.应用程序虚拟化:包括仿真、模拟、接受计算(java虚拟机jvm)等。
    我们通常所说的虚拟化主要是指平台虚拟化技术,通过控制程序(VMM或者Hypervisor)来创建虚拟机
  Guest OS(客户机操作系统):虚拟机中运行的操作系统
  Host OS(主机操作系统):运行虚拟机监控器(VMM、Hypervisor)需要注意的是,某些虚拟机监控器VMM可以脱离操作系统直接运行在硬件之上(如VMWARE的ESX产品)
DSC0002.png

  二、平台虚拟化技术又可以细分为如下几个子类
  了解这些分类的关键在于一定要记住:VM是由VMM产生并运行的
  1.全虚拟化(Full Virtualization)
  全虚拟化的核心就在"全" ,“全”指的是VMM为虚拟机模拟了完整的底层硬件,包括处理器,物理内存,时钟,外设等。
  这种‘全’的特性牛逼之处就在于:原本是为物理硬件设计的操作系统或者其他系统软件,完全不需做任何修改就可在虚拟机中运行。
  然而再牛逼的软件也有不足:vm最后还是要和vmm打交道,对于全虚拟化来说,vmm必须完全并且完整地把自己模拟成硬件,为vm提供全部硬件接口
  同时必须模拟特权指令的执行过程,如下例



让我们以x86 体系结构下对操作系统进程页表切换的操作(mov pgtable)为例,来介绍VMM把自己完全模拟成硬件是怎么样一种过程:
1.真实的硬件提供了一个特权 CR3 寄存器来实现该接口,操作系统只需执行 "mov pgtable,%%cr3"的 汇编指令即可。
2.VMM 必须按照1中所述,完全地模拟该接口执行的全部过程,但是如果硬件不提供虚拟化的特殊支持,那么这个模拟过程将会十分复杂:
a:一般而言VMM 必须运行在最高优先级来完全控制物理主机的系统,而 Guest OS 需要降级运行,因而不能执行特权操作(如进程页表切换mov pgtable这种特权操作)。
b:当 Guest OS 执行前面的特权汇编指令(mov pgtable...)时,物理主机系统产生异常(General Protection Exception),执行控制权重新从 Guest OS 转到 VMM 手中。--->飞的再高也得回到地面
c:VMM 先分配一个变量作为影子 CR3 寄存器交给 Guest OS。将 pgtable (进程表)代表的客户机物理地址(Guest Physical Address)填入影子 CR3 寄存器--->让Guest OS以为自己在操作真实的内存。
e:然后 VMM 将Guest Os需要操作的pgtable 翻译成物理主机的物理地址(Host Physical Address)并填入物理主机的 CR3 寄存器,最后返回到 Guest OS中。随后 VMM 还将处理复杂的 Guest OS 缺页异常(Page Fault)。
DSC0003.png

  比较著名的全虚拟化VMM有Microsoft Virtual PC、VMware Workstation、Sun Virtual Box、Parallels Desktop for Mac,QEMU,KVM。
  2.硬件辅助虚拟化(Hardware—Assisted Virualization)
  硬件辅虚拟化主要是为了解决全虚拟化在提供接口的同时必须模拟特权指令的执行过程,是指借助硬件(主要是主机处理器)的技术来实现高效的全虚拟化。例如有Inter-VT技术支持。Guest OS 和VMM的执行环节自动的隔离开来,Guest OS 有自己的“全套寄存器”,可以直接运行在最高级别。因此在上面的例子中,Guest OS 能够执行修改页表的汇编指令。Inter-VT和AMD-V是目前x86体系结构上可用的两种硬件辅助虚拟化技术。
DSC0004.png

  3.半虚拟化(Paravirtualization)
  半虚拟化,这是一种修改了Guest OS访问部分特权状态的代码,以便于直接与VMM交互的技术。在半虚拟化虚拟机中,部分硬件接口以软件的形式提供给客户机操作系统,这可以通过Hypercall(VMM提供给Guest OS 的直接调用,与系统调用类似)的方式来提供。例如Guest OS把切换页表的代码修改为调用Hypercall来直接完成修改影子CR3寄存器和翻译地址的工作。由于不需要产生额外的异常和模拟部分硬件执行流程,半虚拟化可以大幅度提高性能。,比较著名的VMM有Denali,Xen
DSC0005.png

  4.部分虚拟化(Partial Virtualization)
  VMM之模拟部分底层硬件,因此客户机操作系统不做修改是无法再虚拟机中运行的,其他程序也可能需要修改。在历史上,部分硬件虚拟化是通往全虚拟化道路上的里程牌,最早出现在第一代的分时系统CTSS和IBM M44/44X实验性的分页系统
  5.操作系统的虚拟化(Operating System Level Virualization)
  在操作系统中,所有用户的进程本质上是在同一个操作系统的实例中运行,因此内核或应用程序的缺陷可能影响到其它进程。操作系统级虚拟化是一种在服务器操作系统中使用的轻量级虚拟化技术,内核通过创建多个虚拟的操作系统(内核和库)来隔离不同的进程,不同的实例中进程完全不了解多方的存在。比较著名的有Solaris Container OpenVZ等
  这种分类并不绝对的,一个优秀的虚拟软件往往融合了多项技术。例如VMware Workstation 是一个著名的全虚拟化的VMM,但它使用了一种被称为二进制翻译的技术把对特权状态的访问转回对影子状态的操作,从而避免了抵消的Trap-And-Emulate 的处理方式,这与半虚拟化相似,只不过半虚拟化是静态地修改程序代码。对于这种超虚拟化而言,如果能利用硬件特性,那么虚拟机的管理将会大大简化,同时还能保持较高的性能。
  内存虚拟化
DSC0006.png

  上图中左半部分是正常情况下内存的使用情况,线性地址到物理地址的一个转换,通常应用程序使用的内存地址就是线性地址,需要通过MMU地址转换的一个硬件来实现线性地址到物理地址的一个转换。
  上图右部分是虚拟化情况下内存如何实现线性地址到物理地址的转换,虚拟机中的OS获得是有Host OS分配的线性地址,Guest OS中的应用程序获取的是相对于Guest OS 来说的线性地址,那么多余这个线性地址来说最终只能转换成线性地址,无法转换成真正的物理地址,虚拟机中就提供了一个虚拟的MMU直接将Guest OS 中的线性地址直接转换成真正的物理地址,但是每个虚拟的MMU毕竟是虚拟出来的没有真实的硬件MMU性能好,而且虚拟MMU的开发也很负杂,每一个Guest 都要有一个MMU,这对内存消耗很大,对于这种技术我们称作是"影子页表技术"
  此后Inter开创了EPT(Extended Page Tables)技术,相当于影子页表技术来说EPT技术降低了内存虚拟化的难度,EPT技术是直接在硬件上实现了Guest OS中线性地址到Guest OS中的物理地址在到Host OS中的物理地址的两次转换
  I/O虚拟化
DSC0007.png

  最左边的IO虚拟化使用的是仿真技术:
  我们将要着重研究的Kvm虚拟化就引用了这种技术
  仿真(Emulation)是一个完全通过软件程序来模拟硬件的技术。早期虚拟化都采用了这种方案来虚拟网络设备。常见的仿真软件有QEMU、Vmware Workstation、VirtualBox
  中间的IO虚拟化是Para-virtualization:
  Para-virtualization又称为半虚拟化,最早由Citrix的Xen提出使用。在半虚拟化模型中,物理硬件资源统一由Hypervisor管理,由Hypervisor提供资源调用接口。虚拟子机通过特定的调用接口与Hypervisor通信,然后完整的对I/O资源进行控制操作
  最右边的是直接IO:
  Hypervisor将一个PCI设备(网卡,usb,光驱等)直接分配给指定虚拟子机单独访问。为了安全和稳定性考虑,pass-through使用通常结合Inter-VT-D(AMD也有类似技术)来使用,通过iommu保证虚拟子机之间内存访问不冲突。这种技术在WMware上交VMDirectPath I/O。
  网络虚拟化
  在Neutron是会详细介绍

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-387774-1-1.html 上篇帖子: [dpdk] 读官方文档(2) 下篇帖子: OpenStack Grizzly版本部署(离线)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表