2.1.3 比较KVM和Xen

KVM与XEN对比

XEN KVM
问世时间 2003年 2007年
支持企业 Citrix、Novell、Oracle、Sun、Redhat(RHEL5)和Virtual lron Redhat、Ubuntu等
支持的虚拟化技术 全虚拟化、半虚拟化 全虚拟化
支持架构 x86、IA64和AMD、Fujitsu、IBM、Sun等公司的ARM,以及x84/64 CPU商家和Intel嵌入式的支持 支持虚拟化的CPU
支持操作系统 UNIX、Linux和Microsoft Windows UNIX、Linux和Microsoft Windows
动态迁移 支持 支持(以前不支持)
内核支持 需要对内核打补丁 内置在内核中

IBM文档

http://www.ibm.com/developerworks/cn/linux/l-using-kvm/
https://developer.ibm.com/alert-zh/

Xen虚拟化环境在传统上提供了Linux系统上性能最高的开源虚拟化技术。Xen使用一个虚拟机管理程序来管理虚拟机和相关的资源,还支持半虚拟化,这可在“知道”自己已实现虚拟化的虚拟机中提供更高的性能。Xen提供了一个专门执行资源和虚拟管理与计划的开源虚拟机管理程序。在裸机物理硬件上引导系统时,Xen虚拟机管理程序启动一个称为Domain0或管理域的主虚拟机,该虚拟机提供了对所有在该物理主机上运行的其他虚拟机(称为 Domain1 到 DomainN,或者简单地称为 Xen Guest)的中央虚拟机管理功能。

不同于 Xen,KVM虚拟化使用Linux内核作为它的虚拟机管理程序。对KVM虚拟化的支持自2.6.20版开始已成为主流 Linux内核的默认部分。使用Linux内核作为虚拟机管理程序是KVM受到批评的一个主要方面,因为(在默认情况下)Linux内核并不符合Type 1虚拟机管理程序的传统定义—"一个小操作系统"。尽管大多数Linux发行版所提供的默认内核的确如此,但可以轻松地配置Linux内核来减少它的编译大小,以便它仅提供作为Type 1虚拟机管理程序运行所需的功能和驱动程序。Red Hat自己的Enterprise Virtualization产品仅依靠这样一种特殊配置的、相对轻量型的Linux内核来运行。但更重要的是,“小”只是一个相对的词汇,如今具有数GB内存的64位服务器可轻松地提供现代Linux内核所需的几MB空间。

KVM超越Xen成为大多数企业环境首选的开源裸机虚拟化技术,这有多个原因:

KVM支持自2.6.20版开始已自动包含在每个Linux内核中。在Linux内核3.0版之前,将Xen支持集成到Linux内核中需要应用大量的补丁,但这仍然无法保证每个可能硬件设备的每个驱动程序都能在Xen环境中正确工作。

Xen支持所需的内核源代码补丁仅提供给特定的内核版本,这阻止了Xen虚拟化环境利用仅在其他内核版本中可用的新驱动程序、子系统及内核修复和增强。KVM在Linux内核中的集成使它能够自动利用新Linux内核版本中的任何改进。

Xen要求在物理虚拟机服务器上运行一个特殊配置的Linux内核,以用作在该服务器上运行的所有虚拟机的管理域。KVM可在物理服务器上使用在该物理系统上运行的Linux VM中使用的相同内核。

Xen的虚拟机管理程序是一段单独的源代码,它自己的潜在缺陷与它所托管的操作系统中的缺陷无关。因为KVM是 Linux内核的一个集成部分,所以只有内核缺陷能够影响它作为KVM虚拟机管理程序的用途。

尽管Xen仍可提供比KVM性能更高的裸机虚拟化,但这些性能改进的价值常常比不上KVM虚拟化的简单性和易用性价值。

目前在各大公有云厂商新购买的虚拟机基本运行在KVM环境下,就连早期一直使用Xen的AWS也在2017年开始逐渐转换到KVM环境,以下是AWS基于KVM技术提供的最新示例部分性能。

lnstance Name vCPUs RAM EBS Bandwidth Network Bandwidth
c5.large 2 4 GiB Up to 2.25 Gbps Up to 10 Gbps
c5.xlarge 4 8 GiB Up to 2.25 Gbps Up to 10 Gbps
c5.2xlarge 8 16 GiB Up to 2.25 Gbps Up to 10 Gbps
c5.4xlarge 16 32 GiB 2.25 Gbps Up to 10 Gbps
c5.9xlarge 36 72 GiB 4.5 Gbps 10 Gbps
c5.18xlarge 72 144 GiB 9 Gbps 25 Gbps

KVM的虚拟化需要硬件支持(如Intel VT技术或者AMD V技术),是基于硬件的完全虚拟化,而Xen早期则是基于软件模拟的半虚拟化,新版本则是支持基于硬件支持的完全虚拟化,但Xen本身有自己的进程调度器,存储管理模块等,所以代码较为庞大

