跳转到内容

SR-IOV 与 vGPU ​

整卡直通有个硬伤:一张卡只能给一台虚拟机。SR-IOV (Single Root I/O Virtualization) 和 vGPU 这类分片方案,能把一张物理网卡或显卡拆成多个虚拟功能,分别直通给不同的虚拟机。

为什么需要它 ​

如果你只有一张网卡却想给好几台虚拟机各自独立的直通网络接口,或者想让一颗核显同时服务多个桌面虚拟机,整卡直通没法满足——同一时间只能有一个使用者。SR-IOV 和 vGPU 解决的正是这个问题,但都需要硬件和固件的原生支持,不是所有网卡、显卡都可以。

开始之前 ​

  • 已完成开启 IOMMU——生成的虚拟功能仍然要走 vfio-pci 直通给虚拟机。
  • 确认硬件支持:SR-IOV 集中在企业级网卡(Intel 的部分型号、Mellanox/NVIDIA ConnectX 系列等),大多数消费级网卡不支持。GPU 侧的分片方案严重依赖厂商和产品线,见下文分别说明。
  • vGPU 通常涉及厂商授权和许可条款,具体许可范围和价格以厂商官网为准,本站不做结论。

SR-IOV:网卡 ​

1. 确认网卡和驱动支持 ​

sh
# 宿主机 shell,把 eth0 换成目标网卡
ethtool -i eth0
modinfo $(ethtool -i eth0 | awk '/^driver:/{print $2}') | grep -i sriov

有 sriov 相关参数说明驱动支持;部分网卡还需要在主板 BIOS 里单独打开 SR-IOV 选项才能生效。

2. 创建虚拟功能 (VF) ​

两种方式:

方式一:驱动模块参数(部分网卡驱动支持),重启后依然生效:

sh
# 宿主机 shell,把 ixgbe 和数量换成实际驱动名与需要的 VF 数
echo "options ixgbe max_vfs=4" > /etc/modprobe.d/sriov.conf
update-initramfs -u -k all

方式二:sysfs 动态创建,立即生效但默认重启后失效:

sh
# 宿主机 shell,把地址换成物理功能 (PF) 的 PCI 地址
echo 4 > /sys/bus/pci/devices/0000:01:00.0/sriov_numvfs

想让 sysfs 方式的设置在重启后自动恢复,需要安装 sysfsutils 并把这条写入 /etc/sysfs.conf 或 /etc/sysfs.d/ 下的配置文件。

开启 SR-IOV 会让这张网卡短暂中断

影响范围:创建虚拟功能的过程通常会让物理功能 (PF) 本身重新初始化,如果这张网卡是宿主机管理网络的出口,或者已经有虚拟机在用它,会有短暂的网络中断。前置条件:如果这是宿主机唯一的管理网络出口,先确认有物理控制台或另一条网络路径。回退方法:方式一删除 /etc/modprobe.d/sriov.conf 后重建 initramfs 并重启;方式二把 sriov_numvfs 写回 0。

3. 使用虚拟功能 ​

sh
# 宿主机 shell
lspci | grep -i "virtual function"

每个 VF 都是一个独立的 PCI 设备,接下来的直通方式和普通 PCI 设备完全一样:加进虚拟机的 hostpci 配置,或者通过资源映射引用。

Intel 核显分片:GVT-g ​

GVT-g 是较早一代 Intel 核显(第 5 到 7 代酷睿及对应至强 E3 v4–v6)支持的分片虚拟化方案,用"中介设备 (mediated device)"的方式把一颗核显分给多台虚拟机。较新的核显平台已经不再走 GVT-g 这条路,具体某一代核显支不支持、该走哪种方案,请对照 Intel 官方文档确认。

启用步骤概览:

sh
# 宿主机 shell,加进 GRUB 或 systemd-boot 的内核参数(方法见开启 IOMMU 一文)
i915.enable_gvt=1

加载 kvmgt 模块、重建 initramfs、重启后,查看这颗核显支持的分片规格:

sh
# 宿主机 shell,地址换成核显的 PCI 地址
ls /sys/bus/pci/devices/0000:00:02.0/mdev_supported_types

虚拟机侧直接引用某个规格,PVE 会在虚拟机启动时创建对应的中介设备,关机时自动移除:

text
hostpci0: 0000:00:02.0,mdev=i915-GVTg_V5_4

NVIDIA vGPU ​

NVIDIA 的 vGPU 方案能把一张专业卡(多数消费级 GeForce 显卡不支持)分给多台虚拟机,但需要安装厂商提供的 vGPU 管理软件、宿主机和客户机两侧的授权驱动,并配合许可服务器。这属于厂商商业产品的范畴,具体安装步骤、支持的显卡型号和授权方式请以 NVIDIA 官方 vGPU 文档为准,本站不展开,也不对授权范围和价格下结论。

检查结果 ​

  • SR-IOV:宿主机 lspci 能看到预期数量的虚拟功能;虚拟机拿到某个 VF 后,客户机内 ip link 或对应驱动能看到网卡且能正常收发。
  • GVT-g:客户机的设备管理器(或 lspci)里能看到一颗核显;虚拟机关机后,宿主机的 mdev_supported_types 目录下对应的实例被自动释放。

常见问题 ​

重启后虚拟功能消失了。 用了 sysfs 方式但没有配置持久化,参照上文用模块参数方式,或装 sysfsutils 做持久化。

网卡没有 sriov_numvfs 这个文件。 说明这张卡或驱动不支持 SR-IOV,不是配置问题。

GVT-g 创建的中介设备在虚拟机关机后就没了。 这是正常行为,PVE 按虚拟机生命周期创建和销毁中介设备,不需要手动清理。

参考资料 ​

Proxmox VE 非官方中文使用指南,与 Proxmox Server Solutions GmbH 无隶属关系。