KVM虚拟化知识

1. 什么是虚拟化和迁移

什么是虚拟化

“虚拟化 ”是一个描述运行软件的广义计算机术语,通常体现为在单一系统上运行多个操作系统,这些操作系统同时运行,而每个操作系统又是相互独立的。大多数现行的虚拟化实现使用一个“虚拟机管理程序 ”(hypervisor),即一个软件层或子系统,该子系统控制硬件并向“客机操作系统 ”提供访问底层硬件的途径。通过向客机操作系统提供虚拟化的硬件虚拟机管理程序允许多种操作系统在相同的物理系统中运行,该虚拟机管理系统称为“客机 ”(guest),虚拟化操作系统有多种方式:

虚拟化方式

  1. 全虚拟化
    全虚拟化利用处理器的硬件特性,向客机提供底层实体系统的总抽象。这创建了新的虚拟系统,被称为一个“虚拟机 ”(virtual machine),它允许客机操作系统在无需修改的情况下运行。客机操作系统和任何在客机虚拟机器中的应用并不会察觉出虚拟化环境并正常运作。硬件支持虚拟化这项技术,用于实现在 Red Hat Enterprise Linux 中 KVM 的全面虚拟化。
  2. 半虚拟化
    半虚拟化应用一系列呈现给虚拟机的软件和数据结构,需要客机中的软件修改以使用半虚拟环境。半虚拟化包含整个内核,就像 Xen 准虚拟机,或者虚拟化 I/O 设备的驱动程序一样。
  3. 软件虚拟化(或仿真)
    软件虚拟化利用更慢的二进制转换和其他仿真技术运行未更改的操作系统。Red Hat Enterprise Linux 不支持软件虚拟化。

什么是迁移?

“迁移 ”(migration)描述了一个客体虚拟机从一个主机迁移到另一个主机的过程。鉴于虚拟机在虚拟化环境下运行,而非直接在硬件上运行,该迁移是可以实现的。迁移一个虚拟机有两种途径:即时迁移和离线迁移。

迁移类型

  1. 离线迁移
    离线迁移暂停或关闭虚拟机,接着移动一个虚拟机的内存镜像到目标主机。虚拟机在目标主机上恢复,在源主机上被虚拟机使用的内存得以释放。
  2. 即时迁移
    即时迁移是将一个活跃虚拟机从一个实体主机迁移到另一个实体主机的过程。

2. Red Hat Enterprise Linux 的 KVM 和虚拟化

何谓 KVM ?

KVM(基于内核的虚拟机,Kernel-based Virtual Machine)是为 AMD64 和 Intel 64 硬件上的 Linux 提供的完全虚拟化的解决方案,它包括在标准 Red Hat Enterprise Linux 7 内核中。KVM 可运行多种无需修改的 Windows 和 Linux 客机操作系统。 Red Hat Enterprise Linux 的 KVM 虚拟机监控程序使用 libvirt API 和 libvirt 的工具程序(如 virt-manager、virsh)进行管理。虚拟机以多线程的 Linux 进程形式运行,并通过上面提到的工具程序进行管理。

过度分配

KVM 监控程序支持系统资源“过度分配 ”(overcommitting)功能。过度分配意味着可以分配比系统中实际拥有的资源更多的虚拟化 CPU 或内存。过度分配内存允许主机充分利用物理内存来分配更多虚拟内存,从而达到提升客机密度的目的。

精简配置

“精简配置 ”(thin provisioning)允许灵活分配内存,并且为每个客机虚拟机优化可用空间。它产生一种现象,即客机物理内存比实际可用内存更多。这与过度分配功能不同,因为它只适用于存储,而不适用于 CPU 或内存分配。但是,过度分配功能所存在的风险同样适用于这个功能。

KSM

KVM hypervisor 使用的 “Kernel SamePage Merging ”(KSM)允许 KVM 客机共享相同内存页面。这些共享页一般是通用的库或其他相同的、高频使用的数据。KSM 通过避免重复的内存,使具有相同或相似客机操作系统的客机密度更大。

QEMU 客机代理

