virtio 学习随笔 —— 五、SR-IOV加速虚拟机网络

五、SR-IOV加速虚拟机网络

参考文档:
Achieving network wirespeed in an open standard manner: introducing vDPA
单根 I/O 虚拟化 (SR-IOV) 概述

在使用 vhost-net/virtio-net 架构或 vhost-user/virtio-pmd 架构时,宿主机通常需要运行一个虚拟交换机软件。该虚拟交换机负责对接多个 NIC 的物理接口,并将流量分发到各个虚拟机。然而,引入这一软件交换机在转发路径中不可避免地会带来一定的延迟,消除延迟的最好方法就是将一整个NIC直通给虚拟机内核。不过我们通常只拥有几张网卡,而物理机中的虚拟机可能有若干台。

SR-IOV(Single Root I/O Virtiualization)是PCIe规范的扩展,它允许设备在各种PCIe硬件功能之间分离其对资源的访问,简单来说就是允许一个真实物理PCIe设备虚拟出多个PCIe设备,Hypervisor可以利用该特性将虚拟PCIe设备直通给虚拟机,实现每个虚拟机都能“独占”一个PCIe设备的能力。

SR-IOV拥有两个主要功能:

  • 物理功能(Phsical functions,PFs):作为完整的PCI设备,具备标准PCI设备的发现、管理和配置能力。每个物理设备仅有一组PF,负责为整个设备提供实际配置
  • 虚拟功能(Virtual functions,VFs):作为简化的PCI功能,仅控制设备的部分资源且从物理功能派生而来,单个设备上可承载多个VF

对于物理机来说,可以将VF映射给用户态驱动DPDK、虚拟机内核或者物理机内核:

VF映射
聚焦于本系列文章的主题——如何让虚拟机高效利用 NIC

目前,高效在虚拟机中使用 SR-IOV 的 VF 主要有两种方式:

  • 在虚拟机中使用 NIC 内核驱动
  • 在虚拟机中使用 NIC 的 DPDK PMD 驱动

SR-IOV 确实能让虚拟机以接近物理 NIC 的最高效率收发数据,但这种方式几乎不具备可迁移性。原因在于,启用 SR-IOV 需要在物理机和虚拟机中同时运行厂商定制的驱动,而且这两个驱动必须相互匹配。

这带来几个限制:

  • 固件升级耦合:如果 NIC 固件升级,虚拟机中的驱动也可能需要同步升级。
  • 厂商绑定:如果更换为其他厂商的 NIC,则物理机和虚拟机中的驱动都必须更换。
  • 迁移限制:当虚拟机迁移到另一台物理机时,新主机必须与原主机在 NIC 型号、固件版本、PCIe 插槽位置等方面完全一致。
posted @ 2025-08-26 10:36  Groot_Liu  阅读(23)  评论(0)    收藏  举报