SR-IOV浅浅理解
SR-IOV(Single Root I/O Virtualization) 单根I/O 虚拟化是 PCIe 设备级虚拟化,可以把它理解成:一块物理 PCIe 设备,在硬件层面“切”成多个几乎等同真设备的虚拟功能,直接分配给虚拟机使用。
一、先看模型
一块卡(PF) ├─ VF0 → VM0 ├─ VF1 → VM1 ├─ VF2 → VM2 └─ VFn → VMn
PF(Physical Function):真实物理功能;
VF(Virtual Function):硬件生成的“轻量 PCIe 设备”;
不是软件模拟,是设备硬件支持;
二、看原理
┌────────────────────────┐
PCIe Link ───▶ │ PCIe Endpoint Controller│
└───────────┬────────────┘
│
┌───────────────────┼────────────────────┐
│ │ │
┌────▼────┐ ┌─────▼─────┐ ┌─────▼─────┐
│ PF │ │ VF0 │ ... │ VF n │
│ (管理) │ │ (数据面) │ │ (数据面) │
└────┬────┘ └─────┬─────┘ └─────┬─────┘
│ │ │
│ ┌──────────▼──────────┐ │
└──────▶ │ 资源仲裁 / DMA / │ ◀───────┘
│ Queue / MSI-X / IOMMU│
└──────────┬──────────┘
│
MAC / Engine
各模块含义
| 模块 | 作用 |
|---|---|
| PCIe Endpoint | 统一链路、LTSSM |
| PF | 管理功能(创建/销毁 VF) |
| VF | VM 看到的“假独立设备” |
| DMA / Queue | VF 间隔离 |
| MSI-X | 每个 VF 独立中断 |
VF 不是“复制一套硬件”,而是共享硬件资源;
三、配置空间角度
SR-IOV 是通过 PCIe 配置空间 实现的,不是引脚。
PCIe Config Space
├─ Type 0 Header
├─ MSI / MSI-X
├─ PCIe Capability
├─ Power Management
└─ Extended Capability
└─ SR-IOV Capability
├─ TotalVFs
├─ NumVFs
├─ VF BARs
├─ VF Offset
当 PF 驱动写:
sriov_numvfs = 8
硬件内部:
-
动态生成 8 个 VF
-
分配 BDF
-
映射 BAR
四、SR-IOV 解决了什么问题
1、传统虚拟化(慢)
VM → Virtio → Hypervisor → Host Driver → NIC
2、SR-IOV(快)
VM → VF Driver → NIC
结果:
-
更低延迟
-
更高吞吐
-
更少 CPU 开销
网卡 / 存储卡 / 加速卡的主流方案
五、SR-IOV 的核心组成
1、PF(Physical Function)
-
唯一
-
负责:
-
管理 VF
-
资源分配
-
配置空间
-
-
只有 PF 驱动有“完全控制权”
2、VF(Virtual Function)
-
多个(8 / 32 / 64 / 128…)
-
每个:
-
有独立 PCIe BDF
-
有独立 BAR(精简版)
-
可被直通给 VM
-
VF 无法做管理操作;
3、IOMMU(必须)
-
地址隔离
-
DMA 重映射
-
防止 VM 乱 DMA
六、SR-IOV 在 PCIe 层面发生了什么?
1、配置空间扩展
SR-IOV 是 PCIe Extended Capability
Extended Cap ID: SR-IOV (0x10)
2、设备枚举结果
七、Linux 下最常用操作
查看是否支持
lspci -vvv | grep -i sriov
查看最大 VF 数
cat /sys/bus/pci/devices/0000:01:00.0/sriov_totalvfs
创建 VF
echo 8 > sriov_numvfs
绑定 VF 给 VM
-
vfio-pci:PCIe 设备从 Host 手里接走,并安全交给 VM 使用”的内核驱动。vfio-pci 是唯一一个同时理解 PCIe,又理解 虚拟化,又能安全使用 DMA的通用驱动。
PCIe 设备(PF / VF)
↓
vfio-pci ←── 核心
↓
IOMMU
↓
QEMU / KVM
↓
VM
-
passthrough隔离host,决定vf给vm如何分配;
硬件能力:SR-IOV
↓
设备形态:PF / VF
↓
内核机制:vfio + IOMMU
↓
虚拟化方式:Passthrough
↓
VM 里看到:真实 PCIe 设备
八、工程中最容易踩的坑(非常重要)
1、开 SR-IOV 后掉性能
原因:
-
VF 数过多
-
PF 资源调度不合理
-
中断风暴(MSI-X)
2、 VF 建链 / 掉链异常
-
ASPM / L1.2 打开
-
VF 电源管理不完整
服务器场景强烈建议关 ASPM
3、热插拔 / 热重置失败
-
VF 依赖 PF
-
PF reset 会把 VF 全杀
这是 SR-IOV 设计决定的;
九、SR-IOV vs 相关技术
| 技术 | 区别 |
|---|---|
| SR-IOV | 单 RC,多 VF |
| MR-IOV | 多 RC(很少见) |
| Virtio | 纯软件 |
| PCIe PASID | DMA 维度虚拟化 |
| ATS | 地址翻译加速 |

浙公网安备 33010602011771号