PVE 9:UHD630 核显 GVT-g 拆分直通教程

在 PVE 9 上启用 UHD630 的 GVT-g,将核显拆分为多个实例,通过网页分配给虚拟机。

UHD630 可以通过 GVT-g 创建多个虚拟核显实例,分配给不同虚拟机。各实例共享同一张核显的资源,不需要额外购买独立显卡。

本文使用 GRUB 启动方式,已在 PVE 9.0.3、6.14.8-2-pve、Coffee Lake UHD630 环境中跑通。其他内核和平台的兼容性需要分别验证。

一、检查核显与模块

进入 PVE 节点 → Shell,执行:

1
2
3
uname -r
modinfo kvmgt
lspci -nnk -s 00:02.0

确认:

  • 当前内核能找到 kvmgt 模块。
  • 00:02.0 对应 Intel 核显。

以下命令以核显地址 0000:00:02.0 为例。若实际地址不同,需要替换。

继续检查驱动设置:

1
2
3
grep -RnsE 'i915|vfio|kvmgt' /etc/modprobe.d/ /etc/modules /etc/modules-load.d/
cat /proc/cmdline
grep -n 'GRUB_CMDLINE_LINUX' /etc/default/grub

GVT-g 需要由宿主机的 i915 驱动接管核显。如果存在 blacklist i915 或将核显 ID 固定绑定到 vfio-pci 的设置,需要先备份并针对这些设置调整。

二、移除已有的整卡直通

没有配置过核显整卡直通的,跳过本节。

如果核显已经整卡直通给某台虚拟机:

  1. 正常关闭使用该核显的虚拟机。
  2. 记录其原来的核显 PCI 设备设置和开机自启动状态。
  3. 在 虚拟机 → 硬件 中,移除对应核显的 PCI 设备配置。
  4. 在 虚拟机 → 选项 中,暂时关闭开机自启动。

只移除核显直通配置,不要误删网卡、USB 控制器或其他设备。移除 PCI 设备配置不会删除虚拟机磁盘。

GVT-g 与整卡独占直通不能同时用于同一张核显。

三、开启 GVT-g

本节适用于 GRUB 启动。使用 systemd-boot 的机器应按实际启动方式配置内核参数,不能直接套用 GRUB 文件。

先检查下面两个文件是否已存在:

1
ls -l /etc/default/grub.d/99-gvtg.cfg /etc/modules-load.d/gvtg.conf

首次配置时提示文件不存在是正常的。如果文件已经存在,先查看并备份,再合并需要的设置,避免覆盖原有内容。

创建额外的 GRUB 配置:

1
2
3
4
mkdir -p /etc/default/grub.d
cat > /etc/default/grub.d/99-gvtg.cfg <<'EOF'
GRUB_CMDLINE_LINUX_DEFAULT="$GRUB_CMDLINE_LINUX_DEFAULT intel_iommu=on iommu=pt i915.enable_gvt=1"
EOF

配置开机加载模块:

1
printf 'kvmgt\n' > /etc/modules-load.d/gvtg.conf

更新当前内核的 initramfs 和 GRUB:

1
2
update-initramfs -u -k "$(uname -r)"
update-grub

确认命令执行成功,安排重启整台 PVE:

1
reboot

宿主机重启会中断运行中的虚拟机和容器。

四、验证拆分功能

重启后执行:

1
2
lspci -nnk -s 00:02.0
ls /sys/bus/pci/devices/0000:00:02.0/mdev_supported_types/

正常情况下,核显由 i915 接管:

1
2
Kernel driver in use: i915
Kernel modules: i915

并列出类似类型:

1
i915-GVTg_V5_4  i915-GVTg_V5_8

出现这些条目,说明宿主机已提供 GVT-g 拆分入口。

两个类型有什么区别

这两个条目是分配规格,不是只能拆成两份。

类型每个实例的资源通常对应的最大实例数
i915-GVTg_V5_4较多4
i915-GVTg_V5_8较少8

实际规格和剩余数量,以系统提供的信息为准:

1
2
3
4
5
for type in /sys/bus/pci/devices/0000:00:02.0/mdev_supported_types/*; do
    printf '\n%s\n' "$(basename "$type")"
    cat "$type/description"
    cat "$type/available_instances"
done

多台虚拟机可以选择同一种类型,分别获得各自的实例。混用不同规格时,数量不能直接相加;所有实例仍共享整张核显的性能。

五、通过网页分配给虚拟机

目标虚拟机保持关闭状态:

  1. 打开 虚拟机 → 硬件 → 添加 → PCI 设备。
  2. 选择 原始设备(Raw Device)。
  3. 设备选择对应的 Intel UHD630 核显。
  4. MDev 类型选择 i915-GVTg_V5_4 或其他可用类型。
  5. 主 GPU、所有功能、PCI-Express先不勾选。
  6. 添加后启动虚拟机。

首次可以选择资源较多的 V5_4 测试。

给其他虚拟机分配时,在各自的硬件设置中重复上述步骤。PVE 会在虚拟机启动时创建实例,停止后清理,不需要额外手工创建 UUID。

保留原来的默认显示设备,方便安装和检查驱动。虚拟机的机器类型先沿用已工作的配置,不需要为了 GVT-g 盲目切换 Q35 或 i440fx。

六、安装和检查客体驱动

进入虚拟机,安装适合核显及客体系统的 Intel 图形驱动。已经安装过驱动的,可以先沿用原驱动测试。

确认:

  • 系统能识别 Intel 显卡。
  • 驱动正常加载,没有设备错误。
  • 需要使用的图形或计算软件能实际调用核显。
  • 虚拟机重启、完全关闭后启动,驱动仍然正常。

先验证一台虚拟机,再逐台添加实例并测试同时运行。确认正常后,按原来的需求恢复虚拟机开机自启动。

七、未出现 MDev 类型时排查

收集以下信息:

1
2
3
cat /proc/cmdline
lspci -nnk -s 00:02.0
journalctl -k -b --no-pager | grep -iE 'gvt|kvmgt|i915|firmware|iommu|dmar'

重点检查:

  • 启动参数中是否有 i915.enable_gvt=1。
  • 核显是否仍由 vfio-pci 接管。
  • 是否还有虚拟机保留核显整卡直通,并自动启动。
  • 是否存在屏蔽 i915、固定绑定 vfio-pci 的配置。
  • 日志是否有 GVT-g 初始化、固件或 IOMMU 错误。

只有 kvmgt 模块存在,不代表 GVT-g 已正常初始化;应以 mdev_supported_types 和客体实际运行结果判断。

八、恢复为整卡直通

如果需要恢复:

  1. 正常关闭所有使用该核显 GVT-g 实例的虚拟机。
  2. 在各虚拟机的硬件设置中,移除对应的 MDev 设备。
  3. 撤销本次添加的 GVT-g 配置。
  4. 重启后,在目标虚拟机中重新添加核显整卡直通。

如果下面两个文件完全由本教程新建,且只包含本教程的设置,可以删除:

1
2
3
4
5
rm -f /etc/default/grub.d/99-gvtg.cfg
rm -f /etc/modules-load.d/gvtg.conf

update-initramfs -u -k "$(uname -r)"
update-grub

如果文件原先已存在,应恢复其备份;如果操作前另行调整过驱动屏蔽或绑定配置,也应按原记录恢复。

安排好重启时间后执行:

1
reboot

然后在 PVE 网页按原记录重新添加核显的整卡直通配置,恢复需要的自启动设置。

参考资料

GVT-g 已停止维护,本文不代表所有内核和客体驱动组合均能稳定运行。

使用 Hugo 构建
主题 Stack 由 Jimmy 设计