1. 什么是 SR-IOV 直通?

SR-IOV 直通 是一种结合了两种虚拟化技术的 I/O 性能优化方案:

  • SR-IOV: 是一项由 PCI-SIG 组织标准化的硬件技术。它允许一个物理 PCIe 设备(如网卡、GPU)将自己“分割”成多个独立的、轻量级的 虚拟功能
  • 直通: 是一种虚拟化方法,它将一个物理设备完全分配给一个虚拟机,绕过宿主机 Hypervisor 的模拟层。

SR-IOV 直通 就是将物理设备通过 SR-IOV 技术创建出的 VF 直接分配给虚拟机使用。虚拟机获得对 VF 的完全控制权,其 I/O 数据路径完全绕过宿主机内核和 Hypervisor,直接与硬件交互。


2. 核心概念:PF 与 VF

要理解 SR-IOV,必须先明白两个核心概念:

  • 物理功能:

    • 这是完整的物理设备实体,拥有全部 PCIe 功能。
    • 通常由宿主机操作系统中的标准设备驱动程序控制。
    • PF 负责全局管理和配置,包括创建、配置和管理 VF
    • 只有 PF 才能执行设备重置、SR-IOV 功能启用等特权操作。
  • 虚拟功能:

    • 它是从 PF 衍生出来的一个轻量级 PCIe 功能。
    • 每个 VF 看起来就像一个独立的物理设备,拥有自己独立的 配置空间、队列、中断 等关键资源。
    • VF 可以被直接分配给一个虚拟机。
    • 关键点: VF 共享 PF 的物理资源(如端口、ASIC),但其数据通路是隔离和独立的。一个 VF 的故障不会影响其他 VF 或 PF。

一个支持 SR-IOV 的物理设备(如一张网卡)可以创建一个 PF 和多个 VF(数量由硬件决定,例如 64、128 或 256个)。然后,这些 VF 可以被分配给不同的虚拟机。


3. 工作原理与数据流对比

为了理解 SR-IOV 直通为何高效,我们将其与传统虚拟化 I/O 进行对比。

传统虚拟化 I/O
  1. 模拟设备: Hypervisor 模拟一个常见的、兼容性好的软件设备(如 e1000 网卡)。
  2. 前端/后端驱动:
    • 虚拟机内部安装对应的“前端”驱动。
    • Hypervisor 中运行对应的“后端”驱动。
  3. 数据流:
    1. 虚拟机中的应用程序发起 I/O 请求。
    2. 前端驱动将请求通过虚拟总线(如 virtio)发送给后端驱动。
    3. 后端驱动在宿主机内核中接收请求,并将其转换为对真实物理设备的调用。
    4. 物理设备处理请求。
    5. 返回的数据再沿原路返回:物理设备 -> 宿主机后端驱动 -> 虚拟机前端驱动 -> 应用程序。
  4. 性能瓶颈: 这个过程涉及多次 上下文切换内存拷贝。每次从虚拟机切换到 Hypervisor 都会产生一次 VM Exit,这是巨大的性能开销。
SR-IOV 直通
  1. VF 分配: 管理员通过 Hypervisor 的管理工具(如 libvirt)将一个 VF 直接分配给目标虚拟机。
  2. 驱动安装: 虚拟机启动后,会像发现一个新物理设备一样发现这个 VF,并安装与该物理设备型号完全相同的 标准驱动
  3. 数据流:
    1. 虚拟机中的应用程序发起 I/O 请求。
    2. VM 内的标准驱动直接与分配给它的 VF 硬件进行通信。
    3. 数据通过 DMA 直接从 VF 写入或读出虚拟机的内存空间。
    4. 整个过程完全在虚拟机内部和硬件之间完成,不经过 Hypervisor。

4. 关键优势:为什么能“完全避免退出”?

