一句话定义:SR-IOV(Single Root I/O Virtualization,单根 I/O 虚拟化)是一项 PCIe 硬件标准:它能让一块物理网卡在硬件层面切分成多个“虚拟功能”,每个虚拟功能可以独立地直通给一台虚拟机,让虚拟机用接近裸机的速度收发数据。
它怎么做到的
关键在于两个角色:PF(Physical Function,物理功能)和 VF(Virtual Function,虚拟功能)。
PF 是网卡的“完整版”,由宿主机上的驱动管理,负责创建、配置、监控这些 VF;VF 则是精简版,只保留收发数据必需的配置空间、内存映射和中断,没有管理能力,也不能随便乱配。网卡芯片里有一层硬件分流逻辑,会按 VF 编号把进出流量分好,谁的就给谁,不需要软件逐个转发。
虚拟机拿到 VF 后,配合 IOMMU(Intel VT-d、AMD-Vi 这类地址重映射硬件),可以安全地直接操作这块“小网卡”,数据路径上完全绕开宿主机里的虚拟交换机。
打个比方:过去虚拟机的网络流量像快递先送到小区驿站(软件虚拟交换机),再由保安挨家挨户送,件多的时候保安就忙不过来了;SR-IOV 相当于给每户人家单独接一条从大门直通到家的管道,快递直接从管道进来,保安只管开门和登记。
和相邻概念的区别
这几个词经常被混着用,区别在于“谁来切、切得多细”:
| 方案 | 数据路径 | 性能 | 代价 |
|---|---|---|---|
| 模拟网卡(emulated NIC) | 全软件模拟 | 低 | 兼容性最好,CPU 开销大 |
| virtio(半虚拟化) | 经软件虚拟交换机 | 中高 | 支持热迁移、限速、抓包等 |
| PCI 直通(passthrough) | 硬件 | 接近裸机 | 一块卡只能给一台虚拟机 |
| SR-IOV | 硬件切分 VF | 接近裸机 | 一块卡给多台虚拟机,但 VF 数量有限 |
VF 的个数由网卡型号和固件决定,通常是几十个量级,具体以厂商文档为准。
和 GPU 直通、MIG 是同一思路
这条思路可以概括为“硬件切分”:与其用软件去模拟或轮转,不如让硬件本身支持分身。GPU 上也有一模一样的三种做法:整卡直通(passthrough,一卡一虚拟机)、MIG(Multi-Instance GPU,把一块 GPU 切成若干实例,各自有独立显存和算力)、以及部分新 GPU 开始支持的 SR-IOV 能力。网卡、GPU、甚至 NVMe 盘,走的都是同一个方向:把切分这件事下沉到硬件,把 CPU 从搬运数据里解放出来。
对实际工作意味着什么
对 AI 从业者:多机分布式训练对网络延迟和带宽极其敏感,用 RDMA(RoCE 或 InfiniBand)做梯度同步时,如果训练跑在虚拟机里,SR-IOV 几乎是让网络性能不掉档的必备项。选云上 GPU 实例时,“是否支持 SR-IOV”“是否支持 RDMA”比 CPU 型号更值得先确认。
对普通职场人:它解释了为什么有些云服务器标着“网络增强型”就贵一截,也解释了为什么某些虚拟机不支持在线迁移。SR-IOV 的 VF 和物理位置绑得比较紧,传统上热迁移困难,需要靠厂商方案或退回 virtio 过渡。所以“性能”和“灵活性”在云上常常是一道选择题,而不是白送的。
