
PVE 8.2 直通 Intel 核显 + Tesla P4,串流加本地游戏电脑
引言
事情是这样的,最近买了一块15寸2K便携屏,想着给它找个归宿,突然想到了家里的NAS有核显,可以把HDMI输出接过来当个办公电脑,同时游戏需求也不能落下,加上tesla P4不久正好实现串流+本地游戏自由了!
网上能搜到的核显直通教程大多是“SeaBIOS + q35 + CSM”路线:开启主板CSM兼容模式,走legacy VGA ROM点亮画面,但tesla P4直通遇到问题,要么启动失败,要么黑屏。因为要直通独显的话需要走OVMF/UEFI 才能完美识别,同时直通核显在UEFI环境下需要搭配i440fx,不能用q35,同时需要开启legacy-igd(GVT-d)
环境如下:
- 主板/CPU:华硕Z370 + e2286m(Coffee Lake九代志强)
- 显卡:UHD P630 + Tesla P4
- PVE版本:8.2
- 虚拟机系统:Windows 10 LTSC 2021
PVE宿主机准备
- 开启IOMMU
nano /etc/default/grub
# 修改如下内容
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt initcall_blacklist=sysfb_init"
# 刷新grub
update-grub
proxmox-boot-tool refresh- intel_iommu:开启Intel的IOMMU(VT-d),PCI直通的前提,开启后vfio-pci驱动能对物理设备直接的内存访问
- iommu=pt:开启passthrough模式
- initcall_blacklist=sysfb_init:禁用内核驱动占用核显
2. 加载VFIO模块
nano /etc/modules
# 添加以下模块
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd3. 绑定目标设备到vfio-pci
# 查看VGA和tesla P4设备
lspci -nn | grep VGA
00:02.0 VGA compatible controller [0300]: Intel Corporation CoffeeLake-H GT2 [UHD Graphics 630] [8086:3e9b] (rev 02)
lspci -nn | grep NVIDIA
01:00.0 3D controller [0302]: NVIDIA Corporation GP104GL [Tesla P4] [10de:1bb3] (rev a1)
# 修改vfio
nano /etc/modprobe.d/vfio.conf
# 添加以下参数
options vfio-pci ids=8086:3e9b,8086:a2f0,10de:1bb3vfio-pci:虚拟机接管设备的驱动,接管物理设备之后,宿主机原生驱动(i915、nvidia)无法访问这个设备,同时将PCI配置空间和BAR空间直接映射到QEMU地址空间中,必须在原生驱动加载前绑定好
4. 屏蔽原生驱动
nano /etc/modprobe.d/pve-blacklist.conf
# 添加以下参数
blacklist nouveau
blacklist nvidia
blacklist nvidiafb
blacklist snd_hda_codec
blacklist snd_hda_core
blacklist radeon
blacklist amdgpu
blacklist i915
blacklist snd_hda_intel
blacklist snd_hda_codec_hdmi
options vfio_iommu_type1 allow_unsafe_interrupts=15. 防止虚拟机卡死/蓝屏
nano /etc/modprobe.d/kvm.conf
# 添加以下参数,忽略虚拟机对MSR寄存器的读写请求
options kvm ignore_msrs=16. 刷新配置重启
update-initramfs -u -k all
reboot
# 重启后查看Kernel driver是否被vfio接管
lscpi -nnk
00:02.0 VGA compatible controller [0300]: Intel Corporation CoffeeLake-H GT2 [UHD Graphics 630] [8086:3e9b] (rev 02)
DeviceName: Onboard IGD
Subsystem: ASUSTeK Computer Inc. CoffeeLake-H GT2 [UHD Graphics 630] [1043:8694]
Kernel driver in use: vfio-pci
Kernel modules: i915
01:00.0 3D controller [0302]: NVIDIA Corporation GP104GL [Tesla P4] [10de:1bb3] (rev a1)
Subsystem: NVIDIA Corporation GP104GL [Tesla P4] [10de:11d8]
Kernel driver in use: vfio-pci
Kernel modules: nvidiafb, nouveau, nvidia_vgpu_vfio, nvidia
# 查看忽略msr读写的配置是否生效,正常输出Y
cat /sys/module/kvm/parameters/ignore_msrs虚拟机配置
注意:主板BIOS 设置 关闭 CSM,否则和虚拟机OVMF的UEFI启动流程冲突
- 下载/提取核显ROM
https://github.com/LongQT-sea/intel-igpu-passthru
选择对应的ROM下载到PVE中,核显在虚拟机中显示需要读取vBIOS,启动时进行加载
# 下载拷贝到QEMU共享目录中,重命名为igd.rom
curl -L https://github.com/LongQT-sea/intel-igpu-passthru/releases/download/v0.1/CFL_CML_GOPv9.1_igd.rom -o /usr/share/kvm/igd.rom 2. 设置平台和CPU类型
- machine:i440fx,legacy-igd 的硬性要求
- bios:OVMF,使用UEFI固件引导
- processors:host,原生性能更好
- Display:VGA,这里暂时先不直通核显和tesla P4,因为需要安装系统
3. 直通核显和tesla P4
注意:按步骤安装完虚拟机需要开启远程桌面,后续需要安装驱动
依次添加UHD630,声卡和tesla P4对应的PCI设备,不选择Primary GPU,这样会和legacy-igd启动冲突
nano /etc/pve/qemu-server/100.conf 添加启动参数
args: -set device.hostpci0.addr=02.0 -set device.hostpci0.x-igd-gms=0x2 -set device.hostpci0.x-igd-opregion=on修改PCI设备
hostpci0: 0000:00:02.0,legacy-igd=1,romfile=intel.rom
hostpci1: 0000:00:1f.3
hostpci2: 0000:01:00.0最后修改显示为none,重新启动!
4. 安装驱动
连接远程桌面,分别安装 Intel 官方核显驱动和 NVIDIA Tesla 驱动。
现在可以在HDMI输出的显示器看到画面了,设备管理器应该能看到两块显示设备:Intel UHD Graphics 630(核显)和 Tesla P4。

GPUZ和任务管理器也能成功识别了



后续问题
- 安装tesla P4会自动添加一块VGX的虚拟显示屏,且默认设置为主显示器,导致物理屏幕无法操作,需要提前安装串流软件(uu远程等),串流中设置主显示器为物理设备。
- 声卡一开始使用是正常的,重启之后声卡就没声音了,后续跟踪中