Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

3.4. 虚拟化硬件设备

Red Hat Enterprise Linux 7 中的虚拟化允许虚拟机将主机的物理硬件用作三种不同类型的设备:
  • 虚拟化和模拟设备
  • 半虚拟设备
  • 物理共享设备
这些硬件设备都显示为物理附加到虚拟机,但设备驱动程序以不同的方式工作。

3.4.1. 虚拟化和模拟设备

KVM 为虚拟机实施许多核心设备作为软件。这些模拟硬件设备对于虚拟化操作系统至关重要。模拟设备是完全存在于软件中的虚拟设备。
另外,KVM 提供仿真驱动程序。 它们在虚拟机和 Linux 内核(管理源设备)之间形成转换层。设备级别指令由 KVM 管理程序完全转换。Linux 内核识别的相同类型(存储、网络、键盘或鼠标)的任何设备都可用作模拟驱动程序的后备源设备。
虚拟 CPU(vCPU)
在 Red Hat Enterprise Linux 7.2 及更高版本中,主机系统最多可显示 240 个虚拟 CPU(vCPU),这些虚拟 CPU 可供虚拟客户机使用,无论主机 CPU 的数量是什么。这在 Red Hat Enterprise Linux 7.0 中从 160 个。
模拟系统组件
以下核心系统组件被模拟,以提供基本的系统功能:
  • Intel i440FX 主机 PCI 网桥
  • PIIX3 PCI 到 ISA 网桥
  • PS/2 mouse 和键盘
  • EvTouch USB 图形表t
  • PCI UHCI USB 控制器和虚拟化 USB hub
  • 模拟串行端口
  • EHCI 控制器、虚拟化 USB 存储和 USB 鼠标
  • USB 3.0 xHCI 主机控制器(在 Red Hat Enterprise Linux 7.3 中技术预览)
模拟存储驱动程序
存储设备和存储池可以使用模拟驱动程序将虚拟机附加存储设备。客户机使用模拟存储驱动程序来访问存储池。
请注意,与所有虚拟设备一样,存储驱动程序不是存储设备。驱动程序用于将后备存储设备、文件或存储池卷附加到虚拟机。后备存储设备可以是任意类型的存储设备、文件或存储池卷。
模拟的 IDE 驱动程序
KVM 提供两个仿真 PCI IDE 接口。模拟的 IDE 驱动程序可用于将多达四个虚拟化 IDE 硬盘或虚拟 IDE CD-ROM 驱动器的任意组合附加到每个虚拟机。模拟 IDE 驱动程序也用于虚拟化 CD-ROM 和 DVD-ROM 驱动器。
模拟软盘驱动器驱动程序
模拟软盘驱动器驱动程序用于创建虚拟化软盘驱动器。
模拟声音设备
以下客户端操作系统支持模拟(Intel) HDA 声音设备 intel-hda
  • Red Hat Enterprise Linux 7,对于 AMD64 和 Intel 64 架构
  • Red Hat Enterprise Linux 4、5 和 6,用于 32 位 AMD 和 Intel 构架以及 AMD64 和 Intel 64 构架
注意
以下模拟声音设备也可用,但不建议您因为某些客户机操作系统的兼容性问题造成的:
  • ac97,一个模拟的 Intel 82801AA AC97 Audio 兼容声卡
模拟图形卡
提供以下模拟图形卡。
  • Cirrus CLGD 5446 PCI VGA 卡
  • 带有 Bochs VESA 扩展的标准 VGA 图形卡(硬件级别,包括所有非标准模式)
客户机可使用独立计算环境(SPICE)协议或虚拟网络计算(VNC)系统的简单协议连接到这些设备。
模拟网络设备
提供了以下两个模拟网络设备:
  • e1000 设备模拟 Intel E1000 网络适配器(Intel 82540EM、82573L、82544GC)。
  • rtl8139 设备模拟一个 Realtek 8139 网络适配器。
模拟 watchdog 设备
watchdog 可以用来在虚拟机过载或无响应时自动重新引导虚拟机。
Red Hat Enterprise Linux 7 提供以下模拟 watchdog 设备:
  • i6300esb 是模拟的 Intel 6300 ESB PCI watchdog 设备。它支持客户机操作系统红帽企业 Linux 6.0 版及以上版本,是建议使用的设备。
  • ib700,一个模拟的 iBase 700 ISA watchdog 设备。只有使用 Red Hat Enterprise Linux 6.2 及更高版本的客户端才支持 ib700 watchdog 设备。
对于 Red Hat Enterprise Linux 6.2 及更高版本,这两个 watchdog 设备都被支持 32 位和 64 位 AMD 和 Intel 构架。