“QEMU 客机代理 ”(QEMU Guest Agent)在客机操作系统上运行,通过它,主机可以向客机操作系统发出命令。

Hyper-V 入门知识

Red Hat Enterprise Linux 7 的 KVM 实现了几个 Hyper-V 兼容功能,Windows 客机通过使用它们可以提高性能和稳定性,从而使得 Windows 客机如在微软 Hyper-V 虚拟机监控程序上运行一般。

磁盘 I/O 节流

当几个虚拟机同时运行,可能会因为使用过多磁盘 I/O 对系统性能形成干扰。KVM 中的“磁盘 I/O 节流 ”(Disk I/O throttling)对从虚拟机器向主机发出的磁盘 I/O请求作出限定 。这可以防止虚拟机过度使用共享资源,并影响其他虚拟机的性能。

自动化 NUMA 平衡

“自动化 NUMA 平衡 ”功能在不需要对 Red Hat Enterprise Linux7 虚拟机进行手工性能优化的情况下,提高 NUMA 硬件系统上运行的应用程序的性能。自动化 NUMA 平衡功能会把所执行的任务(线程或进程)移到和所需要访问的内存更接近的地方。

虚拟 CPU 热添加

虚拟 CPU (vCPU) 热添加功能可以在无需要停机的情况下,根据需要为运行的虚拟机增加处理能力。分配到虚拟机的 vCPU 可能会被添加到运行的客机上,来满足工作量需求,或维持与工作负载相关的服务等级协议 (SLA)。

3. 虚拟化硬件设备

Red Hat Enterprise Linux 7 的虚拟化功能为虚拟机提供了三种不同形式的系统设备。这三种形式包括:

  • 虚拟和仿真设备
  • 半虚拟化设备
  • 物理共享设备

这些硬件设备都被显示为物理连接到虚拟机,但设备的驱动以不同方式工作。

3.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 主机控制器(Red Hat Enterprise Linux 7.1 技术预览)

仿真声音设备

Red Hat Enterprise Linux 6.1 以上版本提供了仿真(Intel) HDA 声音设备, intel-hda。此设备由以下客机运行系统进行支持:

  • Red Hat Enterprise Linux 7,用于 x86_64 架构
  • Red Hat Enterprise Linux 6,用于 i386 和 x86_64 架构
  • Red Hat Enterprise Linux 5,用于 i386 和 x86_64 架构
  • Red Hat Enterprise Linux 4,用于 i386 和 x86_64 架构
  • Windows 7,用于 i386 和 x86_64 架构
  • Windows 2008 R2,用于 x86_64 架构
    以下仿真声音系统同样可供选择,但鉴于与固定客机运行系统兼容性问题,不推荐使用:
  • ac97,仿真 Intel 82801AA AC97 音频兼容声卡

仿真监视器设备

Red Hat Enterprise Linux 6.0 及以上版本提供了两种仿真监视器设备。监视器可以在虚拟机超载或未响应时,自动重启虚拟机。
watchdog程序包务必安装在客机上。
两种可供选择的设备为:

  • i6300esb,仿真 Intel 6300 ESB PCI 监视器设备。它支持客机操作系统 Red Hat Enterprise Linux 版本 6.0 以上,为推荐使用设备。
  • ib700,仿真 iBase 700 ISA 监视器设备。ib700监视器仅支持使用 Red Hat Enterprise Linux 6.2 以上版本的客机。

两种监视器设备均支持客机操作系统 Red Hat Enterprise Linux 6.2 以上版本的 i386 与 x86_64 架构。

仿真网络设备

两种仿真网络设备可供选择:

  • e1000
    设备仿真了 Intel E1000 网络适配器(Intel 82540EM、82573L、82544GC)。
  • rtl8139
    设备仿真了 Realtek 8139 网络适配器。

仿真储存驱动

储存驱动与储存池可以使用这些仿真设备,将储存设备与虚拟机相连。客机使用仿真储存驱动可访问储存池。

注意,同所有虚拟设备一样,储存驱动不是储存设备。对于虚拟机器,该驱动作为备用储存设备、文件或储存池容量进行使用。备用储存设备可为任何支持的储存设备、文件、或储存池容量形式。

