PCIe物理卡如何实现多个Function:从硬件切分到虚拟化
在服务器虚拟化场景下,我们常遇到这样的需求:如何让一块物理网卡或GPU,同时被多个虚拟机以接近物理硬件的性能独占使用,并且彼此隔离? PCIe规范中的Function(功能)机制,特别是SR-IOV(单根I/O虚拟化)和MF-IOV(多功能I/O虚拟化)技术,正是解决这一问题的关键。本文将从硬件实现和软件交互的角度,参考《PCIe Function层级详解》一文的核心思想,解析这一实现路径。
一、基础概念:什么是Function
在PCIe体系中,Function是软件与硬件交互的最小逻辑单元。操作系统并不直接与物理卡打交道,而是通过BDF(总线号:设备号:功能号)三元组来寻址和访问每个Function。
每个Function都拥有独立的配置空间(Configuration Space)、BAR(基址寄存器)空间、中断和权限控制。这意味着,一张物理卡完全可以在硬件层面被设计为多个Function,操作系统会将其识别为多个独立的逻辑设备。
二、两种核心角色:PF与VF
为了实现虚拟化切分,PCIe定义了两种Function角色:
PF(物理功能,Physical Function)
- 角色:代表完整的物理硬件资源,是管理的起点。
- 职责:拥有完整的配置空间,负责设备初始化、电源管理、复位,以及最重要的——创建和管理VF。PF的驱动通常运行在宿主机(Host)或Hypervisor层。
- 控制接口:PF通过其配置空间中的SR-IOV扩展能力(Extended Capability) 中的寄存器来控制VF:
- VF使能位:全局开关,控制VF是否对外可见。
- VF数量字段:设置当前要创建的具体VF个数。
- 首VF偏移量和步长:用于计算每个VF的Routing ID(即BDF中的Function号),确保它们能唯一被寻址。
VF(虚拟功能,Virtual Function)
- 角色:由PF派生出的轻量级Function,是实现资源隔离的“切片”。
- 本质:VF拥有独立的配置空间和BAR,但不拥有独立的物理硬件引擎。所有VF共享PF的硬件资源(如网卡队列、GPU计算核心),只是在寻址、内存空间和权限上被逻辑隔离。
- 特性:VF的BAR通常是PF BAR空间的一个分片。例如,一块显存为16GB的GPU,其PF的BAR可被划分为4个4GB的切片,分别映射给4个VF,每个虚拟机获得独立的显存区域。
三、标准实现路径:SR-IOV的工作流程
SR-IOV是PCI-SIG定义的标准虚拟化规范,其工作流程清晰地展示了多个Function的诞生过程:
- 发现与枚举:系统启动后,Hypervisor或宿主机OS首先枚举并发现PF,读取其SR-IOV能力,获知支持的最大VF数量和BAR布局。
- 资源分配:Hypervisor为所有将要创建的VF的BAR空间分配物理内存地址(在系统物理地址空间中进行分配)。
- 创建VF:Hypervisor通过PF的配置空间,写入期望的VF数量并置起使能位。硬件随即在内部创建对应数量的VF,并使其在PCIe总线上可见。
- 分配与直通:Hypervisor将不同的VF通过BDF分配给不同的虚拟机(VM)。VM内的驱动直接操作VF,实现数据面(Data Plane)的直通访问,数据包不再经过Hypervisor模拟,性能接近裸机。

四、另一种路径:MF-IOV的重映射思想
MF-IOV提供了一种不同的实现思路,其核心是重映射(Remap)。
- 问题:SR-IOV要求操作系统或Hypervisor的驱动具有SR-IOV感知能力,才能识别VF。
- MF-IOV的解决方案:硬件内部仍有一个VF资源池,但将这些VF重映射为普通的PCIe Function。从操作系统视角看,它枚举到的全是标准的PF,无需特殊驱动支持。
- 代价:这种透明性需要硬件内部增加额外的地址翻译层,将对这些“伪装PF”的访问,路由到正确的底层VF资源上。
关键区别:SR-IOV暴露真实的VF身份;MF-IOV将VF伪装成PF,对软件更透明。两种模式在芯片设计时通常互斥,验证时需分别确保路径完整。
五、硬件实现的核心验证点
实现多个Function,对硬件设计和验证提出了明确要求,核心关注点包括:
- Function唯一性:确保每个PF和VF的BDF在系统中唯一,配置空间正确初始化。
- VF可见性边界:严格验证当VF数量字段变化或使能位切换时,VF的“出现”与“消失”是否即时、无残留。
- Routing ID计算:验证每个VF的BDF是否严格按照“PF的BDF + 首偏移 + 序号 × 步长”的公式正确生成。
- BAR空间隔离:验证PF的BAR、各个VF的BAR切片之间地址范围无重叠,且地址译码正确。
- 模式互斥:在SR-IOV模式和MF-IOV模式下,分别验证功能路径,且确认两者不能同时生效。
总结
一张PCIe物理卡实现多个Function,其本质是在硬件层面完成资源的分片与隔离。PF是拥有完整控制权的“根”,负责管理和创建;VF是由PF派生的“叶”,是虚拟机直通访问的“切片”。通过标准的SR-IOV流程或采用重映射思想的MF-IOV路径,硬件将物理资源抽象为多个逻辑功能,从而在虚拟化环境中同时实现高性能(接近裸机直通)和高密度(多VM共享单卡)。这种设计不仅解决了I/O虚拟化的性能瓶颈,也成为现代数据中心GPU、网卡等加速器虚拟化的基石。
PCIE百科





