Proxmox VE 9.2+ Intel 核显 SR-IOV + AMD Radeon AI PRO R9700 直通+Ubuntu24.04部署实测(二)
-
Intel 核显 SR-IOV 部署与稳定性测试报告(远程娱乐办公)
Arrow Lake-S(Core Ultra 7 265K)在 Proxmox VE 9.2 上成功切分 4 个 VF
项目 内容 PVE 主机 192.168.67.251(节点名R9700,PVE 9.2.18,内核7.0.14-16-pve)核显 00:02.0Intel Arrow Lake-S [Intel Graphics],8086:7d67目标 切分 4 个 VF 供虚拟机做硬件编解码加速 结果 部署成功,稳定性测试全部通过 
一、结果速览
# 验收项 结果 1 VF 数量 sriov_numvfs = 4(00:02.1~00:02.4)2 PF 保持宿主管理 00:02.0→i9153 VF 绑定 vfio-pci 4 个 VF 全部 vfio-pci4 xe驱动屏蔽未加载 5 DKMS 模块生效 2026.08.12.1-sriov,max_vfs=4,enable_guc=36 GuC/HuC 固件 宿主与 guest 均正常 7 宿主无 VF 渲染节点泄漏 仅 card0/renderD1288 guest 内识别 VF guest 看到 Intel 设备并生成 renderD1289 VAAPI 硬解可用 Intel iHD 26.1.2,H264/HEVC/VP9/AV1 全支持 10 实际硬转码 1080p/15s → HEVC 仅 1.35 秒(≈11× 实时) 11 并发压力测试 4 路并发 180 秒,0 错误 12 多 VF 并发 两个 VF 同时转码,6/6 输出合法 13 宿主稳定性 0 个失败单元,0 条新内核错误 14 llama.cpp 未受影响 active、NRestarts=0、推理返回正常15 R9700 直通 仍为 vfio-pci,rocm-smi正常
二、最终生效的配置
2.1 内核启动参数
/etc/default/grub:GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on i915.enable_guc=3 i915.max_vfs=4 module_blacklist=xe"重启后
/proc/cmdline实际生效值:BOOT_IMAGE=/boot/vmlinuz-7.0.14-16-pve root=/dev/mapper/pve-root ro quiet intel_iommu=on i915.enable_guc=3 i915.max_vfs=4 module_blacklist=xe2.2 VF 自动创建
/etc/sysfs.conf(由sysfsutils在开机时执行):devices/pci0000:00/0000:00:02.0/sriov_numvfs = 42.3 VF 绑定 vfio-pci(避免 VF 泄漏到宿主机)
/etc/udev/rules.d/99-i915-vf-vfio.rules:# Bind Intel iGPU VFs (00:02.1 - 00:02.4) to vfio-pci; PF (00:02.0) stays on i915 ACTION=="add", SUBSYSTEM=="pci", KERNEL=="0000:00:02.[1-4]", ATTR{vendor}=="0x8086", ATTR{device}=="0x7d67", DRIVER!="vfio-pci", RUN+="/bin/sh -c 'echo $kernel > /sys/bus/pci/devices/$kernel/driver/unbind; echo vfio-pci > /sys/bus/pci/devices/$kernel/driver_override; modprobe vfio-pci; echo $kernel > /sys/bus/pci/drivers/vfio-pci/bind'"该规则经实测生效:部署后宿主机
/dev/dri仅有card0与renderD128,4 个 VF 均未生成渲染节点,证明 VF 已彻底对宿主机隐藏。注意:你原有的
/etc/modprobe.d/vfio.conf(R9700 的ids=1002:7551,1002:ab40)与/etc/modules-load.d/vfio.conf均未被改动,AMD 直通配置完好。2.4 DKMS 驱动
i915-sriov-dkms/2026.08.12.1, 7.0.14-16-pve, x86_64: installed (Original modules exist) 模块版本:2026.08.12.1-sriov2.5 运行时状态(部署后实测)
sriov_totalvfs = 4 sriov_numvfs = 4 00:02.0 Kernel driver in use: i915 ← PF 留在宿主机 00:02.1 Kernel driver in use: vfio-pci ← 可分给 VM 00:02.2 Kernel driver in use: vfio-pci 00:02.3 Kernel driver in use: vfio-pci 00:02.4 Kernel driver in use: vfio-pci 宿主机 /dev/dri: card0 renderD128 ← 仅 PF,VF 未泄漏
三、执行过程记录
阶段 操作 结果 0 备份全部待改配置 备份目录 /root/sriov-rollback-20260911-2023441 安装 build-essential dkms sysfsutils pciutils wget+proxmox-headers-7.0.14-16-pvedkms 3.2.2 / gcc 14.2 / 头文件就位 2 安装 i915-sriov-dkms_2026.08.12.1_amd64.debDKMS 编译成功, installed3 写入 grub / sysfs.conf / udev 规则并 update-grub+update-initramfsgrub.cfg 已确认含新参数 4 关闭 VM 102(guest 内 systemctl poweroff)干净卸载,避免非正常关机 5 重启宿主机 停机约 10 秒,50 秒后恢复 6 验证 VF / 驱动 / GuC 15 项检查全部通过 7 VM 102 自动启动( onboot=1)llama 约 20 秒载入模型后 health=ok8 创建临时测试 VM,guest 内装 DKMS 硬解验证通过 9 删除测试 VM、清理下载镜像 最终状态确认
四、稳定性测试详情
4.1 单 VF 功能验证(guest:Ubuntu 26.04 LTS,内核
7.0.0-31-generic)guest 内 VF 以
01:00.0出现,由 DKMS i915 接管:i915 0000:01:00.0: GuC firmware PRELOADED version 0.0 submission:SR-IOV VF i915 0000:01:00.0: HuC firmware PRELOADED i915 0000:01:00.0: [drm] VT-d active for gfx access [drm] Initialized i915 1.6.0 for 0000:01:00.0 on minor 1关键对比:使用内核自带 i915 时,VF 探测直接失败:
i915 0000:01:00.0: [drm] *ERROR* Unrecognized display IP version 1023.255; disabling display.
装入 DKMS 模块后该错误完全消失,renderD128正常生成。VAAPI 能力(
vainfo实测)Driver version: Intel iHD driver for Intel(R) Gen Graphics - 26.1.2 VAProfileH264High : VAEntrypointVLD / EncSlice VAProfileHEVCMain : VAEntrypointVLD / EncSlice VAProfileHEVCMain10 : VAEntrypointVLD / EncSlice VAProfileVP9Profile0-3 : VAEntrypointVLD / EncSlice VAProfileAV1Profile0 : VAEntrypointVLD / EncSlice VAProfileJPEGBaseline : VAEntrypointVLD / EncPicture VAProfileMPEG2Simple/Main : VAEntrypointVLD硬转码实测:1080p / 15 秒 / H.264 源 → HEVC 4 Mbps
real 0m1.353s ≈ 11 倍实时 输出校验:codec_name=hevc, 1920x10804.2 并发压力测试(4 路并发,180 秒)
在 guest 内启动 4 个并发 VAAPI 转码循环持续 180 秒,同时每 20 秒采样宿主状态:
监控项 结果 i915 设备数 恒定 5(PF + 4 VF),无掉卡 VF 驱动绑定 4 个 VF 全程稳定为 vfio-pci,无漂移i915 FLR/reset 计数 恒定 38 次(来自此前 VM 启停,压力期间零新增) 新内核错误 0 条 运行中 VM 102、200 均正常 宿主机失败单元 0 测试结束后 guest 侧检查:
- 4 个输出文件全部生成(证明真实计算发生)
/dev/dri仍有card0card1renderD128- VF 仍绑定
i915 - 无内核错误(仅有 KVM 环境固有的
shpchp/snd_hda无害提示)
4.3 双 VF 并发验证
给测试 VM 追加第二个 VF(
00:02.2)后:guest 内识别到两个 Intel 设备:01:00.0 与 02:00.0 /dev/dri: renderD128(VF1)+ renderD129(VF2),两者 VAAPI 能力完全相同两个 VF 同时转码(各 3 轮):
VF 迭代 1 迭代 2 迭代 3 renderD128(VF1)2.14 s 2.20 s 1.81 s renderD129(VF2)1.98 s 1.52 s 1.76 s - 6/6 输出均为合法
hevc,1920,1080 - 并发期间宿主机与 guest 均零错误
- 证明多 VF 分区可同时工作、互不干扰
4.4 llama.cpp 回归验证(核心约束结果)
检查项 部署前 部署后 服务状态 activeactive/health{"status":"ok"}{"status":"ok"}NRestarts0 0 推理功能 正常 实测返回回复 R9700 驱动 vfio-pcivfio-pciR9700 温度/功耗 32 °C / 11 W 32 °C / 15 W 你的 llama.cpp 服务器配置与数据未被修改一个字节,仅经历了一次计划内的优雅重启。
五、部署中遇到的问题与解决(仅供参考)
# 问题 原因 解决 1 测试 VM 把 EFI 盘当成了系统盘 自动探测卷名时匹配到了 disk-0(efidisk)而非disk-1(OS)改用解析 unused0条目取 OS 盘2 测试 VM 一直连不上 Ubuntu cloud 镜像首启耗时 5 分 27 秒( Startup finished in 5min 27s)耐心等待;二次启动仅需数十秒 3 SSH 密码登录被拒 cloud 镜像自带 60-cloudimg-settings.conf: PasswordAuthentication no离线注入 SSH 公钥(更可靠) 4 guest 内 VF 报 Unrecognized display IP version 1023.255内核自带 i915 不支持 ARL VF 在 guest 内同样安装 DKMS 模块(官方要求) 5 vainfo报va_openDriver() returns -1未安装 Intel 媒体驱动 安装 intel-media-va-driver-non-free6 普通用户无法访问 renderD128ubuntu用户不在video/render组usermod -aG video,render第 4、5、6 条是每台要用核显 VF 的 VM 都要做的
六、当前完整配置并加以备份
6.1 备份位置
/root/sriov-rollback-20260911-202344/ ├── grub.default # 原始 /etc/default/grub ├── grub.cfg # 原始 /boot/grub/grub.cfg ├── modprobe.d/ # 原始 /etc/modprobe.d ├── modules-load.d/ # 原始 /etc/modules-load.d ├── udev-rules.d/ # 原始 /etc/udev/rules.d └── BASELINE.txt # 部署前完整状态快照6.2 回滚步骤(如需)
# 1) 恢复 grub cp /root/sriov-rollback-20260911-202344/grub.default /etc/default/grub # 2) 删除 SR-IOV 相关配置 rm -f /etc/sysfs.conf rm -f /etc/udev/rules.d/99-i915-vf-vfio.rules # 3) 卸载 DKMS 模块(恢复内核自带 i915) dpkg -P i915-sriov-dkms dkms remove i915-sriov-dkms/2026.08.12.1 --all 2>/dev/null # 4) 应用并重启 update-grub && update-initramfs -u -k all && reboot6.3 紧急回滚(启动异常时)
在 GRUB 菜单(
GRUB_TIMEOUT=5,会显示 5 秒)按e编辑启动项,在linux行末尾追加:module_blacklist=i915,xe按
F10启动即可进入系统后再修配置。
七、后续给其他虚拟机分配 VF 的步骤
现有 4 个可用 VF(
00:02.1~00:02.4),每个给一台 VM,永远不要直通 PF(00:02.0)。7.1 PVE 侧
在 Web 界面:VM → 硬件 → 添加 → PCI 设备 → Raw Device → 选
0000:00:02.x,勾选 PCI-Express,不要勾选 Primary GPU(显示保持 virtio-gpu / SPICE)。命令行等价:
qm set <VMID> --hostpci0 0000:00:02.1,pcie=17.2 Guest 侧(三件事,缺一不可)
# ① 安装同一个 DKMS 模块(否则 VF 探测失败) sudo apt install -y build-essential dkms "linux-headers-$(uname -r)" wget wget -O /tmp/i915-sriov-dkms_2026.08.12.1_amd64.deb \ "https://github.com/strongtz/i915-sriov-dkms/releases/download/2026.08.12.1/i915-sriov-dkms_2026.08.12.1_amd64.deb" sudo dpkg -i /tmp/i915-sriov-dkms_2026.08.12.1_amd64.deb sudo reboot # ② 安装 Intel VAAPI 驱动(否则 vainfo 报错) sudo apt install -y intel-media-va-driver-non-free libva-drm2 libva2 vainfo ffmpeg # ③ 把使用用户加入 video / render 组(否则无权限访问 renderD128) sudo usermod -aG video,render <用户名> # 重新登录或重启生效7.3 验证
ls -l /dev/dri/ # 应出现 renderD128 vainfo --display drm --device /dev/dri/renderD128 ffmpeg -hwaccel vaapi -hwaccel_device /dev/dri/renderD128 \ -hwaccel_output_format vaapi -i in.mp4 -c:v hevc_vaapi out.mp4guest 内核版本要求:DKMS
2026.08.12.1要求内核 6.17 ~ 7.1。若 VM 用 Ubuntu 24.04 默认内核 6.8,需改用旧版 DKMS(2025.07.22),或升级 guest 内核到 7.0(本机的 VM 102 就是7.0.0-31-generic,可直接用当前版本)。
八、注意事项与后续维护
-
内核升级会让模块失效。 每次 PVE 升级内核后必须重装/重编译 DKMS:
apt install -y proxmox-headers-$(uname -r) dkms autoinstall # 或重装 deb否则核显会退回内置驱动、4 个 VF 全部消失,依赖 VF 的 VM 会启动失败。建议固定内核或把
dkms autoinstall加入升级流程。 -
4 个 VF 共享同一颗物理核显。 它们共用执行单元与媒体引擎,媒体引擎在 VF 间隔离并不完全。轻中度办公/学习硬解没问题,但不要期待 4 路 4K 同时转码线性扩展。
-
VF 只做渲染/编解码,不驱动物理 HDMI/DP。 显示必须走 virtio-gpu + SPICE/RDP/noVNC。
-
永远不要直通 PF(
00:02.0),否则其余所有 VF 一起崩溃。 -
模块仍属实验性(项目自述 "highly experimental")。本次测试在本机的硬件上表现稳定,但 Intel 官方对 Arrow Lake 核显 SR-IOV 仍是"不支持"态度,这条路依赖社区模块。
-
若想扩到 5~7 个 VF:把
i915.max_vfs=4改为 7、/etc/sysfs.conf改为 7,并相应扩展 udev 规则的[1-7],重启即可(硬件上限 7)。 -
测试 VM 已删除,下载的 cloud 镜像也已清理,未留下多余磁盘占用。
九、结论
部署成功,稳定性验证通过。
- 核显已成功切分为 4 个可独立使用的 VF,每个都能提供完整的 VAAPI 硬件编解码能力(含 AV1)。
- 单 VF 转码性能约 11 倍实时;4 路并发压力测试 180 秒零错误;双 VF 并发互不干扰。
- 宿主全程稳定:0 失败单元、0 条新增内核错误、VF 绑定无漂移、无新增 FLR/reset。