仿真 IDE 驱动

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

仿真软盘驱动

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

仿真 AHCI 控制器

仿真 Advanced Host Controller Interface(AHCI)是 IDE 的一种替代产品。它包括在 Red Hat Enterprise Linux 7.1 中作为技术预览。

3.2 半虚拟化设备

半虚拟化为客机使用主机上的设备提供了快速且高效的通讯方式。KVM 为虚拟机提供准虚拟化设备,它使用 Virtio API 作为虚拟机监控程序和客机的中间层。

一些半虚拟化设备可以减少 I/O 的延迟,并把 I/O 的吞吐量提高至近裸机水平,而其它准虚拟化设备可以把本来无法使用的功能添加到虚拟机上。当虚拟机运行大小需要密集 I/O 操作的应用程序时,推荐使用半虚拟化设备,而不是使用仿真设备。

所有 virtio 设备都有两部分:主机设备和客机驱动。半虚拟化设备驱动允许客机操作系统访问主机系统上的物理设备。

半虚拟化设备的驱动必须安装在客机操作系统上。默认情况下,半虚拟化设备驱动包含在 Red Hat Enterprise Linux 4.7 以上版本、Red Hat Enterprise Linux 5.4 以上版本、以及 Red Hat Enterprise Linux6.0 以上版本中。半虚拟化设备驱动须在 Windows 客机上手动安装。

半虚拟化网络设备(virtio-net)

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

半虚拟化块设备(virtio-blk)

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

半虚拟化控制器设备(virtio-scsi)

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

  • Red Hat Enterprise Linux 7
  • Red Hat Enterprise Linux 6.4 以上版本。
  • Windows Server 2008(32/64 比特)
  • Windows Server 2008 R2
  • Windows 7(32/64 比特)
  • Windows Server 2012
  • Windows Server 2012 R2
  • Windows 8(32/64 比特)
  • Windows 8.1(32/64 比特)

半虚拟化时钟

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

半虚拟化串口设备 (virtio-serial)

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

气球设备(virtio-balloon)

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

半虚拟化随机数字生成器 (virtio-rng)

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

半虚拟化图形卡(QXL)

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

3.3 物理主机设备

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

VFIO 设备分配

虚拟功能 I/O(VFIO)是 Red Hat Enterprise Linux 7 中一个新的内核驱动,它为虚拟机提供了访问物理硬件的高性能。

VFIO 把主机系统上的 PCI 设备与虚拟机直接相连,允许客机在执行特定任务时有独自访问 PCI 设备的权限。这就象 PCI 设备物理地连接到客机虚拟机上一样。

通过把设备分配从 KVM 虚拟机监控系统中移出,并在内核级中强制进行设备隔离,VFIO 比以前的 PCI 设备分配有了很大的改进。VFIO 安全性更高且与安全启动兼容。在 Red Hat Enterprise Linux 7 中,它是默认的设备分配机制。

Red Hat Enterprise Linux 7 中 VFIO 把分配设备的数量从 Red Hat Enterprise Linux 6 中最多 8 个增加到 32 个。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 配置空间、内存映射的寄存器以及单独的基于 MSI 的中断系统。

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 可以提供带有企业级存储解决方案的高密度虚拟环境。

3.4 客机 CPU 型号

CPU 型号”(CPU model)规定了哪些主机 CPU 功能对客机操作系统有效。
qemu-kvmlibvirt包含了几种当前处理器型号的定义,允许用户启用仅在新型 CPU 型号中可用的 CPU 功能。 对客机有效的的 CPU 功能取决于主机 CPU 的支持、内核以及qemu-kvm代码。

为了使虚拟机可以在具有不同 CPU 功能集的主机间安全地进行迁移,qemu-kvm在默认状态下不会把主机 CPU 的所有功能都提供给客机操作系统,而是根据所选的 CPU 型号来为虚拟机提供相关的 CPU 功能。如果虚拟机启用了某个 CPU 功能,则此虚拟机无法迁移到不支持向客机提供此功能的主机上。

你可能感兴趣的:(KVM虚拟化知识)