初识openstack之0——虚拟化及Xen和KVM介绍
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了初识openstack之0——虚拟化及Xen和KVM介绍相关的知识,希望对你有一定的参考价值。
一、CPU虚拟化
1.CPU的工作机制
随着云计算的兴起,虚拟化作为云计算的组成部分也火了一把,但虚拟化并不是什么新技术,早在上世纪60年代虚拟化技术就已经出现。X86的CPU架构有4个保护环,分为:环0--环3,环0只与内核通信,执行特权指令,而环3工作在用户空间,环1、环2预留,每当用户空间发起特权请求时,会立即激活内核空间,此时用户与内核空间的切换称为软中断,用户空间的所有特权指令都必须通过系统调用的方式来完成
2.全虚拟化、半虚拟化和CPU辅助虚拟化
虚拟化按照实现方式分为:全虚拟化、半虚拟化和CPU辅助的虚拟化,其特点如下:
2.1 全虚拟化
在传统架构下,应用程序会直接向环0上的内核发起系统调用,此时系统由用户空间转为内核空间的过程称为软中断,当硬件执行完指令时会通知内核的过程称为硬中断。在全虚拟化架构下,Hypervisor运行在环0,Guest系统运行在环1,但它以为自己运行在环0,当Guest系统的应用向内核发起系统调用时会发生异常(特权指令无法在环1运行),Hypervisor会捕获到这些异常,在异常里面做翻译,模拟,而后的特权指令会在环1和环0之间转换,最后返回到客户操作系统内,客户操作系统认为自己的特权指令工作正常,继续运行。硬中断结果返回时先经过Hypervisor,再由Hypervisor通知Guest内核。
2.2 半虚拟化
与全虚拟化Guest内核以为自己运行在环0不同,半虚拟化通过修改Guest的内核,让它明确知道自己运行在环1,所以当它要运行特权指令时,会将调用内核的请求改为调用环0的Hypervisor,这样节省了Hypervisor捕获和翻译的过程,但由于要修改内核,所以对Windows系统的支持不好。
2.3 CPU辅助虚拟化
针对X86系列的CPU虚拟化,Intel从2006年,AMD从2007年开始,对CPU从硬件层面进行了扩展,创造了环-1,Hypervisor运行在环-1,Guest运行在环0,这样当Guest系统中的应用发起系统调用时,还是直接向Guest内核发起请求,除了部分敏感指令(特权指令的子集)外,其余指令不在需要Hypervisor进行辅助,由于他不需要Guest修改内核,又比全虚拟化省去了捕获翻译的过程,所以成为现阶段CPU虚拟化的主流技术。
3.类型1和类型2的虚拟化技术
类型1的虚拟化技术,又称为裸金属虚拟化,该技术的特点是Hypervisor直接运行在物理主机上,并且管理虚拟机的操作系统,代表产品为Xen。
类型2的虚拟化技术,又称为可托管的虚拟化,他的特点是允许虚拟化技术运行在普通操作系统上,和普通的进程类似,代表产品为QEMU。KVM是一个比较特殊的实现方式,他通过启用内核中的虚拟化库将传统操作系统转化为类型1的虚拟化,但是它让然用的是通用操作系统,该内核与其他虚拟操作系统一同争用物理主机资源,所以KVM更像是类型2的虚拟化技术架构。
二、内存虚拟化
所有操作系统的内存都是以虚拟内存的方式提供,内存虚拟化很象现在的操作系统支持的虚拟内存方式,为什么所有操作系统都是虚拟内存?原因就是应用程序在运行时需要一段连续的地址空间,如果如实按照应用程序要求的地址空间提供的话,内存中会出现很多碎片,所以内核采取虚拟内存的方式,将物理内存以4K为一个单位进行分页,应用程序以为自己获得的是一片连续的地址空间,实际上是若干个内存页组成,每个内存页上都以双向链表的方式标明自己上一个和下一个内存页的位置。现在所有的 x86 CPU 都包括了一个称为内存管理的模块MMU(Memory Management Unit)和 TLB(Translation Lookaside Buffer),通过MMU和TLB来优化虚拟内存的性能,但当内存要进行虚拟化时由于MMU和TLB会被反复重置,所以MMU和TLB也要进行虚拟化。
三、I/O虚拟化的实现
1.模拟和虚拟
所谓虚拟指的是创建的虚拟机CPU类型必须和宿主机保持一致,而模拟则允许虚拟机CPU为各种类型
2.I/O虚拟化说明
CPU和内存本身就是通过分片与分页的方式实现了虚拟化,所以在虚拟化中I/O的虚拟化实现相对要复杂,I/O主要指网络与磁盘I/O,按照类型可以分为全虚拟化、半虚拟化和直通3种,以下以磁盘I/O举例说明
2.1 全虚拟化
vm中的磁盘在host系统中是以一个文件的形式存在,全虚拟化需要先经过vm中磁盘的驱动,然后在经过host磁盘驱动最终完成数据写入
2.2 半虚拟化
半虚拟化的vm因为知道自己是个虚拟机所以通过一个接口将数据写入host的文件中,再通过host磁盘驱动最终写入磁盘内
2.3 直通
而直通直接是将物理磁盘映射给vm,vm此时只有host磁盘的驱动
三、KVM和Xen的实现
1.Xen介绍
Xen是KVM出现前的一种类型1的虚拟化技术,支持全虚拟化和半虚拟化,Xen的Hypervisor必须要配合一个独一无二的Domain0才能进行工作,所有的Xen虚拟环境都需要先运行Domain0,然后才能运行其他的虚拟客户机。Domain0中不仅包含所有硬件设备的驱动,还可以通过它对其他虚拟机进行全生命周期的管理,整个Xen架构中,只有Domain0有权限访问硬件I/O,其他的虚拟机DomainU(unprivilege)访问硬件必须通过Domain0完。
2.KVM介绍
在2.6.2之后的内核版本中,KVM就以一个模块的形式集成在里面,当内核装载了该模块之后就变成了支持hypervisor的内核。但是KVM本身只能够实现CPU和内存的虚拟化,KVM在I/O虚拟化方面,传统或者默认的方式是使用用户空间的QEMU纯软件的方式来模拟I/O设备,包括键盘、鼠标、显示器,硬盘和网卡等,从这个角度看,原有的操作系统也有点Domain0的特征。
以上是关于初识openstack之0——虚拟化及Xen和KVM介绍的主要内容,如果未能解决你的问题,请参考以下文章