1.3 KVM虚拟化技术简介
1.3.1 KVM的历史
基于内核的虚拟机(Kernel-Based Virtual Machine, KVM)最初是由以色列公司Qumranet开发的。KVM在2007年2月被正式合并到Linux 2.6.20核心中,成为内核源代码的一部分。2008年9月4日,Red Hat公司收购了Qumranet,开始在RHEL中用KVM替换Xen,第一个包含KVM的版本是RHEL 5.4。从RHEL 6开始,KVM成为默认的虚拟化引擎。KVM必须在具备Intel VT-x或者AMD-V功能的X86平台上运行。它也被移植到S/390、POWERPC与IA-64平台上。Linux内核3.9版本加入了对ARM架构的支持。
KVM包含一个为处理器提供底层虚拟化、可加载的核心模块KVM.KO(KVM-INTEL.KO或KVM-AMD.KO),使用Qemu(Qemu-KVM)作为虚拟机上层控制的工具。KVM不需要改变Linux或Windows系统就能运行。
1.3.2 KVM功能概览
KVM是基于虚拟化扩展(Intel VT-x或Amd-V)的X86硬件,是Linux完全原生的全虚拟化解决方案。部分的准虚拟化支持主要是以准虚拟网络驱动程序的形式用于Linux和Windows客户机系统的。KVM目前设计为通过可加载的内核模块来进行广泛支持的客户机操作系统,如Linux、BSD、Solaris、Windows、Haiku、ReactOS和AROS Research Operating System。
在KVM架构中,虚拟机实现为常规的Linux进程,由标准Linux调度程序进行调度。事实上,每个虚拟CPU显示为一个常规的Linux进程。这使KVM能够享受Linux内核的所有功能。
需要注意的是,KVM本身不执行任何模拟,需要用户空间程序通过dev/kvm接口设置一个客户机虚拟服务器的地址空间,向它提供模拟I/O,并将它的视频显示映射回宿主的显示屏。目前这个应用程序就是Qemu。
图1-8所示为KVM的基本架构。
图1-8 KVM基本架构
下面简单介绍一下KVM的功能特性。
1.内存管理
KVM从Linux继承了强大的内存管理功能。一个虚拟机的内存与任何其他Linux进程的内存一样进行存储,可以以大页面的形式进行交换以实现更高的性能,也可以以硬盘文件的形式进行共享。Numa支持(非一致性内存访问,针对多处理器的内存设计)允许虚拟机有效地访问大量内存。
KVM支持最新的基于硬件的内存虚拟化功能,支持Intel的扩展页表(EPT)和AMD的嵌套页表(NPT,也叫“快速虚拟化索引-RVI”),以实现更低的CPU利用率和更高的吞吐量。
内存页面共享通过一项名为内核同页合并(Kernel Same-Page Merging, KSM)的内核功能来支持。KSM扫描每个虚拟机的内存,如果虚拟机拥有相同的内存页面,KSM将这些页面合并到一个在虚拟机之间的共享页面,仅存储一个副本。如果一个客户机尝试更改这个共享页面,它将得到自己的专用副本。
2.存储
KVM能够使用Linux支持的任何存储方式来存储虚拟机镜像,包括具有IDE、SCSI和SATA的本地硬盘,网络附加存储(NAS)(包括NFS和SAMBA/CIFS),或者支持ISCSI和光纤通道的SAN。多路径I/O可用于改进存储吞吐量和提供冗余。由于KVM是Linux内核的一部分,它可以利用所有领先存储供应商都支持的一种成熟且可靠的存储基础架构,它的存储堆栈在生产部署方面具有良好的记录。
KVM还支持全局系统(GFS2)等共享文件系统上的虚拟机镜像,以允许虚拟机镜像在多个宿主之间共享或使用逻辑卷共享。硬盘镜像支持按需分配,仅在虚拟机需要时分配存储空间,而不是提前分配整个存储空间,提高存储利用率。KVM的原生硬盘格式为QCOW2,它支持快照,允许多级快照、压缩和加密。
3.设备驱动程序
KVM支持混合虚拟化,其中准虚拟化的驱动程序安装在客户机操作系统中,允许虚拟机使用优化的I/O接口而不使用模拟的设备,从而为网络和块设备提供高性能的I/O。KVM准虚拟化的驱动程序使用IBM和Red Hat联合Linux社区开发的Virtio标准,它是一个与虚拟机管理程序独立的、构建设备驱动程序的接口,允许为多个虚拟机管理程序使用一组相同的设备驱动程序,能够实现更出色的虚拟机交互。
4.Linux的性能和可伸缩性
KVM也继承了Linux的性能和可伸缩性。KVM虚拟化性能在很多方面(如计算能力、网络带宽等)已经可以达到非虚拟化原生环境95%以上的性能。KVM的扩展性也非常好,客户机和宿主机都可以支持非常多的CPU数量和非常大的内存。例如,Red Hat官方文档就介绍过,RHEL 6.X系统中的一个KVM客户机可以支持160个虚拟CPU和高达2Tb的内存,KVM宿主机支持4096个CPU核心和高达64Tb的内存。
1.3.3 KVM的优势
1.开源
KVM是一个开源项目,这就决定了KVM一直是开放的姿态,许多虚拟化的新技术都是首先在KVM上应用,再到其他虚拟化引擎上推广的。
虚拟化一般网络和存储都是难点。网络方面,SR-IOV技术就是最先在KVM上应用,然后推广到其他虚拟化引擎上的。再比如SDN、Open vSwitch这些比较新的技术,都是先在KVM上得到应用的。
硬盘方面,基于SSD的分层技术,也最早在KVM上得到应用。
KVM背靠Linux这棵大树,和Linux系统紧密结合,在Linux上的新技术都可以马上应用到KVM上。围绕KVM的是一个开源的生态链,从底层的Linux系统,到中间层的Libvirt管理工具,再到云管理平台OpenStack,都是如此。
2.性能
KVM吸引许多人使用的一个动因就是性能。在同样的硬件条件下,KVM能提供更好的虚拟机性能,主要是因为KVM架构简单,代码只有2万行,并且其一开始就支持硬件虚拟化。这些技术特点保证了KVM的性能。
3.免费
因为KVM是开源项目,所以绝大部分KVM的解决方案都是免费方案。随着KVM的发展,KVM虚拟机越来越稳定,兼容性也越来越好,因而其也就得到越来越多的应用。
4.广泛免费的技术支持
免费并不意味着KVM没有技术支持。在KVM的开源社区,数量巨大的KVM技术支持者都可以提供KVM技术支持。另外,若需要商业级支持,还可以购买Red Hat公司的服务。
1.3.4 KVM虚拟化技术的未来
KVM技术一出现,就受到厂商的大力推广。Red Hat公司一直将KVM作为虚拟化战略的一部分,并于2009年年底发布了Red Hat Enterprise Linux 5.4,并在之后继续大力推行这种转型,鼓励用户使用KVM为其首选的虚拟化平台。2011年,随着新版操作系统的Red Hat Enterprise Linux的发布,Red Hat公司完全放弃了以开源Xen为虚拟化平台的思路,开始支持KVM作为Hypervisor。KVM作为一个快速成长的Linux虚拟化技术,已经获得了许多厂商的支持,如Canonical、Novell等。Canonical公司的Ubuntu服务器操作系统是第一个提供全功能的KVM虚拟化栈的主要Linux发行版。
而开放虚拟化联盟(OVA)也在为KVM护航,这个由IBM、Red Hat、Intel等重量级厂商组成的联盟才成立不过半年,成员就迅速达到200个以上。该联盟致力于促进基于内核的虚拟机(KVM)等开放虚拟化技术的应用,鼓励互操作性,为企业在虚拟化方面提供更多的选择、更高的性能和更具吸引力的价格。
尽管KVM是一个相对较新的虚拟机管理程序,但是其诞生不久就被Linux社区接纳,成为随Linux内核发布的轻量型模块。它与Linux内核集成,使KVM可以直接获益于最新的Linux内核开发成果,如更好的进程调度支持、更广泛的物理硬件平台的驱动、更高的代码质量等。
KVM比较年轻,所以出生的时候就吸取了其他虚拟化技术的优点,一开始就支持硬件虚拟化技术,没有历史兼容包袱。所以KVM推出来的时候,性能非常优异。目前,KVM是OpenStack平台上首选的虚拟化引擎。国内新一代的公有云全部采用KVM作为底层的虚拟化引擎。KVM已经成为开源解决方案的主流选择。
但是作为相对较新的虚拟化方案,KVM一直没有成熟的工具可用于管理KVM服务器和客户机。不过,现在随着Libvirt、Virt-Manager等工具的逐渐完善,KVM管理工具在易用性方面的劣势已经逐渐被克服。另外,KVM仍然可以改进虚拟网络支持、虚拟存储支持、安全性、可用性、容错性、电源管理、HPC/实时支持、虚拟CPU可伸缩性、跨供应商兼容性、科技可移植性等方面。不过,现在KVM开发者社区比较活跃,也有不少大公司的工程师参与开发,我们有理由相信它的很多功能都会在不远的将来得到完善。