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

94 lines
5.5 KiB
Markdown
Raw Normal View History

# GPU 直通前置核查与数据看板(2026-10-30)
## 硬件事实(SSH 到宿主机实测,修正旧文档误判)
宿主机 `starhe`(192.168.1.51,pve-manager/9.2.21,内核 7.0.2-6-pve):
```text
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 会话,无需改代码。