您提到的“完全避免退出”是 SR-IOV 直通的核心优势。这里的“退出”特指 VM Exit

  • VM Exit 是什么? 当虚拟机需要执行一个特权指令或访问一个它无权直接访问的物理资源时,CPU 会暂停虚拟机的运行,将控制权交还给 Hypervisor,由 Hypervisor 来模拟这个操作。这个过程就是 VM Exit。它是虚拟化开销的主要来源之一。

  • SR-IOV 如何避免退出?

    1. 硬件辅助的 DMA 重映射: 现代 CPU 支持 VT-d 技术。它允许 Hypervisor 为每个虚拟机配置一个 IOMMU 映射表。
    2. 直接内存访问: 当 VF 需要进行 DMA 操作时,IOMMU 会介入。VF 使用的是“客户物理地址”,IOMMU 会在硬件层面 将其转换为“主机物理地址”。
    3. 结果: VF 可以直接、安全地访问它所属虚拟机的内存,而不需要 Hypervisor 的介入来翻译地址或保护宿主机内存。因为整个地址翻译和内存保护是由 IOMMU 硬件完成的,所以不需要产生 VM Exit。

简而言之: 在 I/O 数据路径上,从数据包到达网卡,到被放入虚拟机内存的整个过程中,Hypervisor 是完全不参与的。虚拟机驱动直接对硬件寄存器进行读写,硬件直接对虚拟机内存进行 DMA,IOMMU 负责安全和隔离。因此,实现了“零 Hypervisor 开销”和“完全避免退出”


5. SR-IOV 直通的优缺点

优点:
  1. 极致的 I/O 性能: 延迟最低,吞吐量最高,CPU 占用率最低。性能无限接近物理机。
  2. 降低主机 CPU 负载: 将网络或存储处理任务完全下放到硬件和虚拟机,解放了宿主机的 CPU。
  3. 近乎原生的功能支持: 虚拟机可以使用设备的所有高级硬件功能(如硬件卸载、RDMA等),因为它在使用标准的硬件驱动。
缺点:
  1. 失去迁移灵活性: 这是最大的缺点。因为虚拟机与特定物理硬件绑定,你无法进行 实时迁移。在迁移前,必须先解除 VF 的绑定。
  2. 硬件依赖: 需要物理设备、主板芯片组和 CPU 都支持 SR-IOV 和 VT-d。
  3. VF 数量限制: 一个物理设备能创建的 VF 数量是有限的,限制了能享受此技术的虚拟机数量。
  4. 管理复杂性: 配置比传统虚拟网络(如 Linux Bridge, OVS)更复杂。
  5. 网络策略实施困难: 在宿主机层面无法看到或控制直通设备的流量,这使得实施防火墙、QoS、监控等网络策略变得困难。通常需要在虚拟机内部或物理交换机上实施。

6. 典型应用场景

  • 高性能计算与科学计算: 需要极低延迟和超高带宽的节点间通信。
  • 电信与网络功能虚拟化: vCPE, vRouter 等,需要处理大量数据包转发。
  • 金融交易系统: 微秒级的延迟至关重要。
  • GPU 虚拟化: 将 GPU 的 VF 分配给虚拟机,用于虚拟桌面、AI 训练等图形密集型应用。
  • 高性能存储: 结合 NVMe SR-IOV 控制器,为虚拟机提供接近本地的存储性能。

总结

SR-IOV 直通 通过将硬件资源“切片”并直接分配给虚拟机,结合 IOMMU 的硬件辅助,成功地将 Hypervisor 从关键的 I/O 数据路径中移除。这使得虚拟机能够以近乎零开销的方式直接与硬件对话,从而实现了“完全避免退出”和极致的 I/O 性能。它是追求极致性能场景下的终极武器,但代价是牺牲了虚拟化的一些核心灵活性,如实时迁移。

Logo

鲲鹏昇腾开发者社区是面向全社会开放的“联接全球计算开发者,聚合华为+生态”的社区,内容涵盖鲲鹏、昇腾资源,帮助开发者快速获取所需的知识、经验、软件、工具、算力,支撑开发者易学、好用、成功,成为核心开发者。

更多推荐