-------本文摘自红帽官方文档

在KVM的体系结构中,虚拟机作为常规的Linux进程被执行,被标准的Linux调度程序调度。实际上,每个虚拟CPU作为常规的Linux进程。这使得KVM得益于Linux内核的所有特性。设备仿真由一个修订版的QEMU来控制。QEMU提供一个仿真的BIOS,PCI总线,USB总线和一套标准的设备,比如IDE和SCSI磁盘控制器,网卡,等等。                                                              

安全性

由于一个虚拟机是以一个Linux进程被执行,所以它可以借助于Linux内核安全模型来提供隔离和资源控制。Linux内核包含SELinux(Security-Enhanced Linux)。SELinux是由美国国家安全局为了增加强制访问控制,提供多级别,多种类的安全性而开发的一个项目。SELinux对运行在Llinux内核中的进程提供严格的资源隔离和限制。建立在SELinux基础上的sVirt项目提供可以允许系统管理员为虚拟机隔离作自定义策略的基础架构。sVirt确保一个虚拟机资源不被其它进程或虚拟机访问,系统管理员可以利用这一点定义一些细微的权限,比如将一些虚拟机组合起来分享同样的资源。任何虚拟化环境都像hypervisor本身一样安全,由于企业组织想要大氛围的部署虚拟化到他们的基础设施中,安全性就成为一个重要的关注点,甚至在云计算环境中安全性被关注得更多。Hypervisor对***来说毫无疑问成为一个诱人的目标,因为一个被攻陷的hypervisor将导致它上面的虚拟机全部奔溃。事实上,我们已经有hypervisor被攻陷的例子。SELinux和sVirt提供一个可以提供无与伦比的高级别的安全性和隔离的基础架构。

内存管理

 

KVM继承了Linux强大的内存管理特性。虚拟机的内存被存储为可以支持其他任何的Linux进程,它可以用于大页面交换,备用以获得更好的性能,它也可以用于磁盘文件共享和备用。

NUMA(非一致性内存访问)使得虚拟机可以有效地访问大容量内存。

KVM支持CPU厂商提供的最新的内存虚拟化特性,通过支持Intel的EPT(Extended Page Table)和AMD的RVI(Rapid Vitualization Indexing),KVM可以在传送指令时减少CPU的利用率和吞吐量。

通过一个叫做内核简单页面合并(Kernel Sample-page Merging,KSM)的内核特性的支持,KVM可以实现存储页面共享。

KSM浏览每个虚拟机的内存,查看有哪些虚拟机有相同的存储页面。KSM合并这些页面成为一个页面用于多个虚拟机间共享,每个虚拟机只存储一个合并后页面的备份。如果一个客户机

试图修改这个共享页面,它将被给予只属于它的那个备份。

当在一台主机上安装多台虚拟机时,在许多情况下,存储页面都可能被共享。例如,在一台window虚拟机中未使用的内存,通用的动态链接库,函数库,内核或者其他虚拟机间通用的对象。利用KSM,更多的虚拟机可以被安装在每台主机上,减少了硬件花费,增强了服务器的利用率。

硬件支持

由于KVM是Linux的一部分,它可以利用整个硬件生态系统,所以许多Linux支持的硬件设备也可以用于KVM。Linux享受这种成为由硬件厂商和开源社区组成的最大的生态系统的其中一员,在这个生态系统中,硬件厂商可以参与Linux内核的开发,以确保最新的硬件特性能迅速地被Linux内核采用,使得KVM可以用于各种各样的硬件平台。

由于新的硬件特性被Linux内核采用,KVM不需要作额外的工作。对Linux的调优操作可以立刻使KVM受益。

存储方式

KVM能够使用任何Linux支持的存储方式以存储虚拟机镜像,这些存储方式包括,本地IDE,SCSI和SATA磁盘,网络附加存储(NAS),包括NFS和SAMBA/CIFS和SAN,支持iSCSI和光纤通道。多路径I/O可以被用于提升存储吞吐量和提供冗余备份。此外,因为KVM是Linux内核的一部分,它可以利用一个可靠的被许多领先的存储厂商支持,并且已在全世界范围内用于生产部署的基础架构。

KVM还支持在共享文件系统(例如Global File System,GFS2)中的虚拟机镜像,允许虚拟机镜像被多台主机共享,或者用逻辑卷共享。

磁盘镜像支持thin provisiong允许增强存储利用率,当虚拟机需要时才分配存储而不是分配整个存储空间。

KVM的默认磁盘格式是QCOW2,这种格式支持快照,允许多个级别的快照,压缩和加密。

在线迁移

 KVM支持在线迁移,在线迁移可以将正在运行的虚拟机机在不中断服务的情况下在物理主机间迁移。在线迁移对于终端用户来说是透明的,当虚拟机被迁移到一台新的物理主机时,虚拟机仍然保持开机,网络连接正常和用户的应用程序仍然运行。

除了在线迁移外,KVM支持保存虚拟机的当前状态到磁盘中并可以存储或在一段时间后恢复该虚拟机的状态。

客户机支持

KVM支持一个大范围的客户机操作系统,从主流的操作系统,例如Linux和Windows,到其它平台,包括OpenBSD,FreeBSD,OpenSolaris,Solaris x86 和MS DOS.

在Red Hat企业版系列中,KVM以通过微软的SVVP(Server Virtualization Validation Program)认证。用户在Red Hat Enterprise Linux或Red Hat Enterprise Virtualization Hypervisor中部署Microsoft Windows Server时可以从微软获得全部的商业支持。

设备驱动程序

KVM支持混合虚拟化,把虚拟化驱动程序被安装在客户机操作系统上,允许虚拟机使用一个优化了的I/O接口而不是仿真的设备来为网络和块设备提供高性能的I/O.

KVM hypervisor使用IBM开发的VirtIO标准,Red Hat和Linux社区协同开发半虚拟化驱动程序,半虚拟化驱动程序是一个为开发设备驱动程序,允许同一套设备驱动程序被用于多种hypervisors以获得更好的客户机互操作性的hypervisor独立接口。现今许多虚拟化管理程序(hypervisors)对半虚拟化设备驱动程序提供专门的接口,这意味着客户机镜像不能在多种虚拟化管理程序间移植。由于更多的厂商采用VirtIO框架,客户机镜像将会更容易地在不同平台间转换,减少了认证测试和总体开销。

VirtIO驱动程序被包含在新的Linux内核中(2.6.25以后),被包含在Red Hat Enterprise Linux 4.8+,5.3+,在Red Hat Enterprise Linux 3 可用。

Red Hat已经对VirtIO驱动程序在Windows客户机的网络性能和磁盘I/O方面进行了改进,并且已通过了微软的WHQL(Windows Hardware Quality Labs)认证。

性能和可扩展性

KVM继承了Linux的性能和可扩展性功能,支持在虚拟机上配置多达16个虚拟CPU和256G内存,支持主机系统上配置256个CPU核心和超过1TB的内存。

改进的进程调度和资源控制

在KVM模型中,一个虚拟机(Windows 或Linux)是一个Linux进程,它被标准的Linux内核调度和管理。在过去的几年中,Linux社区改进了内核使它具有工业领先的特性,性能,稳定性,安全性和企业坚固性。Red Hat Enterprise Linux内核的当前版本支持对任何进程包括虚拟机设置相对优先级。这个优先级是对给定虚拟机的CPU,内存,网络和磁盘I/O的总体衡量标准。

`