计算虚拟化简介

云计算1.0时代以虚拟化为主,并在此基础上进一步发展,因此虚拟化也成为云计算的入门技术,本章重点介绍计算虚拟化的架构及相关技术。

计算虚拟化中的重要概念

Guest OS:虚拟机操作系统
Guest Machine:虚拟出来的虚拟机
Hypervisor:虚拟化软件层/虚拟机监控机(Virtual Machine Monitor,VMM)
Host OS:运行在物理机之上的OS
Host Machine:物理机

计算虚拟化的分类

裸金属型虚拟化

Hypervisor直接架设在硬件之上,掌握所有硬件资源,包括内存CPU、IO设备。不依赖于操作系统,支持多种操作系统,VMM(Virtual Machine Monitor)开发难度打,负载重。Xen

宿主型虚拟化

需要Host OS的应用程序,通过调用OS服务获取资源,简单易实现,安装应用依赖宿主OS,管理开销大,性能损耗多,VMWare workstation VirtualBox

操作系统虚拟化

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。简单易实现性能高,隔离性较差,容器和HostOS是同一种系统。

虚拟化的特点

分区、隔离、封装、独立

CPU特权级别

Intel的x86处理器是通过Ring级别来进行访问控制的,级别共分4层,RING0,RING1,RING2,RING3。Windows只使用其中的两个级别RING0和RING3。RING0层拥有最高的权限,RING3层拥有最低的权限。按照Intel原有的构想,应用程序工作在RING3层,只能访问RING3层的数据,操作系统工作在RING0层,可以访问所有层的数据,而其他驱动程序位于RING1、RING2层,每一层只能访问本层以及权限更低层的数据。如果普通应用程序企图执行RING0指令,则Windows会显示“非法指令”错误信息。
Guest os在Ring1

CPU虚拟化

不支持硬件辅助虚拟化技术的X86架构下的CPU有4个特权级(ring0~ring3),操作系统是处于最高级别的ring0,应用程序处于最低级别的ring3。
在这种架构下实现CPU的全虚拟化是极其困难的,为什么困难?

原先的OS运行在ring0层,拥有对所有硬件的全部特权级;虚拟化之后将OS运行在ring1层,OS就没有权限执行一些特权指令,怎么保证这些特权指令执行;在保证该OS虚拟机的特权指令执行的情况下,保证其他运行的OS虚拟机的安全;最先实现这种CPU全虚拟化技术的是Trap-and-emulation技术,即陷入模式和模拟仿真技术。这种技术通过将OS需求的特权指令通过VMM自动捕获的方式运行后返回去OS。当OS有特权指令产生时,VMM将其自动捕获,将OS所请求的特权指令进行截获,然后通过VMM运行之后将结果返回给OS层。VMM会使用模拟仿真将特权指令模拟仿真的方式执行一遍。

全虚拟化

动态二进制翻译,过滤所有虚拟机发送请求,动态完成敏感指令翻译,不需要修改Guest os内核,Hypervisor层监控,动态翻译时需要VMM资源,依赖VMM。VirtualPC VMWare workstation

半虚拟化必须修改Guest os内核,性能几乎等于物理机,对VMM以来少,支持多种OS用Hypercall方式做敏感指令。Xen Hyper-v

硬件辅助虚拟化

动态完成敏感指令翻译,不需要修改Guest os,两套特权级,两个Ring0,性能最强,需要硬件支持。Inter vp-x AMD -V

内存虚拟化

通过内存虚拟化共享物理系统内存,动态分配给虚拟机。
VA virtual memory
PA physical memory
MA mechine memory

I/O虚拟化

模拟(完全虚拟):完全使用软件来模拟真实硬件,
半虚拟化:对硬件驱动由前端(IO frontend)直接转到后端(IO backend)调用,通常仅适用于硬盘和网卡,性能高. eg.Xen
IO-through:IO透传,直接分配给虚拟机物理设备,例如直接分配一个硬盘或网卡给虚拟机,需要硬件具备IO透传技术,在Xen下由Dom0分配,但是访问使用直接使用,不经过Dom0,需要硬件支持。

虚拟化

环境隔离、资源复用提供高级的虚拟化特性

虚拟化优势

资源利用率:主机和操作系统不再一一对应,按需分配使用,提高资源利用率。
独立性:虚拟机独立于硬件。
程序运行效率:管理操作系统和应用程序被封装成一个个个体。
安全:安全、故障隔离。

Xen vs KVM

Xen 是一个开放源代码虚拟机监视器,裸金属型虚拟化
Kernel-based Virtual Machine基于内核虚拟机

KVM I/O操作流程 - 默认

全虚拟化IO

不用修改客户机操作系统,使用原生驱动,可以模拟老式经典设备。
IO路径长,依赖KVM和QEMU来做中间信息处理,多次数据拷贝,宿主机和虚拟机、内核态和用户态多次进行上下文切换。

半虚拟化IO

标准化,实现统一设备接口,环形队列批量处理IO请求,优化传统方案中内核态用户态频繁切换带来的性能开销。

前端VM需要加载驱动,不支持部分设备。

你可能感兴趣的:(计算虚拟化简介)