一、CPU虚拟化

1.CPU的工作机制
随着云计算的兴起,虚拟化作为云计算的组成部分也火了一把,但虚拟化并不是什么新技术,早在上世纪60年代虚拟化技术就已经出现。X86的CPU架构有4个保护环,分为:环0--环3,环0只与内核通信,执行特权指令,而环3工作在用户空间,环1、环2预留,每当用户空间发起特权请求时,会立即激活内核空间,此时用户与内核空间的切换称为软中断,用户空间的所有特权指令都必须通过系统调用的方式来完成,CPU虚拟化按照工作机制的不同分为全虚拟化,半虚拟化和硬件辅助虚拟化3种。

2. 全虚拟化
在传统架构下,应用程序会直接向环0上的内核发起系统调用,此时系统由用户空间转为内核空间的过程称为软中断,当硬件执行完指令时会通知内核的过程称为硬中断。在全虚拟化架构下,Hypervisor运行在环0,Guest系统运行在环1,但它以为自己运行在环0,当Guest系统的应用向内核发起系统调用时会发生异常(特权指令无法在环1运行),Hypervisor会捕获到这些异常,在异常里面做翻译,模拟,而后的特权指令会在环1和环0之间转换,最后返回到客户操作系统内,客户操作系统认为自己的特权指令工作正常,继续运行。硬中断结果返回时先经过Hypervisor,再由Hypervisor通知Guest内核。

3. 半虚拟化
与全虚拟化Guest内核以为自己运行在环0不同,半虚拟化通过修改Guest的内核,让它明确知道自己运行在环1,所以当它要运行特权指令时,会将调用内核的请求改为调用环0的Hypervisor,这样节省了Hypervisor捕获和翻译的过程,但由于要修改内核,所以对Windows系统的支持不好。

4. CPU辅助虚拟化
针对X86系列的CPU虚拟化,Intel从2006年,AMD从2007年开始,对CPU从硬件层面进行了扩展,创造了环-1,Hypervisor运行在环-1,Guest运行在环0,这样当Guest系统中的应用发起系统调用时,还是直接向Guest内核发起请求,除了部分敏感指令(特权指令的子集)外,其余指令不在需要Hypervisor进行辅助,由于他不需要Guest修改内核,又比全虚拟化省去了捕获翻译的过程,所以成为现阶段CPU虚拟化的主流技术。

5.类型1和类型2的虚拟化技术
类型1的虚拟化技术,又称为裸金属虚拟化,该技术的特点是Hypervisor直接运行在物理主机上,并且管理虚拟机的操作系统,代表产品为Xen。

类型2的虚拟化技术,又称为可托管的虚拟化,他的特点是允许虚拟化技术运行在普通操作系统上,和普通的进程类似,代表产品为QEMU。KVM是一个比较特殊的实现方式,他通过启用内核中的虚拟化库将传统操作系统转化为类型1的虚拟化,但是它让然用的是通用操作系统,该内核与其他虚拟操作系统一同争用物理主机资源,所以KVM更像是类型2的虚拟化技术架构。

二、内存虚拟化

所有操作系统的内存都是以虚拟内存的方式提供,内存虚拟化很象现在的操作系统支持的虚拟内存方式,所以先来介绍下虚拟内存的实现方式:每个应用程序在运行时需要一段连续的地址空间,如果如实按照应用程序要求的地址空间提供的话,内存中会出现很多碎片,所以内核采取虚拟内存的方式,将物理内存以4K为一个单位进行分页,应用程序以为自己获得的是一片连续的地址空间,实际上是若干个内存页组成,每个内存页上都以双向链表的方式标明自己上一个和下一个内存页的位置,而内存虚拟化则是再这个基础上再做一次分页,所以Guest系统的内存到物理内存就要经过2次映射,GVA(Guest virtual Address)——GPA(Guest Physical Address)——HPA(Host Physical Address)。

