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

[经验分享] openstack---虚拟化学习

[复制链接]

尚未签到

发表于 2017-6-25 07:23:55 | 显示全部楼层 |阅读模式
  一、概述
  云计算的一个核心思想就是在服务器端提供集中的物理计算资源,这些物理计算资源可以分解为更小的单位去独立的服务不同的用户,每个用户可以在共享的物理资源中拥有隔离、安全的虚拟环境。
  现代操作系统被自下而上的划分为多个层次。每个层次都向上一层次呈现一个抽象,每一层只需要知道下层抽象的接口。虚拟化本质上就是由位于下层的软件模块,根据上层的软件模块的期望,抽象出一个虚拟的软件或硬件接口,使上一层软件可以直接运行在与自己所期望的运行环境完全一致的虚拟环境上。
  虚拟化的原理:在OS中加入一个虚拟化层(VMM),虚拟化层可以对下层(HostOS)硬件资源(物理CPU、内存、磁盘、网卡、显卡等)进行封装、隔离,抽象为另一种形式的逻辑资源,再提供给上层(GuestOS)使用。所以你可以理解VMM其实就是联系HostOS和GuestOS的一个中间件,当然虚拟化可以将一份资源抽象为多份,也可以将多份资源抽象为一份。
  IaaS(基础架构即服务):
  二、虚拟化的实现方式:
  VMM直接运行在硬件平台上,控制所有硬件并管理HostOS。Xen就是这种实现。
  VMM运行在一个传统的操作系统里(第一软件层),HostOS则运行在第三软件层。KVM和VirtualBox就是这种实现。
  三、虚拟化的分类:即按照VMM所提供的虚拟平台类型
  首先来理解X86 CPU的结构:
DSC0000.jpg

  注意:CPU为了保证程序代码执行的安全性、多用户的独立性、保护OS的正常运行,提出了CPU执行状态的概念。这样能够限制不同程序之间的访问能力,避免一个程序获取另一个程序的内存数据造成数据混乱,同时也避免了程序错误的操作物理硬件。一般CPU都会划分为用户态内核态,x86的CPU架构更是细分为了Ring3~0四种状态。
  Ring3 用户态(User Mode):运行在用户态的程序代码需要受到CPU的检查,用户态程序代码只能访问内存页表中规定能被用户态程序代码访问的页面虚拟地址(受限的内存访问)。甚至不能直接访问外围硬件设备、不能抢占CPU。所有的应用程序(Application)都运行在用户态上。——当运行在用户态的Application需要调用只能被核心态代码直接访问的硬件设备时,CPU会通过特别的接口去调用核心态的代码,以此来实现Application对硬件设备的调用。
  Ring0 核心态(Kernel Mode):是Host OS Kernel运行的模式,运行在核心态的代码可以无限制的对系统内存、设备驱动程序、网卡接口、显卡接口等外围硬件设备进行访问。只有Host OS能够无限制的访问磁盘、键盘等外围硬件设备的数据,但是首先需要在Host OS上安装驱动程序。
DSC0001.jpg

  虚拟化的实现层次图:
DSC0002.jpg

  GuestOS和VMM都属于运行在Ring3上的应用程序,GuestOS操作硬件设备时并执行操作指令时,VMM会将该操作指令监控、捕获、检测后将指令传递给HostOS,HostOS会将GuestOS发出的运行于用户态的操作指令模拟为核心态指令。
  完全虚拟化:现有的操作系统无须进行任何修改就可以运行在这样的虚拟平台上。即VMM需要能够正确处理Guest OS的所有行为。
  完全虚拟化经历了两个阶段:软件辅助的完全虚拟化和硬件辅助的完全虚拟化。
  软件辅助的完全虚拟化引入了两种机制——一是优先级压缩,一是二进制代码翻译。
  硬件辅助的完全虚拟化是一种完备的虚拟化方法。这种虚拟化技术引入新的CPU运行模式和新的指令集,使得VMM和GuestOS运行于不同的模式下(VMM=Root Mode;GuestOS=Non-Root Mode),GuestOS运行于受控模式,原来的一些敏感指令在受控模式下会全部陷入VMM,由VMM来实现模拟,这样就解决了部分非内核态敏感指令的陷入——模拟难题,而且模式切换时上下文的保存恢复由硬件来完成,这样就大大提高了陷入——模拟时上下文切换的效率。该技术的引入使x86 CPU可以很容易地实现完全虚拟化。
  内存虚拟化:原来的GuestOS使用的是虚拟内存,不可以缺少虚拟内存到物理内存的翻译,影响了虚拟机的效率。
  内存虚拟化的映射关系:
  3种地址: 客户机虚拟地址(GVA),指GuestOS提供给其应用程序使用的线性地址空间。
  客户机物理地址(GPA),经VMM抽象的,虚拟机看到的伪物理地址。
  宿主机物理地址(HPA),真是的机器物理地址,即地址总线上出现的地址信号。
  内存地址的映射关系:
  GuestOS:GPA = f(GVA) #GuestOS维护着一套页表,负责VA到PA的映射 ;
VMM:HPA = g(GPA) #VMM维护着一套页表,负责PA到MA的映射 ;
由于x86架构只支持一次地址转换,即VMM根据GVA到GPA再到HPA的映射关系,计算GVA到HPA的映射关系,就会引入“影子页表”的问题,内存开销很大,性能受到影响。
  为了解决“影子页表”的局限,Intel的VTx提供了EPT(Extended Page Table)直接在硬件上支持两次地址转换。VTx还提出了VPID(Virtual Processor ID)技术,进一步优化内存虚拟化的性能。
  I/O虚拟化:最好的方法是让客户机直接使用真实的硬件设备。 VTx的EPT解决了客户机直接访问到设备真实的I/O地址空间,此外VTx通过在北桥引入DMA重映射硬件,让设备的DMA操作直接访问到客户机的内存空间。
  网络虚拟化:SRIOV(Single Root I/O Virtualization)将一块网卡分给若干个GuestOS使用,每个虚拟机1/N,性能高,接近真机。 SRIOV定义了两种function的类别:PF和VF。在虚拟化的环境中,一个VF被当作一个虚拟网卡分配给一个Guest OS,所有的VF和PF被连接在SRIOV网卡内部的一个桥(bridge),这样各个VF的通信互不干扰。

运维网声明 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-387809-1-1.html 上篇帖子: Setting DPDK+OVS+QEMU on CentOS 下篇帖子: 我在网易云信是如何做运维的
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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