广为流传的商业系统虚拟化软件VMware ESXI系列是Full-Virtualization

2.1.4 RHEL(CentOS)对虚拟设备三种工作模式

Red Hat Enterprise Linux 7的虚拟化功能为虚拟机提供了三种不同形式的系统设备。这些硬件设备都被显示为物理连接到虚拟机,但设备的驱动以不同方式工作。这三种形式包括:
虚拟和仿真设备
半虚拟化设备
物理共享设备

2.1.4.1 虚拟和仿真设备

KVM实现了虚拟机的多个核心设备。这些仿真硬件设备对虚拟化操作系统至关重要。仿真设备即完全使用软件实现的虚拟化设备

仿真驱动可能使用物理设备,或虚拟化软件设备。仿真驱动是虚拟机和Linux内核(管理源设备)间的“翻译层”。设备层的指示会由KVM虚拟机监控程序进行完全转换。任何可以被Linux内核识别的同类设备(储存、网络、键盘和鼠标),都可以作为仿真驱动的后端源设备

虚拟化 CPU (vCPU):无论主机 CPU的数量有多少,主机系统都可以为客机提供多达 160 个虚拟化CPU (vCPU)

仿真图形设备:有两种仿真图形设备可供选择。这类设备可以使用SPICE(simple Protocol for Independent computing Environments)协议或VNC进行连接;
    Cirrus CLGD 5446 PCI VGA卡(使用cirrus设备)
    标准VGA图形卡,带有Bochs VESA扩展程序(硬件等级,包括所有非标准模式)

仿真系统组件:仿真以下核心系统组件来提供基本系统功能:
    Intel i440FX主机 PCI网桥,PIIX3 PCI 到 ISA 的网桥,PS/2鼠标和键盘,EVTouch USB图形平板设备,PCI UHCI USB 控制器与虚拟化 USB集线器,仿真串口,EHCI控制器,虚拟化USB存储和USB鼠标,USB 3.0 XHCI主机控制器

仿真声音设备
仿真监视器设备:提供了两种仿真监视器设备。监视器可以在虚拟机超载或未响应时,自动重启虚拟机。watchdog程序包务必安装在客机上
两种可供选择的设备为:
    i6300esb,仿真 Intel 6300 ESB PCI监视器设备。为推荐使用设备
    ib700,仿真 iBase 700 ISA监视器设备

仿真网络设备
两种仿真网络设备可供选择:
    e1000设备仿真了 Intl E1000网络适配器(Intel 82540EM、82573L、82544GC)
    rt18139设备仿真了Realtek 8139 网络适配器。

仿真储存驱动:储存驱动与储存池可以使用这些仿真设备,将储存设备与虚拟机相连。客机使用仿真储存驱动可访问储存池
    注意,同所有虚拟设备一样,储存驱动不是储存设备。对于虚拟机器,该驱动作为备用储存设备、文件或储存池容量进行使用。备用储存设备可为任何支持的储存设备、文件、或储存池容量形式

仿真IDE驱动:KVM提供两种仿真 PCI IDE接口。仿真 IDE 驱动可以用于将多达四个虚拟化 IDE硬盘或虚拟化 IDE光盘驱动组合与每台虚拟机相连接。仿真 IDE 驱动同样可用于虚拟化 CDROM和 DVD-ROM驱动

仿真软盘驱动:仿真软盘驱动用于创造虚拟化软驱

仿真AHCI控制器:仿真 Advanced Host controller Interface (AHCI)是 IDE的一种替代产品

2.1.4.2 半虚拟化设备

半虚拟化设备:半虚拟化为客机使用主机上的设备提供了快速且高效的通讯方式。KVM为虚拟机提供准虚拟化设备,它使用Virtio API作为虚拟机监控程序和客机的中间层
一些半虚拟化设备可以减少IO的延迟,并把I/O的吞吐量提高至近裸机水平,而其它准虚拟化设备可以把本来无法使用的功能添加到虚拟机上。当虚拟机运行大小需要密集I/O操作的应用程序时,推荐使用半虚拟化设备,而不是使用仿真设备
所有virtio设备都有两部分:主机设备和客机驱动。半虚拟化设备驱动允许客机操作系统访问主机系统上的物理设备
半虚拟化设备的驱动必须安装在客机操作系统上。半虚拟化设备驱动须在Windows客机上手动安装

半虚拟化网络设备(virtio-net):半虚拟化网络设备是虚拟化网络设备,它为虚拟机提供了网络访问能力,并可以提供网络性能及减少网络延迟。

