vdi-cloud/docs/gpu-passthrough-20261030.md

5.5 KiB
Raw Blame History

GPU 直通前置核查与数据看板(2026-10-30)

硬件事实(SSH 到宿主机实测,修正旧文档误判)

宿主机 starhe(192.168.1.51,pve-manager/9.2.21,内核 7.0.2-6-pve):

00:02.0 VGA  : Intel 4th Gen Core (Haswell) iGPU [8086:0416]  驱动 i915(宿主显示用,保留)
01:00.0 3D   : NVIDIA GM204M [GeForce GTX 965M] [10de:13d9]   驱动 nouveau(直通前需解绑)
两者 Subsystem 均为 CLEVO/KAPOK [1558:6557]
  • 机身是 CLEVO 准系统(外形像台式机箱),GPU 是移动版 GM204M/965M—— 此前"笔记本"与"IOMMU Group 2 独占"的记载部分有误,以本页为准。
  • HDMI 音频功能(01:00.1)不存在,无需处理。
  • IOMMU 实测已启用(/sys/kernel/iommu_groups 有 15 组,DMAR 生效; 内核 6.8+ 默认开启,不需要显式 intel_iommu=on)。
  • GPU 位于 IOMMU 组 2,组内设备:0000:00:01.0(root port)+ 0000:01:00.0(GPU), 直通需整组传入。
  • VM 100:q35 + SeaBIOS、4 核 8G、win10,未配置 hostpci。

明日直通操作单(按序执行)

  1. 约窗口:宿主机重启会让全部 VM(100/101/102)停机。
  2. 解绑 nouveau:/etc/modprobe.d/blacklist.conf 加 blacklist nouveau, update-initramfs -u,重启宿主机(重启后 lsmod | grep nouveau 应为空)。
  3. 绑 vfio:/etc/modprobe.d/vfio.conf 写 options vfio-pci ids=10de:13d9 (含 root port 的话用 QEMU 参数整组传),重启后确认 lspci -nnk -s 01:00.0 显示 Kernel driver in use: vfio-pci(看板会自动变绿)。
  4. 挂载:qm set 100 -hostpci0 00:01.0,pcie=1(按组传;若启动报隔离不满足, 用 -hostpci0 0000:00:01.0;0000:01:00.0 形式补传 root port)。 vBIOS ROM 先不挂,Code 43 在 R465+ 驱动已移除检测。
  5. VM 内装驱动:Maxwell 已进 legacy 分支,装 R580 系驱动(提前下载好放 VM)。
  6. 验证:VM 内 nvidia-smi 出卡 → 看板"VM 内实时数据"卡片自动出现利用率/显存/温度。
  7. Sunshine 切 NVENC(配置 encoder=nvenc 或按其自动探测),1080p60 复测帧率。

GPU 数据看板(已上线)

  • 地址:http://192.168.1.51:8090/(自动刷新 4 秒)
  • 源码:tools/gpu_dashboard.py(宿主机 /root/gpu_dashboard.py, systemd 单元 gpu-dashboard.service 已设开机自启)
  • 直通前显示:型号/驱动/直通阶段/IOMMU 状态与组内设备/VM 配置; 直通后自动经 qm guest exec 100 采集 nvidia-smi:利用率、显存、温度、 驱动版本、功耗、NVENC 编码会话数。
  • 手动重启:systemctl restart gpu-dashboard。
  • 后续:接管理平台后,该数据源可换成平台 GPU 池接口(Web 控制台监控模块复用)。

2026-10-30 实施记录:直通落地成功,卡在 vBIOS,已回退保环境

已完成并持久化

  1. 宿主机:blacklist nouveau + vfio.conf(ids=10de:13d9,8086:0c01) + initramfs 更新 + 重启; 重启后 01:00.0 由 vfio-pci 接管,nouveau 0。
  2. VM 100:hostpci0=0000:01:00.0,pcie=1 挂载成功;客户机出现 3D Video Controller。
  3. 驱动:582.66 WHQL 经"PC 下载 → 宿主机 8091 HTTP → VM 内网拉取"进入 VM (VM 直连 NVIDIA CDN 被 403,需走内网中转);安装器兼容性检测拒绝(桌面包 INF 无移动 ID), 改用 pnputil /add-driver Display.Driver/nvcvi.inf /install 成功—— nvcvi.inf 含我们的精确 ID PCI\VEN_10DE&DEV_13D9&SUBSYS_65571558, 设备绑定成功、C:\Windows\System32\nvidia-smi.exe 出现。
  4. 全部 VM 已设 onboot 自启;宿主机新增 systemd 服务:gpu-dashboard(8090)、dl-http(8091)。

阻塞点:GM204M 缺少可用 vBIOS,驱动初始化失败(Code 43)

  • 宿主机 dmesg:Invalid PCI ROM header signature: expecting 0xaa55, got 0xffff —— 该 Optimus 移动卡的 ROM BAR 读不出 vBIOS;sysfs 转储 0 字节。
  • 已尝试无效:cpu host,hidden=1;args -cpu host,-hypervisor,hv_vendor_id=...,kvm=off; rombar=0(设备直接不枚举)。
  • 供体 ROM 实验:TechPowerUp 上两个 "GTX 965M" 条目实为 GM206(1427) 改版(芯片不符); 同 GM204 的 Clevo GTX 970M(13D8) ROM 经 PCIR 补丁(vendor 10de + device 13d9 + 子系统 6557) 后 guest 仍不枚举设备。
  • 结论:需要这块卡(或同款 GM204M/13D9)的真 vBIOS 才能完成驱动初始化。

已回退(保客户演示环境)

  • VM 100 已摘除 hostpci 并重启,Sunshine 正常(x264 路线),47989 开放; 失败安装无残留(无 NVIDIA 目录)。
  • 直通重新启用只需两条命令:qm set 100 -hostpci0 0000:01:00.0,pcie=1[,romfile=...] + 重启 VM。

后续选项(按代价排序)

  1. 宿主机整机冷断电 30 秒以上(现场 1 分钟操作;Maxwell 多次热重启后设备状态可能损坏, 冷启动是社区最后一招)→ 开机后重挂 romfile=gtx965m-fixed.rom(已留存 /usr/share/kvm/gtx965m-fixed.rom,即 970M ROM 补丁版)再试。
  2. 获取真 GM204M(13D9) vBIOS:任何可进系统的 965M 机器用 GPU-Z 导出 (同事/二手渠道),或从 CLEVO BIOS 刷写包提取;放到 /usr/share/kvm/ 后 romfile 挂载。
  3. 业务备选:若 965M 直通确认不可行,NVENC 需换卡(桌面 GM204 及以上)或改用其他硬件方案。

GPU 数据看板

http://192.168.1.51:8090/(systemd gpu-dashboard,源码 tools/gpu_dashboard.py)。 驱动一旦可初始化,"VM 内实时数据"卡片自动显示利用率/显存/温度/NVENC 会话,无需改代码。