标签:KVM 虚拟化技术 VMM Hypervisor
笔记内容:虚拟化技术概述虚拟化简单讲,就是把一台物理计算机虚拟成多台逻辑计算机,每个逻辑计算机里面可以运行不同的操作系统,相互不受影响,每个逻辑系统都是独立的存在,这样就可以充分利用物理硬件的资源,而且还可以自由分配资源。
虚拟化是一个广义的术语,对于不同的人来说可能意味着不同的东西,这要取决他们所处的环境。在计算机科学领域中,虚拟化代表着对计算资源的抽象,而不仅仅局限于虚拟机的概念。例如对物理内存的抽象,产生了虚拟内存技术,使得应用程序认为其自身拥有连续可用的地址空间(Address Space),而实际上,应用程序的代码和数据可能是被分隔成多个碎片页或段),甚至被交换到磁盘、闪存等外部存储器上,即使物理内存不足,应用程序也能顺利执行。
虚拟化技术起源于20世纪60年代末,美国IBM公司当时开发了一套被称作虚拟机监视器(Virtual Machine Monitor)的软件,该软件作为计算机硬件层上面的一层软件抽象层,将计算机硬件虚拟分区成一个或多个虚拟机,并提供多用户对大型计算机的同时、交互访问。
虚拟化技术主要分为以下几个大类 :
我们通常所说的虚拟化主要是指平台虚拟化技术,通过使用控制程序(Control Program,也被称为 Virtual Machine Monitor 或 Hypervisor),隐藏特定计算平台的实际物理特性,为用户提供抽象的、统一的、模拟的计算环境(称为虚拟机)。虚拟机中运行的操作系统被称为客户机操作系统(Guest OS),运行虚拟机监控器的操作系统被称为主机操作系统(Host OS),当然某些虚拟机监控器可以脱离操作系统直接运行在硬件之上(如 VMWARE 的 ESX 产品)。运行虚拟机的真实系统我们称之为主机系统。
示意图:
在之前虚拟化技术分为全虚拟化和半虚拟化,因为早期的CPU硬件不支持虚拟化,虚拟机上的操作系统(Guest OS)要想使用CPU资源,需要通过VMM来翻译指令,这个过程比较耗费资源,这种虚拟化技术叫做全虚拟化(例如VMware Workstation)。半虚拟化技术通过修改Guest OS内核,让Guest OS可以直接使用CPU资源,而不需要翻译指令了,从而节省了资源,但修改内核比较鸡肋(例如XEN),因为有些操作系统的内核是不开源的。后续CPU厂商直接支持虚拟化,不需要通过VMM翻译指令了,就无所谓半虚拟化和全虚拟化了。
虚拟化技术的优点:
虚拟化技术的局限性:
关于虚拟化技术的更多内容,可参考以下文章:
VMware系列,商业
Xen
XenServer
KVM
Hyper-V
Openvz
VirtualBox
虚拟化技术有很多,不同的体系都有几十种,但是虚拟化架构主要有两种形式:宿主架构和裸金属架构:
I型:虚拟机直接运行在系统硬件上,创建硬件全仿真实例,被称为“裸机”,也称为裸金属架构。
II型:虚拟机运行在传统操作系统上,同样创建的是硬件全仿真实例,被称为“托管”hypervisor。也称为宿主架构。
Xen属于I型,KVM属于II型。
虚拟化架构是一个大话题,关于这方面的详细内容可参考以下文章:
这里只介绍KVM而不介绍其他虚拟化软件的原因有两点,一是我们大多数的服务器系统都是Linux内核的操作系统,而KVM是基于Linux内核的。二是KVM是开源、免费的,其他的例如VMware Vsphere、XenServer等都是商业收费的,而Hyper-V 又是Windows的,Openvz 又有局限性(与宿主共用内核,就无法安装其他内核的虚拟机),稳定性也有待考究,VirtualBox又不适合大规模的虚拟化场景,所以最后就只剩下KVM了。
KVM是Kernel-based Virtual Machine的缩写,意为基于内核的虚拟机。KVM是一个完全开源的系统虚拟化模块,它所基于的是Linux内核,它把Linux内核变成了一个Hypervisor,自Linux 2.6.20之后集成在Linux的各个主要发行版本中。它使用Linux自身的调度器进行管理,所以相对于Xen,其核心源码很少。KVM目前已成为学术界的主流VMM之一。
最开始KVM是由以色列初创公司Qumranet开发,后来2008年9月RedHat公司收购了Qumranet,RedHat基于KVM的虚拟化解决方案叫做RHEV,不过RHEV是收费的。
KVM的虚拟化需要硬件支持(如Intel VT技术或者AMD V技术)。是基于硬件的完全虚拟化。而Xen早期则是基于软件模拟的Para-Virtualization,新版本则是基于硬件支持的完全虚拟化。但Xen本身有自己的进程调度器,存储管理模块等,所以代码较为庞大。广为流传的商业系统虚拟化软件VMware ESX系列是基于软件模拟的Full-Virtualization。
KVM在Linux操作系统里面以进程的形式出现,由标准的Linux调度程序进行调度,这使得KVM能够使用Linux内核的已有功能。但是只有一个KVM内核模块还不能实现虚拟化的全部功能,就好比操作系统只有内核还不能成为一个完整的操作系统一样。所以这就需要提到QEMU了,QEMU是一个开源的虚拟化软件,纯软件,可以虚拟化所有的硬件,性能不强。而KVM基于QEMU开发了一个能够运行在用户空间的工具QEMU-KVM,KVM里的磁盘、网络设备等都是通过QEMU-KVM这个工具模拟出来的,所以KVM结合QEMU-KVM工具之后才算完整,KVM和QEMU-KVM通信是通过/dev/kvm实现的。其中libvirt是用来管理KVM虚拟机的API,其命令为virsh。
KVM架构图:
标签:KVM 虚拟化技术 VMM Hypervisor
原文地址:http://blog.51cto.com/zero01/2083221