首页/云/云平台与虚拟化速查/SR-IOV 与 PCI 直通
虚拟化基础63 条

SR-IOV 与 PCI 直通

SR-IOV 把一块 PCIe 设备(常见为网卡)切分为多个虚拟功能(VF)直通给虚机,绕过软件交换路径;PCI 直通则把整卡分给一台虚机。两者都依赖 IOMMU(VT-d/AMD-Vi)支持。

云平台与虚拟化速查云更新于 2026-10-13

SR-IOV 与 PCI 直通是什么

两者都是把物理 PCIe 设备交给虚机直接使用,绕过宿主软件交换路径,从而获得更低的延迟与更高的吞吐。PCI 直通把一整块设备分给一台虚机;SR-IOV 则在物理功能(PF)之上切出多个虚拟功能(VF),一块网卡可以同时给多台虚机使用。代价也一样:设备不跟随虚机热迁移,宿主侧可观测性下降,排障难度上升。

基本信息

适用平台支持 VT-d(Intel)或 AMD-Vi 的服务器与主流 Linux 发行版
SR-IOVPF 负责管理,多个 VF 直通给不同虚机,单卡多虚机共享
PCI 直通整设备分配给一台虚机,通常用 vfio-pci 驱动绑定
前置条件BIOS 开启 IOMMU,内核开启对应选项,设备与固件支持
常见代价热迁移受限、宿主侧抓包与监控能力下降
典型用途高吞吐网络、低延迟场景、GPU 或专用加速卡

典型使用场景

  • 高吞吐网络场景:普通虚拟交换成为瓶颈时改用 VF 直通
  • 低延迟要求:对时延敏感的中间件或转发类业务
  • GPU 或专用加速卡:训练与推理需要独占设备
  • DPDK 类应用:需要绕过内核协议栈直接访问网卡
  • 性能对比验证:在同样的虚机规格下比较直通与虚拟交换的差异
  • 存储控制器直通:需要直接管理物理盘或磁带设备的场景

检查宿主是否具备条件

检查宿主是否具备条件
dmesg | grep -i -e DMAR -e IOMMU | head          # 确认 IOMMU 已启用并被内核识别
ls /sys/kernel/iommu_groups/ | sort -n | tail -5   # 存在 IOMMU 分组,说明设备可隔离
lspci -nn | grep -i ethernet                       # 找到目标网卡的 PCI 地址与厂商型号
lspci -s 0000:3b:00.0 -vvv | grep -i -A2 'Single Root'   # 查看是否支持 SR-IOV 能力
ls /sys/class/net/*/device/physfn 2>/dev/null      # 判断某网卡是否为 VF 及其所属 PF
ip -br link | grep -E 'vf|pf'                      # 查看 VF 对应接口的命名与状态

两种方案对照

对比项PCI 直通SR-IOV
设备粒度整块设备给一台虚机一块设备切多个 VF 分给多台虚机
资源利用率低,设备独占高,多虚机共享同一物理设备
热迁移不支持,需先解除直通同样受限,VF 不跟随迁移
宿主可观测性宿主看不到该设备的流量PF 侧可观察,但 VF 流量同样绕过软件交换
故障影响面只影响一台虚机共享设备的配置失误可能影响多台虚机
典型场景GPU、专用卡、存储控制器高吞吐网卡、DPDK
启用直通前先在 BIOS 打开 IOMMU,并确认设备处于独立的 IOMMU 分组:分组不独立时无法安全地单独分配给虚机。
直通设备不参与热迁移:把这类虚机纳入变更计划前先确认迁移策略,否则维护窗口执行迁移会直接失败。

易错点

  • 直通虚机纳入热迁移计划:迁移失败,维护窗口被迫中断
  • 只看 PF 管理面未限制 VF 访问权限:共享设备的安全边界变模糊
  • 未确认 IOMMU 分组独立性就分配设备:同组其他设备被一并占用,影响宿主
  • 宿主侧失去抓包能力却不知情:网络问题排查时才发现看不到流量
  • VF 数量配置过多:队列资源被摊薄,性能反而不如虚拟交换

数据来源与参考

  • Linux 内核文档 VFIO
  • Red Hat 文档:SR-IOV 与 PCI 直通
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