于是AMD就通过RVI技术,Intel通过EPT技术将Guest内存直接映射到物理内存以减小损耗,GVA——HPA。
现在的 x86 CPU 都包括了一个称为内存管理的模块MMU(Memory Management Unit)和 TLB(Translation Lookaside Buffer),通过MMU和TLB来优化虚拟内存的性能,但再虚拟化场景下每台物理主机上运行着多台虚拟机,TLB会被反复清零,所以TLB也要进行虚拟化。

三、I/O虚拟化的实现

1.I/O虚拟化说明
无论是Xen还是KVM都只是实现了CPU和内存的虚拟化,传统或默认I/O虚拟化是通过宿主机系统用户空间中的Qemu程序完成,所以一个完整的虚拟化是由Xen或KVM加上Qemu组成。按照类型可以分为全虚拟化、半虚拟化和直通3种。
2. 全虚拟化
应用程序在往Guest系统内的I/O设备上写数据时,由于I/O设备并不知道自己运行在虚拟化环境中,从而会去调用物理设备驱动,这个过程会触发异常,该异常在被KVM捕获后交给Qemu进行模拟处理后最终将数据写到物理设备上。

3. 半虚拟化
不同于全虚拟化场景,半虚拟化下I/O设备明确知道自己运行在虚拟化环境下,通过在Guest系统上安装驱动,当他在写数据时直接通过Qemu将数据写到物理设备上,省去了KVM捕获和Qemu模拟的过程,提高了I/O性能。

不像要修改内核才能让它明确知道自己运行在虚拟化环境下那么复杂,I/O设备只需要安装驱动,就可以让它知道自己运行在虚拟化环境下,驱动分为前后两部分,前半部分安装在Guest系统内,后半部分安装在Hypervisor内核中。

4.直通
无论全虚拟化还是半虚拟化,在I/O虚拟化过程中都需要经过Qemu,原因就是虚拟机共享物理主机上的硬件,其实Guest系统中也可以安装物理I/O设备的驱动,让写数据时Guest系统直接访问物理设备,不再经过KVM和Qemu,此时硬件I/O设备的性能是最好的,但这样这个物理I/O设备就只能被这一台虚拟机所使用,这种方式称为直通。

四、KVM和Xen的实现

1.Xen介绍
Xen是KVM出现前的一种类型1的虚拟化技术,不要求CPU必须具备扩展功能,支持全虚拟化和半虚拟化,Xen的Hypervisor必须要配合一个独一无二的Domain0才能进行工作,所有的Xen虚拟环境都需要先运行Domain0,然后才能运行其他的虚拟客户机。Domain0中不仅包含所有硬件设备的驱动,还可以通过它对其他虚拟机进行全生命周期的管理,整个Xen架构中,只有Domain0有权限访问硬件I/O,其他的虚拟机DomainU(unprivilege)访问硬件必须通过Domain0完。
2.KVM介绍
KVM的前提是要求CPU必须具备扩展功能,在2.6.2之后的内核版本中,KVM就以一个模块的形式集成在里面,当内核装载了该模块之后就变成了支持hypervisor的内核。但是KVM本身只能够实现CPU和内存的虚拟化,KVM在I/O虚拟化方面,传统或者默认的方式是使用用户空间的QEMU纯软件的方式来模拟I/O设备,包括键盘、鼠标、显示器,硬盘和网卡等,从这个角度看,原有的操作系统也有点Domain0的特征。

转载于:https://blog.51cto.com/arkling/2310929

