附录 G. 为 PCI 透传配置一个主机
通过启用 PCI 透传(PCI passthrough)功能,一个虚拟机可以象使用直接附加到这个虚拟机上的设备一样使用主机的设备。 为了启用 PCI 透传功能,您需要启用虚拟化扩展和 IOMMU 功能。以下步骤需要重新引导主机。如果这个主机已被附加到 Manager,请在执行以下操作时把主机设置为维护状态。
先决条件
- 确认主机硬件满足 PCI 设备透传以及分配的要求。详情请参阅 第 2.2.4 节 “PCI 设备要求”。
过程 G.1. 为 PCI 透传配置一个主机
- 在 BIOS 中启用虚拟化扩展和 IOMMU 扩展。请参阅 Red Hat Enterprise Linux 虚拟化和管理指南中的在 BIOS 中启用 Intel VT-x 和 AMD-V 虚拟化硬件扩展 章节,了解更多信息。
- 通过在将主机添加至 Manager 时选中Hostdev 透传和 SR-IOV复选框,或者通过手动编辑
grub
配置文件来启用内核中的 IOMMU 标记。- 要从管理门户启用 IOMMU 标记,请参阅管理指南中的为 Red Hat Virtualization Manager 添加一个主机和内核设置介绍 章节。
- 要手动编辑
grub
配置文件,请参阅 过程 G.2, “手动启用 IOMMU”。
- 对于 GPU 透传功能,您需要在主机和客户机系统上都进行额外的配置。相关信息请参阅管理指南中的 为 GPU 透传准备主机和虚拟机系统。
过程 G.2. 手动启用 IOMMU
- 编辑 grub 配置文件来启用 IOMMU。
注意
如果使用 IBM POWER8 硬件,则不需这一步,因为它已被默认启用。- 对于 Intel 系统,引导机器,把
intel_iommu=on
添加到grub
配置文件的GRUB_CMDLINE_LINUX
一行的最后。# vi /etc/default/grub ... GRUB_CMDLINE_LINUX="nofb splash=quiet console=tty0 ... intel_iommu=on ...
- 对于 AMD 系统,引导机器,把
amd_iommu=on
添加到grub
配置文件的GRUB_CMDLINE_LINUX
一行的最后。# vi /etc/default/grub ... GRUB_CMDLINE_LINUX="nofb splash=quiet console=tty0 ... amd_iommu=on ...
注意
如果intel_iommu=on
或amd_iommu=on
设置可以正常工作,您可以尝试把它们替换为intel_iommu=pt
或amd_iommu=pt
。pt
选项只为使用透传功能的设备启用 IOMMU,并可以提供更好的功能。但不是所有硬件都支持这个选项。如果pt
选项在您的主机上无法正常工作,请转换回使用前面的选项。如果因为硬件不支持中断重映射(interrupt remapping)导致透传失败,您可以在信任虚拟机的情况下启用allow_unsafe_interrupts
选项。因为启用allow_unsafe_interrupts
选项可能会存在通过虚拟机对主机进行 MSI 攻击的可能,因此这个选项在默认情况下没有被启用。使用以下方法启用这个选项:# vi /etc/modprobe.d options vfio_iommu_type1 allow_unsafe_interrupts=1
- 刷新
grub.cfg
文件并重启主机使这些改变生效:# grub2-mkconfig -o /boot/grub2/grub.cfg
# reboot
如果需要启用 SR-IOV 并为虚拟机分配专门的虚拟网卡,请参阅 https://access.redhat.com/articles/2335291。