3.3. 虚拟化硬件设备

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

3.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 中作为技术预览。

注意

如需了解更多与 KVM 存储相关的信息,请参阅第 3.4 节 “储存”

3.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 客机上手动安装。

注意

关于使用半虚拟化设备和驱动的更多信息,请参照《Red Hat Enterprise Linux 7 虚拟化部署与管理指南 》。
半虚拟化网络设备(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.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 的分配。

注意

关于 VFIO 设备分配的更多信息,请参照《Red Hat Enterprise Linux 7 虚拟化部署与管理指南 》。
USB 传递
KVM hyperviso 支持把主机系统上的 USB 设备连接到虚拟机。USB 设备分配允许客机拥有在执行特定任务时有专有访问 USB 设备的权利。这就象 USB 设备物理地连接到虚拟机上一样。

注意

关于 USB 传递的更多信息,请参照《Red Hat Enterprise Linux 7 虚拟化部署与管理指南 》。
SR-IOV
SR-IOV (Single Root I/O Virtualization)是一个 PCI 快捷标准,把单一物理 PCI 功能扩展到同分散的虚拟化功能(VF)一样共享 PCI 资源。通过 PCI 设备分配,每个功能可以被不同虚拟机使用。
支持 SR-IOV 的 PCI-e 设备提供一个单一根功能(如单一以太网接口),并把多个各自分离的虚拟设备作为独特 PCI 设备功能。每个虚拟化设备都可能有自身独特的 PCI 配置空间、内存映射的寄存器以及单独的基于 MSI 的中断系统。

注意

关于 SR-IOV 更多信息,请参照《Red Hat Enterprise Linux 7 虚拟化部署与管理指南 》。
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.3.4. 客机 CPU 型号

CPU 型号 ”(CPU model)规定了哪些主机 CPU 功能对客机操作系统有效。 qemu-kvmlibvirt 包含了几种当前处理器型号的定义,允许用户启用仅在新型 CPU 型号中可用的 CPU 功能。 对客机有效的的 CPU 功能取决于主机 CPU 的支持、内核以及 qemu-kvm 代码。
为了使虚拟机可以在具有不同 CPU 功能集的主机间安全地进行迁移,qemu-kvm 在默认状态下不会把主机 CPU 的所有功能都提供给客机操作系统,而是根据所选的 CPU 型号来为虚拟机提供相关的 CPU 功能。如果虚拟机启用了某个 CPU 功能,则此虚拟机无法迁移到不支持向客机提供此功能的主机上。

注意

关于客机 CPU 型号的更多信息,请参照《Red Hat Enterprise Linux 7 虚拟化部署与管理指南 》。

为了尽快向用户提供最新的信息,本文档可能会包括由机器自动从英文原文翻译的内容。如需更多信息,请参阅此说明。