3.4.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 Linux 6.0 及更高版本中包含半虚拟化设备驱动程序。
注意
有关使用半虚拟化设备和驱动程序的更多信息,请参阅 Red Hat Enterprise Linux 7 虚拟化部署和管理指南
半虚拟网络设备(virtio-net)
半虚拟设备是一个虚拟网络设备,它为虚拟机提供网络访问, 提高了 I/O 性能并降低延迟。
半虚拟块设备(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 及更高版本
半虚拟时钟
使用时间戳计数器(TSC)作为时钟源的客户机可能会遭遇计时问题。KVM 通过为客户机提供半虚拟化时钟,可解决没有恒定时间戳计数器的主机。另外,半虚拟时钟还有助于在客户机运行睡眠(S3)或挂起到 RAM 操作后进行时间调整。
半虚拟串行设备(virtio-serial)
半虚拟设备是面向字节流设备,在主机的用户空间和客户机用户空间之间提供简单的通信接口。
balloon 设备(virtio-balloon)
Balloon 设备可指定虚拟机的 RAM 的一部分,不被使用(称为"撤销 "操作 的进程),这样便可释放该内存供该主机使用(或供该主机上的其他虚拟机)使用。当虚拟机再次需要内存时,可以暂停 balloon,主机可以将 RAM 重新分发到虚拟机。
半虚拟化随机数生成器(virtio-rng)
半虚拟化随机数生成器可让虚拟机直接从主机中收集熵或随机数,以便用于加密数据和安全性。虚拟机通常会耗尽熵,因为典型的输入(如硬件使用量)不可用。来源熵可能非常耗时。virtio-rng 通过将熵直接从主机注入客户虚拟机来加快这个过程的速度。
半虚拟图形卡(QXL)
半虚拟化图形卡与 QXL 驱动程序配合使用,提供从远程主机显示虚拟机图形的有效方法。 使用 SPICE 需要 QXL 驱动程序。

3.4.3. 物理主机设备

某些硬件平台可让虚拟机直接访问各种硬件设备和组件。虚拟化中的此过程称为 设备分配,或者也称为 passthrough
VFIO 设备分配
虚拟功能 I/O(VFIO)是 Red Hat Enterprise Linux 7 中的新内核驱动程序,它为虚拟机提供对物理硬件的高性能访问。
VFIO 将主机系统上的 PCI 设备直接附加到虚拟机,使客户机能够为一系列任务提供对 PCI 设备的独占访问权限。这可让 PCI 设备出现,并像物理附加到客户机虚拟机一样操作。
VFIO 通过将设备分配设备从 KVM 管理程序中移出设备分配,并在内核级别强制实施设备隔离,从而改进了以前的 PCI 设备分配架构。VFIO 提供更好的安全性,与安全引导兼容。它是 Red Hat Enterprise Linux 7 中的默认设备分配机制。
VFIO 在 Red Hat Enterprise Linux 7 中将分配的设备数量增加到 32,从 Red Hat Enterprise Linux 6 的最大 8 个设备增加到 32。VFIO 还支持分配 NVIDIA GPU。
注意
有关 VFIO 设备分配的更多信息,请参阅 Red Hat Enterprise Linux 7 虚拟化部署和管理指南
USB、PCI 和 SCSI 透传
KVM 管理程序支持将主机系统上的 USB、PCI 和 SCSI 设备附加到虚拟机。USB、PCI 和 SCSI 设备分配使得设备显示为和行为,就像物理附加到虚拟机一样。因此,它为客户机提供了对这些设备的独占访问权限,以实现各种任务使用。
注意
有关 USB、PCI 和 SCSI 透传的更多信息,请参阅 Red Hat Enterprise Linux 7 虚拟化部署和管理指南
SR-IOV
SR-IOV(Single Root I/O 虚拟化)是一个 PCI Express(PCI-e)标准,它扩展了单个物理 PCI 功能,作为单独的 虚拟功能 (VF)共享其 PCI 资源。每个功能都可通过 PCI 设备分配的不同虚拟机使用。
一个支持 SR-IOV 的 PCI 设备提供了一个单根功能(例如,单个以太网端口),并将多个不同的虚拟设备显示为唯一的 PCI 设备功能。每个虚拟设备都有自己的唯一的 PCI 配置空间、内存映射的寄存器以及单独的 MSI 的中断。
注意
有关 SR-IOV 的更多信息,请参阅 Red Hat Enterprise Linux 7 虚拟化部署和管理指南
NPIV
N_Port ID 虚拟化(NPIV)是某些光纤通道设备提供的功能。NPIV 共享单个物理 N_Port 作为多个 N_Port ID。NPIV 为 SR-IOV 为 PCIe 接口提供的光纤通道主机总线适配器(HBA)提供了类似的功能。使用 NPIV 时,可将虚拟机提供到存储区域网络(SAN)的虚拟光纤通道启动器。
NPIV 可以利用企业级存储解决方案提供高密度虚拟化环境。

3.4.4. 客户机 CPU 型号

CPU 型号 定义哪些主机 CPU 功能公开给客户端操作系统。KVMlibvirt 包含很多处理器模型的定义,允许用户启用仅在较新的 CPU 模型中的 CPU 功能。可公开给客户机的 CPU 功能集取决于主机 CPU、内核和 KVM 代码的支持。
为确保在具有不同 CPU 功能集的主机间安全地迁移虚拟机,KVM 默认不将主机 CPU 的所有功能公开给客户机操作系统。相反,CPU 功能会根据所选 CPU 型号公开。 如果虚拟机启用了给定 CPU 功能,则无法将其迁移到不支持将该功能公开给客户机的主机。
注意
有关客户机 CPU 模型的更多信息,请参阅 Red Hat Enterprise Linux 7 虚拟化部署和管理指南