参考文档
PCI Local Bus Specification, Revision 3.0
PCI Bus Power Management Interface Specification, Revision 1.2
PCI Express Base Specification, Revision 2.1
Multi-Root I/O Virtualization and Sharing Specification, Revision 1.0
Address Translation and Sharing, Revision 1.1
1. 概述
SR-IOV出现前,虚拟化的缺点:
在SI和硬件间,VMM截获并模拟IO;降低了IO效率,且消耗宿主机CPU和内存资源。
TA: Translation Agent;可选的;用于将TLP中的总线地址转换为存储器物理地址,与rc功能重叠;
ATPT: Address Translation and Protection Table
位于rc和系统内存之间。
疑问:TA和APTP与VT-d无关?
ATC: 位于TA或pcie设备内(如果存在)
ACS:Access Control Service;可选的;
一个pcie设备中可以有多个功能(最多8个;使能ARI时,最多256个);每个功能都有独立的配置和BAR空间;
pcie设备sr-iov capability中的MSE比特如果被清零,则所有VF的存储空间都不能访问了;
ARI使能时,一个pcie设备中最多有256个PF;VF的总线号可以是0-255之间;
疑问:那一个pcie设备最多有多少个VF?
答:理论上限65536 - pcie总线中已占用的route id。page 22
疑问:软件配置附加总线号?如果软件没有配置足够的附加总线号,则使用到额外附加总线时的VF将不可见。
疑问:宿主机总线枚举阶段,VF的总线号和bar空间就分配好了吗?
2. 初始化和资源分配
2.1 sr-iov资源发现
2.1.1
VF不支持I/O空间,仅支持memory space;
一个PF的多个VF的memory space是连续分配的(VF间可能有间隙);
2.1.2
指定PF的第n个VF的Routing ID = PF的routing id + first vf offset + (n - 1) * vf stride;
VF个数上限:理论上限为65536,但是不能与已存在的routing id存在交叠,且VF的总线号不能小于与之关联的PF的总线号;
当pcie switch的second bus number和subordinate bus number间没有足够的总线号时,支持sr-iov的设备的vf个数将被减小,甚至sr-iov功能不能被使能;
2.1.4 中断资源分配
VF支持MSI和MSI-X,不应支持INTx。
2.2 重置机制
常规重置后,已使能的VF将被去使能。
VF的功能级重置仅影响VF的状态,不影响VF的配置空间。
PF的功能级重置,将导致已使能的VF去使能。
2.4 VF迁移:略
3. 配置
3.3 SR-IOV Extended Capability
3.3.2
SR-IOV不支持vf migration。vf迁移指的是同一个pcie设备中有多个pf,vf在多个pf间的迁移。
3.3.3 SR-IOV control寄存器
3.3.3.5 ARI Capable Hierarchy
当RP或switch的下游端口使能ARI功能后,软件将pcie设备的第一个pf的该比特置位。
vf的routing id不受device id和func id的限制。
疑问:考虑到vf routing id的获取方法,ARI对于VF的意义是什么呢?
3.3.5 InitialVFs
对于SR-IOV,该字段与TotalVFs相等。
如果VF Migration是使能的,且VF由使能切换为去使能然后再使能,该字段可能变化,因为VF迁移值其他PF了。
3.3.8 Function Dependency Link
该字段描述的是pf间的依赖关系;
该字段填写依赖链中下一个pf的功能号,最后一个pf填写第一个pf的功能号;
相互依赖的pf及其vf必须被分配给同一个虚拟机;实际操作过程中,将vf分配给虚拟机失败时,可考虑是否为这个原因。
3.3.12 Supported Page Size
PF支持的页大小的集合;每个bit代表一个页大小;如果第n个比特置一,则支持2**(n + 12)字节的页大小,0 <= n <= 31;
示例:Supported Page Size = 0x00000553,则表示支持4KB, 8KB, 64KB, 256KB, 1MB, 4MB大小的页。
3.3.13 System Page Size
由软件配置;仅能有一个比特置一;置一的比特必须在Supported Page Size集合中;
示例:System Page Size = 1,则表示页大小为4KB。
含义:表示该PF的所有VF的bar必须以System Page Size对齐;
3.3.14 VF BAR0, VF BAR1, VF BAR2, VF BAR3, VF BAR4, VF BAR5
配置方式:与PF的bar寄存器一样:通过写全1,然后读回来确定bar空间的大小。
含义:BAR0表示该PF的所有VF的bar0的基地址;BAR0映射的空间大小为: 一个VF的bar0的大小 * NumVFs;其他BAR同理;
PF中所有VF的bar0的大小是一样的;其他bar也是;
3.4 PF/VF配置空间头
3.5 PCI Express Capability
3.6 PCI Standard Capability
3.7 PCI Express Extended Capability
相应寄存器在VF和PF间的差异,主要体现为VF是否支持该寄存器,暂不关心。