双路E5平台PVE7.0系统GTX1060 显卡直通
刚通,熟悉的错误消失了,有点失落,有点不知所措。直通成功了,开机能跑好几套系统(win10系统还能直通显卡玩游戏)。
使用鲁大师对比物理机和虚机的性能,结果如下:
项目 | 全国物理机平均分 | 虚机实测分 |
---|---|---|
处理器Xeon 2680v4 | 46w | 41w |
显卡gtx1060 5G | 18w | 17w |
搞直通过程很曲折,成功很突然,一时竟不知从何说起。一开始是参考他人流程,拷贝粘贴命令,但错误很多,始终是失败,而且错得不知所云。
隔两天收拾心情,潜心研究各方面的信息,尝试失败,如此循环。久病成医,渐入门径,之后善用dmesg工具,有方向的定位和解决问题,最后找到合适的参数,搞定。
我的结论是,没法提供一个必成教程。只能尽人事听天命,尽量多写点实际经历,给大家参考。
本文分两段,第一段是无脑操作指南,能成功算运气。后面内容提供给能潜心研究的哥们,做参考。
第一段:无脑操作指南
!!! 想无脑莽一波就能成功的前提是,你使用了类似的硬件平台,见下:
类别 | 项目 | 备注 |
---|---|---|
CPU | 2680v4 x2 | 咸鱼装机卖家 |
主板 | x99华南金牌f8d | |
DDR4 | 三星ECC2133 128G | 16Gx8 镁光 |
散热器 | 冰弘6管单扇 | |
HD | 金士顿500G | |
HD | 海康紫盘WD40PURX 4Tx2 | CMR |
显卡 | 1060 5G 一线品牌 | |
电源 | AK700 600w主动 | |
机箱 | 玩嘉荣光亚克力拉门 |
准备
!!!!除了PVE主机之外,请准备一台辅助电脑,windows开共享目录。如果家庭网络不方便访问github,最好辅助电脑开一个http服务器(我用easyWebServer),将服务目录指向该共享目录路径。
!!!!PVE主机安装显示器(不要用HDMI欺骗器)
可以体会各个阶段显卡的反应
!!!!在安装PVE之前,请带显卡在windows中启动,使用gpuz软件提取vbios的rom,命名为“nvidiaGTX1060_gpuz_dump.rom”,放入辅助机器共享目录。
!!!!请下载Nvidia显卡驱动,放入辅助机器共享目录
如果你是GTX1060,请下载 466.77版本,后详。
!!!! BIOS 开启VT-d x2apic
其他准备:
- 软件环境 Proxmox VE 7.0 (自己搞定)
- 创建VM虚机,安装win10 系统 (自己搞定)
VM要点:
- 加载win10.iso和win_virio.iso virio驱动,安装qemu agent(方便看ip)
- BIOS:OFMV, machine:Q35
- 先不急添加 PCI显卡设备
要求:
- win10虚机装好
- 各种vfio的驱动打好
- win10里面把guestAgent跑起来
- 使能RDP远程桌面登录
下面运行指令,都是在web页面的shell中操作,请熟悉PVE -> shell 的命令行工具。
找显卡的PCI地址
lspci -v
找到有nvidia的行:
82:00.0 VGA compatible controller: NVIDIA Corporation GP106 [GeForce GTX 1060 5GB] (rev a1) (prog-if 00 [VGA controller])
Subsystem: ZOTAC International (MCO) Ltd. GP106 [GeForce GTX 1060 5GB]
Physical Slot: 14
...
82:00.1 Audio device: NVIDIA Corporation GP106 High Definition Audio Controller (rev a1)
Subsystem: ZOTAC International (MCO) Ltd. GP106 High Definition Audio Controller
...
留意 82:00.0 和 82:00.1,输入指令:
lspci -n -s 82:00
输出:
82:00.0 0300: 10de:1c04 (rev a1)
82:00.1 0403: 10de:10f1 (rev a1)
留意 10de:1c04, 10de:10f1 ,下面有用。
开始为PVE内核添加参数,开启iommu 和其他 PCI相关的配置
nano /etc/default/grub
找到:
GRUB_CMDLINE_LINUX_DEFAULT="quiet"
修改为:
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt pcie_acs_override=downstream,multifunction nofb nomodeset video=vesafb:off video=efifb:off vfio-pci.ids=10de:1c04,10de:10f1"
Ctrl+x Y 保存。
其中 10de:1c04,10de:10f1 是 上面找到显卡和附属声卡(HDMI音频)的参数。
更新grub启动参数:
update-grub
加载vfio的驱动
nano /etc/modules
添加:
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd
保存退出。
更新并重启PVE:
update-initramfs -u -k all && reboot now
启动之后,我们检查一下效果:
dmesg | grep -e DMAR -e IOMMU -e AMD-Vi
# 注意三个关键项
[ 0.337693] DMAR: IOMMU enabled
...
[ 0.789391] DMAR-IR: Enabled IRQ remapping in x2apic mode
...
[ 2.319816] DMAR: Intel(R) Virtualization Technology for Directed I/O
如果有错误提示,自己想办法解决一下。
我之前发现有提示 x2apic没打开,bios里操作一下,就没有什么错误了。
看一下iommu的分组:
find /sys/kernel/iommu_groups/ -type l
/sys/kernel/iommu_groups/91/devices/0000:82:00.1
...
/sys/kernel/iommu_groups/90/devices/0000:82:00.0
确保GPU PCI不要和不相关设备在相同组里。
禁止host驱动GPU
nano /etc/modprobe.d/pve-blacklist.conf
添加:
options vfio_iommu_type1 allow_unsafe_interrupts=1
options kvm ignore_msrs=1
options kvm-intel nested=Y
blacklist nouveau
options nouveau modeset=0
blacklist nvidiafb
blacklist amdgpu
blacklist radeon
blacklist nvidia
blacklist snd_hda_codec_hdmi
blacklist snd_hda_intel
blacklist snd_hda_codec
blacklist snd_hda_core
保存
update-initramfs -u -k all && reboot now
启动好,检查一下相应设备是否没有驱动程序。
lspci -nnk
82:00.0 VGA compatible controller [0300]: NVIDIA Corporation GP106 [GeForce GTX 1060 5GB] [10de:1c04] (rev a1)
Subsystem: ZOTAC International (MCO) Ltd. GP106 [GeForce GTX 1060 5GB] [19da:4437]
Kernel modules: nvidiafb, nouveau
82:00.1 Audio device [0403]: NVIDIA Corporation GP106 High Definition Audio Controller [10de:10f1] (rev a1)
Subsystem: ZOTAC International (MCO) Ltd. GP106 High Definition Audio Controller [19da:4437]
Kernel driver in use: snd_hda_intel <------- 这个是示例一下,上面正确列入黑名单,这里消失的
Kernel modules: snd_hda_intel
上面信息中 须没有 “Kernel driver in use” 字样,表示GPU没有被驱动。
至此,host机已经搞好了,显卡已经放开了。
为VM添加PCI显卡设备
VM -> 硬件 -> 添加PCI设备
找到Nvidia字样项目,不要添加附属音频设备。
VM硬件中,添加USB设备,有鼠标键盘什么的添加上(假如直通成功,可以直接鼠标键盘登录)。
VM启动,看看显示器是否会有变化,如果依然黑屏,那么通过VNC或者远程桌面进入系统。
VM内安装显卡驱动
远程桌面进入系统,设备管理器里面应该出现有问题的PCI硬件,为其安装GPU驱动。
如果继续黑屏,显卡错误码43,那么尝试为虚机挂vbios的rom。
VM挂载vbios的ROM
感谢大神提供的 NVIDIA vBIOS VFIO 修补程序(此工具仅与 NVIDIA GPU 的 Pascal 系列 (1xxx) 兼容)。
下载:
https://github/Matoking/NVIDIA-vBIOS-VFIO-Patcher/raw/master/nvidia_vbios_vfio_patcher.py
放入辅助机器的共享目录(PVE中直接下载github文件可能会有困难,所以先想办法下载下来,在本地转给PVE)。
PVE shell中:
cd /usr/share/kvm
wget http://192.168.31.xxx/nvidia_vbios_vfio_patcher.py
python3 nvidia_vbios_vfio_patcher.py -i nvidiaGTX1060_gpuz_dump.rom -o nvidiaGTX1060_gpuz_dump_patched.rom
上面是对GPU的vbios做补丁处理,我猜是PVE的虚拟机BIOS需要引导GPU所以需要vbios吧。
下面在虚拟机配置文件中挂上该ROM。
nano /etc/pve/qemu-server/100.conf
#相应行改动,romfile参数缺省路径是 /usr/share/kvm
hostpci0: 0000:82:00,pcie=1,romfile=nvidiaGTX1060_gpuz_dump_patched.rom
保存,重启虚拟机。
保佑你能点亮屏幕。
注意:为虚拟机提供vbios的Rom是最为关键的步骤。使用这个步骤,我很早就成功的将显示器点亮,一度以为接近成功(能进入win界面)。当时情况是:分辨率始终很低,且有小光标始终存在(win界面下始终闪烁),设备管理器中始终异常43,即使禁止显卡设备,显示器依然显示。
我估计是参数没有设定到位。
https://ghost.adrianpazon/proxmox-gpu-passthrough/ 该教程平台与我类似,参考作者提供的参数,才完美驱动显卡。
如果你不行,我也没辙了,看看第二段是否有参考价值吧。
第二段:入各种坑指南
如果你没有搞定,但是依然打算慢慢来,打持久战,那么我会给一些指点,让你进坑快点。
下面的内容不分先后,可能在合适的时候你才能发现它的作用。
先看看 稍微靠谱点的教程
权威参考,官方的材料一定要细心研读,搞明白各阶段操作意义之前,不要过多追求网络上教程:
https://pve.proxmox/pve-docs/pve-admin-guide.html#qm_pci_passthrough
reddit详细教程,可以参考:
https://www.reddit/r/homelab/comments/b5xpua/the_ultimate_beginners_guide_to_gpu_passthrough/
强烈建议,显卡安装显示器
不要用HDMI欺骗器。
屏幕显示内容变化,可以体会各个操作阶段显卡的反应,慢慢就能感受到驱动的状态了。
PVE启动的时候显示器会显示内容,如果PVE加载了驱动,那么会进入高分辨率模式;
在禁止host驱动显卡步骤完成之后,再重启host,就不会进入高分辨率模式了,而且也不会再有login的光标闪烁;
启动VM时,会先显示proxmox的黄黑BIOS界面,如果你能在屏幕上看到,那么就离成功不远了。
如果你要卸载显卡驱动,请用DDU
显卡驱动分版本,我在测试不同版本驱动时,需要在安全模式下使用DDU来卸载。
VM虚机的参考配置
web图形界面配置VM,收敛的参数都在这个文件里:/etc/pve/qemu-server/xxx.conf。
参考我的VM完整配置:
PVE -> shell
nano /etc/pve/qemu-server/100.conf
agent: 1 #guestAgent
bios: ovmf
cpu: host
sockets: 2
cores: 8
machine: pc-q35-6.0
efidisk0: local-lvm:vm-100-disk-1,size=4M
ide0: local:iso/virtio-win-0.1.217.iso,media=cdrom,size=519096K
ide2: local:iso/Win10_x64_enterprise_2019LTSC.iso,media=cdrom
memory: 32768
name: win10Nvidia
net0: virtio=9A:B0:30:A2:EE:56,bridge=vmbr0
numa: 1
ostype: win10
scsi0: local-lvm:vm-100-disk-0,cache=writeback,size=52G
scsihw: virtio-scsi-pci
smbios1: uuid=6e79f1a3-68be-43f6-99ad-33b9794c304c
usb0: host=2-4,usb3=1
vga: none
vmgenid: 5625cecf-026a-4a79-99ef-cb9fbaa48ce3
boot: order=scsi0;ide2;net0;ide0
hostpci0: 0000:82:00,pcie=1,x-vga=1,romfile=nvidiaGTX1060_gpuz_dump_patched.rom
N卡驱动很重要,一要支持虚拟化,二要防止负优化,请选择合适版本
nvidia声称R465以后版本驱动都可以支持单显卡直通:
https://nvidia.custhelp/app/answers/detail/a_id/5173/~/geforce-gpu-passthrough-for-windows-virtual-machine-%28beta%29
Q: Which driver is GeForce virtualization (beta) supported on?
A: GeForce virtualization (beta) is supported on R465 or higher drivers.
Q: Which GeForce GPUs and Windows OSes support virtualization?
A: The feature is enabled on all GeForce/TITAN GPUs supported in the R465 driver (Kepler and later for Desktop; Maxwell and later for Notebook) for Windows 10.
且有牛人对GTX1060做了全面驱动测试,参见: https://www.bilibili/read/cv16150421
结论很清晰,我选择了 466.77版本。
关闭不了的虚拟机 怎么办
关闭不了的虚拟机一般都是被lock了,使用
qm unlock 101
qm stop 101
若反馈
Error: can’t lock file ‘/var/lock/qemu-server/lock-101.conf’ – got timeout
在PVE的console中:
ls /run/lock/qemu-server
反馈类如:
lock-100.conf lock-101.conf lock--1.conf
删除相应文件即可:
rm -f /run/lock/qemu-server/lock-101.conf
qm stop 101
绝望了么,还有一线生机~
可以在PVE的shell中,使用下面命令跟踪错误:
dmesg --follow
绝望时必备。
我用它的提示,找到可能的错误,反复测试,挑选出适合自己的配置。
最后成功之后,该指令就没有太多的错误了。
GPU bios 网上也可以下载到,实际测试然并卵
有教程在讨论vbios的来源时提到可以直接去下载vbios,
下载地址:https://www.techpowerup/vgabios
我的是Zotac GTX10605GD5 毁灭者M1
https://www.techpowerup/vgabios/239764/239764
https://www.techpowerup/vgabios/201568/201568
看着型号再一致,实测没用,后来还是使用gpuz提取自己的显卡的rom才搞定的。这里提一嘴。
搞显卡直通,我遇到了很多困难,也许你会运气很好,加油吧~
20220525 ws_d1 记录完毕
更多推荐
双路E5平台PVE7.0系统GTX1060 显卡直通
发布评论