实施 SR-IOV 的硬件注意事项

Red Hat Virtualization 4.4

使用 Red Hat Virtualization 实施 SR-IOV 的硬件注意事项

Red Hat Virtualization Documentation Team

Red Hat Customer Content Services

摘要

本文档概述了使用 Red Hat Enterprise Linux 实施 SR-IOV 的硬件注意事项,以及 Red Hat Virtualization 的设备分配。

第 1 章 简介

这是显示如何在 Red Hat Virtualization 上设置和配置 SR-IOV 的一系列主题中的一个。

1.1. SR-IOV 的硬件注意事项

单根 I/O 虚拟化(SR-IOV)是一个硬件引用,它允许将单个 PCI Express(PCIe)端点用作多个单独的设备。这通过引入两个 PCIe 功能来实现:物理功能(PF)和虚拟功能(VF)。

物理功能是包括 SR-IOV 功能的传统 PCIe 功能,具有对 PCIe 设备(包括数据移动)的完整配置和管理功能。每个 PCIe 设备可以有一个 到 8 个独立的 PF。

虚拟功能是轻量级 PCIe 功能,包含数据移动和最少配置资源集所需的资源。可以在每个 PF 上创建多个 VF,每个 PF 可以支持不同的 VF 数量。允许的 VF 总数依赖于 PCIe 设备厂商,在设备之间是不同的。

PCIe 规格通过实现备选路由 ID 弃用(ARI)实现更大的 VF 数,它可以在 PCIe 标头中重新生成设备编号字段,允许超过 8 个功能。这个转换功能依赖于该设备的 PCIe 设备和端口(无论是根端口还是交换机),支持 ARI。

系统固件(BIOS 或 UEFI)为 PCIe 拓扑分配资源,包括内存、I/O 端口和 PCIe 总线号码范围。因此,SR-IOV 必须被固件支持并启用才能分配足够的资源。

1.1.1. 概述

  • 固件(BIOS 或 UEFI)必须支持 SR-IOV。检查默认情况下是否启用扩展。如果没有,请手动启用。这与启用虚拟化扩展(VT-d 或 AMD-Vi)类似。具体详情请参考供应商手册。
  • 根端口或立即由 PCIe 设备(如 PCIe 交换机)的上游端口必须支持 ARI。
  • PCIe 设备必须支持 SR-IOV。

请参阅供应商规格和数据表,确认硬件是否符合这些要求。

lspci -v 命令可用于打印系统上已安装的 PCI 设备的信息。

1.2. 设备分配的硬件注意事项

设备分配提供了将虚拟客户端直接分配给 PCIe 设备的能力,为客户机提供接近原生的性能。在与 SR-IOV 结合使用时,虚拟客户端会直接分配 VF。这样,可以将多个虚拟客户机直接分配给一个 PCIe 设备的 VF。

SR-IOV 不需要启用将虚拟机直接分配给 PCIe 设备,也没有设备分配唯一应用程序以创建 VF,但这两种功能是补充的,并且有额外的硬件注意事项。

设备分配需要在 CPU 和固件中支持 I/O 内存管理单元(IOMMU)。IOMMU 在 I/O 虚拟地址(IOVA)和物理内存地址之间转换。这允许虚拟客户机使用客户机物理地址对设备进行编程,然后由 IOMMU 转换为主机物理地址。

IOMMU 组是可与系统中所有其他设备隔离的一组设备。IOMMU 组代表 IOMMU granularity 的最小设备集合,以及系统中所有其他 IOMMU 组之间的隔离。这允许 IOMMU 区分事务和 IOMMU 组外的设备之间的直接内存访问(DMA)和 IOMMU 控件。

在虚拟客户端和 PCIe 设备的虚拟功能之间隔离事务是设备分配的基础。在 PCIe 和服务器规格中定义的访问控制服务(ACS)功能是维护 IOMMU 组内隔离的硬件标准。如果没有原生 ACS,否则来自硬件厂商的确认,IOMMU 组中的任何多功能都会在 IOMMU 之外的功能之间公开对等的 DMA,将 IOMMU 组扩展为包括缺乏适当隔离的功能。

对于服务器的根端口,还建议对原生 ACS 的支持,否则这些端口上安装的设备将被分组在一起。root 端口、基于处理器(northbridge)根端口和基于控制器 hub 的 root 端口(southbridge)根端口有两个变量关系。如上所述,如果设备分配与 SR-IOV 结合使用,而虚拟客户机被分配给 VF,则这些端口必须同时支持 ACS 和 ARI。

Intel 的 Xeon 处理器 E5 系列、Xeon 处理器 E7 系列和 High End Desktop Processors 包括基于处理器的根端口上原生 ACS 支持。

Intel Platform Controller Hub(PCH)PCI Express 根端口当前不支持 ACS 或使用非标准 ACS 实施,从而对通过这些根端口连接的设备进行精细隔离。其中许多根端口确实支持 ACS 等效功能。Red Hat Enterprise Linux 7.3 内核包括对 X79、X99、X99、5 系列到 9 系列以及 100-series PCI Express 芯片组启用此 ACS 等效功能的支持。

在安装 PCIe 设备时,请参阅厂商规格以确定基于处理器的和基于控制器的 root 端口,以确保 root 端口支持 ACS。

另外,I/O 拓扑中的任何 PCIe 交换机或桥接也需要 ACS 支持,否则它可能会扩展 IOMMU 组。

1.2.1. 概述

  • CPU 必须支持 IOMMU(如 VT-d 或 AMD-Vi)。IBM POWER8 默认支持 IOMMU。
  • 固件必须支持 IOMMU。
  • 使用的 CPU 根端口必须支持 ACS 或 ACS 等效功能。
  • PCIe 设备必须支持 ACS 或 ACS 等效功能。
  • 建议 PCIe 设备和根端口之间的所有 PCIe 交换机和网桥均应支持 ACS。例如,如果交换机不支持 ACS,该交换机后面的所有设备共享同一个 IOMMU 组,并且只能分配到同一虚拟机。

请参阅供应商规格和数据表,确认硬件是否符合这些要求。

lspci -v 命令可用于打印系统上已安装的 PCI 设备的信息。