初识openstack之0——虚拟化及Xen和KVM介绍相关推荐

  1. 云计算之虚拟化技术概述(KVM/Xen/Hyper-V/VMware)

    文章目录 虚拟化技术 什么是虚拟化 服务器虚拟化 cpu的虚拟化 内存虚拟化管理 硬盘的虚拟化 网络虚拟化 IO虚拟化 Intel虚拟化技术 主流的虚拟化技术 虚拟化技术对比 KVM Xen Hype ...

  2. Xen与KVM虚拟化技术调研报告

    1.概述 随着计算机硬件的制作工艺提高,如CPU单位面积可容纳的器件多了好几倍,其他硬件的也快速发展,促使单机性能远远超出满足一个应用的需求.同时,目前传统服务器的利用率大约为20%-30%,通过虚拟 ...

  3. Paravirtualization (半虚拟化PV) - Xen

    目录 它是什么? 光伏 IO 驱动程序 表现 PV 和 Linux (PVOPS) 光伏和传统应用 兼容性 https://wiki.xenproject.org/wiki/Paravirtualiz ...

  4. 在CentOS上进行虚拟化:QEMU、Xen、KVM、LibVirt、oVirt

    Table of Contents 在CentOS上进行虚拟化 1.概述 2.谁做什么? 3. CentOS支持 3.1 CentOS的4 3.2 CentOS的5 Xen4 CentOS快速入门 0 ...

  5. OpenVZ,Xen,KVM等:虚拟化解决方案

    Table of Contents OpenVZ 技术原理 功能特点 参考资料 KVM 简介 特点 种类 相关链接 Xen.OpenVZ.KVM三大VPS技术优劣势详解.VPS虚拟服务器是虚拟技术的产 ...

  6. 云计算大数据:Xen、KVM、VMware、hyper-v等虚拟化技术的比较

    1.Xen.KVM.VMware.hyper-v等虚拟化技术的比较,xen和kvm,是开源免费的虚拟化软件. vmware是付费的虚拟化软件. hyper-v比较特别,是微软windows 2008 ...

  7. 虚拟化技术xen的简介和安装

    虚拟化技术的分类: 1,模拟:Emulation ​ Qemu,PearPC,Bochs 2,完全虚拟化:Full Virtualization,Native Virtualization ​ HVM ...

  8. Hyper-v 3.0虚拟化平台群集共享磁盘无法failover的故障

    碰到一个hyper-v 3.0虚拟化平台和HP存储的兼容性问题,放出来和大家分享一下. 平台:windows server 2012 RTM+hyper-v 3.0 故障现象: 生产虚拟平台宿主机意外 ...

  9. OpenStack精华问答 | OpenStack与计算虚拟化有什么关系?

    关于OpenStack的争议,从未停止,每每关于它的消息,都会一石激起千层浪.今天就让我们看看关于OpenStack的问答吧. 1 Q : 什么是OpenStack? A : OpenStack,是目 ...

最新文章

  1. Python ljust()方法
  2. 对于变态数据搜索的心得
  3. Service order save debug for distribution lock set logic
  4. Apache OpenNLP提供的文档
  5. ELK 架构之 Elasticsearch 和 Kibana 安装配置
  6. hdu 二分图最大匹配问题 (hdu 1083)
  7. vofuria的开发(3)将vuforia引入新建立的工程
  8. 系统分析师-论文准备
  9. linux qt socket编程视频教程,Qt视频教程第二十八集socket之UDP
  10. toolchain安装教程支持_Ubuntu安装ARM架构GCC工具链(ubuntu install ARM toolchain)最简单办法...
  11. matlab求一维热传导方程数值解代码,一维热传导方程的数值解
  12. var that =this的用法详解
  13. 硬盘划分主分区、扩展分区、逻辑分区、活动分区有什么不同?
  14. SpringCloud-Gateway网关
  15. F28335的DSP中主频的配置
  16. Windows 小工具软件:截屏,录音,音频转换
  17. 无线传感器网络实验与作业总结
  18. 越南语常用的计数词,多少钱用越南语怎么说
  19. 重磅:微信官方推出 Web 前端和小程序统一框架
  20. 量化交易入门阶段——欧奈尔的CANSLIM模型(N 新产品、新管理层和股价创新高)

热门文章

  1. mycafe目前服务器正在维护,【图片】咖啡厅全剧情记录(修正重发)【mycafe吧】_百度贴吧...
  2. C语言 精典数值算法程序合集
  3. 1台电脑可以上网,通过网络共享,让另外一台电脑也可以上网
  4. 亚丁号云控之发布云控地址
  5. day07 pyecharts制图
  6. 软件工程 - 项目管理
  7. 并发批量管理500台以上服务器脚本分享(shell版)
  8. 英特尔 SST 技术
  9. Django学习笔记(五)
  10. 记录——python的ui界面实现