半虚拟化块设备(virtio-blk):半虚拟化块设备是高性能虚拟化储存设备,它可以为虚拟机提供高性能、低延迟的I/O存储。半虚拟化块设备由虚拟机监控程序支持,与虚拟机相连(软盘驱动除外,它只能被仿真)

半虚拟化控制器设备(virtio-scsi):半虚拟化SCSI控制器设备是一种更为灵活且可扩展的virtio-blk替代品。virtio-scsi客机能继承目标设备的各种特征,并且能操作几百个设备,相比之下,virtio-blk仅能处理 28

半虚拟化时钟:使用时间戳计数器(TSC,Time Stamp Counter)作为时钟源的客机可能会出现与时间相关的问题。KVM 在主机外围工作,这些主机在向客机提供半虚拟化时间时没有固定的TSC。此外,半虚拟化时钟会在客机运行S3或挂起RAM时帮助调整所需时间。半虚拟化时钟不支持 windows客机

半虚拟化串口设备(virtio-serial):半虚拟化串口设备是面向比特流的字符流设备,它为主机用户空间与客机用户空间之间提供了一个简单的交流接口

气球设备(virtio-balloon):气球(balloon)设备可以指定虚拟机的部分内存为没有被使用(这个过程被称为气球“充气”-inflation),从而使这部分内存可以被主机(或主机上的其它虚拟机〉使用。当虚拟机这部分内存时,气球可以进行"放气"(deflated),主机就会把这部分内存重新分配给虚拟机

半虚拟化随机数字生成器 (virtio-rng:半虚拟化随机数字生成器使虚拟机可以直接从主机收集熵或随意值来使用,以进行数据加密和安全。因为典型的输入数据(如硬件使用情况)不可用,虚拟机常常急需熵。取得熵很耗时;virtiorng通过直接把熵从主机注入客机虚拟机从而使这个过程加快

半虚拟化图形卡(QXL):半虚拟化图形卡与QXL驱动一同提供了一个有效地显示来自远程主机的虚拟机图形界面。SPICE需要QXL驱动

2.1.4.3 透传物理主机设备

物理主机设备:特定硬件平台允许虚拟机直接访问多种硬件设备及组件。在虚拟化中,此操作被称为“设备分配”(device assignment)。设备分配又被称作“传递”(passthrough)

VFIO 设备分配:虚拟功能I/O(VFIO)是 RHEL 7中一个新的内核驱动,它为虚拟机提供了高性能的访问物理硬件。VFIO把主机系统上的PCI设备与虚拟机直接相连,允许客机在执行特定任务时有独自访问PCI设备的权限。这就像PCI设备物理地连接到客机虚拟机上一样。通过把设备分配从KVM虚拟机监控系统中移出,并在内核级中强制进行设备隔离,VFIO比以前的PCI 设备分配有很大改进。VFIO安全性更高。VFIO也支持对NVIDIA GPU的分配

USB传递:KVM hyperviso支持把主机系统上的 USB 设备连接到虚拟机。USB设备分配允许客机拥有在执行特定任务时有专有访问USB设备的权利。这就像USB设备物理地连接到虚拟机上一样

SR-IOV:SR-IOV(Single Root I/O Virtualization)是一个PCI快捷标准,把单一物理PCI功能扩展到同分散的虚拟化功能(VF)一样共享PCI资源。通过PCI设备分配,每个功能可以被不同虚拟机使用。支持SR-IOV的PCI-e设备提供一个单一根功能(如单一以太网接口),并把多个各自分离的虚拟设备作为独特PCI设备功能。每个虚拟化设备都可能有自身独特的PCI配置空间、内存映射的寄存器以及单独的基于MST的中断系统

NPIV:N_Port ID Virtualization (NPIV)是对光纤通道设备有效的功能。NPIV共享单一物理N_Port作为多个 N_Port ID。NPIV为HBA(光纤通道主机总线适配器,Fibre channel Host Bus Adapter)提供和SR-IOV为PCIe接口提供的功能相似的功能。有了NPIV,可以为SAN(存储区域网络,Storage Area Network)提供带有虚拟光纤通道发起程序的虚拟机。NPIV可以提供带有企业级存储解决方案的高密度虚拟环境

2.1.5 KVM集中管理与控制

http://www.linux-kvm.org/page/Management_Tools

  • oVirt
    功能强大,是Redhat虚拟化管理平台RHEV的开源版本。
    https://www.ovirt.org/
  • WebVirtMgr
    https://www.webvirtmgr.net/
    virt-manager的Web模式的替代品
  • OpenStack
    最主流的开源虚拟化管理平台
  • Proxmox virtualization environment
    简称PVE,是一个开源免费的基于linux的企业级虚拟化方案,功能不输专业收费的VMware。是一个完整的企业虚拟化开源平台。借助内置的Web界面,您可以轻松管理VM和容器,软件定义的存储和网络,高可用性集群以及单个解决方案上的多个开箱即用工具。