PCIe【6】SR-IOV
1. 概述
SR-IOV
: Single Root I/O Virtualization and Sharing,其中Single Root是指单个PCIe的RC。
分类:
-
直通(Passthrough,PT)
-
vGPU透传
下图展示了通用的虚拟化平台配置(9.2)和使用SR-IOV和I/O虚拟化支持技术(IOV Enablers)的平台配置(9.3)。
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
2. SR-IOV Extended Capability
VF不支持I/O space。SR-IOV Extended Capability 只能存在于Type 0型的配置空间中。
System Page Szie
字段由PF
所使用,表示用什么页面大小映射VF
的PCIe
地址,每个VF BAR
定义的内存空间孔径要和该字段对齐。因此,改变系统页大小可能会影响VF BAR
内存空间孔径尺寸。
所有和给定PF
关联的VF
共享同样的VF BAR
(虚拟功能地址总线),并在SR-IOV
扩展功能中共享一个VF MSE
(Memory Space Enable)位,去控制VF
的内存空间的访问。
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]后一次排列,且大小相同。如下图所示。