PCIE百科
+ -

SR-IOV和 MF-IOV

2026-08-19 7 0

关于SR-IOV和MF-IOV在枚举流程上的差异,核心区别在于设备对操作系统的“呈现方式”不同,以及由此决定的“发现时机”不同。简单来说,SR-IOV的VF是在系统启动后,由PF驱动动态“创建”出来的;而MF-IOV的“虚拟Function”则在硬件层面就被“重映射”为普通Function,在系统枚举伊始就可能被看见。

维度 SR-IOV (单根I/O虚拟化) MF-IOV (多功能I/O虚拟化)
核心策略 动态创建:VF在系统启动后,通过PF驱动按需创建。 静态重映射:硬件将内部的VF资源池“重映射”为普通的PCIe Function。
软件感知 需要感知:操作系统或Hypervisor的驱动必须具有SR-IOV感知能力,才能识别和管理VF。 无需感知:对操作系统完全透明,被识别为标准的PF,使用标准驱动即可。
首次发现时机 PF先发现,VF后创建:系统枚举首先发现PF。VF在PF被驱动加载并配置寄存器后,才作为类似“热插拔”的设备出现。 可能同时发现:如果硬件设计为将重映射的Function直接暴露,操作系统在初始枚举时就能发现它们,与发现普通PF的方式无异。
BDF分配 动态计算:VF的Routing ID(即BDF中的Function号)由PF配置空间中的首VF偏移量步长计算得出。 静态或由管理者分配:重映射Function的BDF可能由硬件预设,或在多根场景下由主控制根节点统一分配后,再告知从属根节点。
控制权归属 PF驱动/系统管理员:通过PF驱动API或sysfs接口(如sriov_numvfs文件)控制VF的创建和销毁。 硬件或中心管理者:在多根(MR-IOV)场景下,由一个主控制根节点(Primary Root Node) 负责发现所有物理资源并进行初始分配。

SR-IOV枚举流程:先有PF,再“生”VF

SR-IOV的枚举是一个典型的两阶段过程,其关键在于VF是后期动态“派生”出来的。

  1. 阶段一:发现PF:系统启动,BIOS或Hypervisor执行标准PCIe总线枚举,发现物理设备上的PF。此时,PF如同一个普通PCIe设备,被分配BDF和资源。
  2. 阶段二:创建VF:PF的驱动程序被加载后,通过操作SR-IOV扩展能力寄存器(例如写入sriov_numvfs),向系统申请创建指定数量的VF。此时,内核的PCIe核心子系统会为这些新生的VF分配独立的BDF和内存空间,并将它们作为热插拔设备(Hot-plugged PCI Devices)加入到系统中。之后,每个VF才能被分配独立的虚拟机。

MF-IOV枚举流程:资源池的“切片”与“分发”

MF-IOV(及其在多根场景下的扩展MR-IOV)的枚举则更侧重于资源规划和映射。其核心是先将物理资源虚拟化,再分配给不同的根节点(Root Complex)。

  • 主控负责发现与分配:在多根(MR-IOV)环境中,系统上电后,通常只有一个主控制根节点(Primary Root Node) 能看见完整的I/O设备子系统,包括支持虚拟化的PF和内部的VF资源池。主控制根节点完成对所有物理资源的枚举和初始化。
  • 重映射与挂载:根据预设的策略,主控制根节点将物理设备的各个功能(如某个PF或某个VF)重映射为“虚拟功能”(LVF),并将其“挂载”到各个从属根节点的虚拟PCIe拓扑中。
  • 从属节点“看”不到物理设备:从属根节点在进行PCIe设备重扫描时,通过虚拟化中间层的过滤,只能看到被分配给它的那些重映射后的Function,并像发现普通物理设备一样,为它们在自己的PCIe域中分配BDF和资源。从属根节点完全感知不到原始物理设备的存在。

总结

简单来说,区别在于“什么时候看见”“看见的是什么”

  • SR-IOV:你先看到总管理员(PF),由管理员根据需要,在运行中“创造”出一个个临时工(VF) 给你用。这个过程是动态、按需的。
  • MF-IOV:一个总规划师(主控制根节点) 提前把所有资源规划好,划分成一个个功能完整的独立办公室(重映射Function),然后直接分配给各个部门(从属根节点)。部门经理(从属操作系统)看到的,就是一个可以直接使用的标准办公室(普通Function),无需关心它是从哪块“大厂房”里隔出来的。这个过程更静态,重在设计时的规划

0 篇笔记 写笔记

关注公众号
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

您的支持,是我们前进的动力!