PCIe【6】SR-IOV

1. 概述

SR-IOV: Single Root I/O Virtualization and Sharing,其中Single Root是指单个PCIe的RC。

分类:

  1. 直通(Passthrough,PT)

  2. vGPU透传

image1

下图展示了通用的虚拟化平台配置(9.2)和使用SR-IOV和I/O虚拟化支持技术(IOV Enablers)的平台配置(9.3)。

image2

VI(Virtualization Intermediary)通常指hypervisor之类的虚拟化管理软件,数据包需要通过VI进行转发,无法直接访问物理设备,资源管理和分配主要由hypervisor完成,它负责协调不同虚拟机之间的通信和资源使用。

使用SR-IOV技术,每个虚拟机可以直接访问物理PCIe设备上的虚拟功能(VF),而不需要通过hypervisor转发数据包。数据包可以直接从虚拟机发送到对应的VF,再由VF处理后发送到物理设备,减少了I/O操作的延迟。资源分配管理上,除了hypervisor的作用外,还利用了硬件级别的地址翻译和保护机制(如ATPT)来增强资源管理和安全性。

  • AT/ATPT/ATC/ACS

  • PF/VF,均存在于物理机上。每个PCIe Device最多可支持256个Functions。每个Function都包含其单独的配置空间和BAR。

    • PF (Physical Function):这是物理设备的主要功能接口,存在于物理机上,并负责整个物理设备的管理和配置。对于单功能的PCIe设备,其所有PF一般是同一类型;而对于多功能的PCIe设备来说,其PF可能是不同的类型。

    • VF (Virtual Function):这是从PF中派生出来的轻量级PCIe功能,也存在于物理机上。每个VF可以被单独分配给一个虚拟机。从虚拟机的视角来看,VF会被识别为一个标准的PCIe设备。VF可以被不同的SI串行共享。VF从1开始编号。

Single PF with N VFs

Single PF with N VFs

2. SR-IOV Extended Capability

VF不支持I/O space。SR-IOV Extended Capability 只能存在于Type 0型的配置空间中。

System Page Szie字段由PF所使用,表示用什么页面大小映射VFPCIe地址,每个VF BAR定义的内存空间孔径要和该字段对齐。因此,改变系统页大小可能会影响VF BAR内存空间孔径尺寸。

所有和给定PF关联的VF共享同样的VF BAR(虚拟功能地址总线),并在SR-IOV扩展功能中共享一个VF MSE(Memory Space Enable)位,去控制VF的内存空间的访问。

VF共享同一VF BAR

SR-IOV Extended Capability

VF BAR0, VF BAR1, ... VF BAR5(24h...38h)

定义基地址寄存器BAR,读取方式是将所有位写入1并按照7.5.1.2.1节所述的方式读回BAR的内容。

VF的BAR[n]空间是通过PF的SR_IOV Capability中的每个VF_BAR[n]来分配的,和VF Configuration Space的BAR无关。

上述的VF_BAR[n]行为上是和常规的BAR是一样的,但是PF的VF_BAR的地址空间分配之后,代表的含义与PF自己的BAR不同。VF_BAR对应的是PF关联的每个VF的BAR空间。VF1的BAR空间完全与PF的VF_BAR地址空间相同,也就是PF的VF_BAR[0-5]空间刚好就是对应第一个VF的BAR[0-5]。后续的VFn空间则一次在VF1的BAR[n]后一次排列,且大小相同。如下图所示。

BAR Spacd Example

posted @ 2025-07-28 18:49  midorii  阅读(74)  评论(0)    收藏  举报