欢迎光临
我们一直在努力

Proxmox核显直通

其实用Proxmox玩GPU直通的话,能不能成功还是很看运气的。。因为步骤就那么些,但其他多个未知因素会直接导致最后的结果,例如:机器硬件配置/显卡驱动/PVE软件版本/等等等等,随便哪个地方出点幺蛾子问题,最后可能就不尽如人意了。。

并且我折腾的这段时间得出一个结论是核显比N卡要好直通一些,A卡我没有设备不知道是什么情况,N卡难就难在驱动这块,因为N卡自几年前就在自家的驱动内加入了反虚拟机检测,一旦检测到驱动运行在虚拟机内就停止工作,最臭名昭著的错误代码:Code43,我前段时间也碰到了,实在没办法解决就放弃了。。但是核显我还是直通成功了,这里记录下过程。。

开始之前要去检查一下你的CPU是否支持VT-d:

https://ark.intel.com/content/www/cn/zh/ark.html

例如我的i7-6700是资瓷的:

我的PVE软件版本是:

proxmox-ve: 5.4-2 (running kernel: 4.15.18-20-pve)
pve-manager: 5.4-13 (running version: 5.4-13/aee6f0ec)
pve-kernel-4.15: 5.4-8
pve-kernel-4.15.18-20-pve: 4.15.18-46
corosync: 2.4.4-pve1
criu: 2.11.1-1~bpo90
glusterfs-client: 3.8.8-1
ksm-control-daemon: not correctly installed
libjs-extjs: 6.0.1-2
libpve-access-control: 5.1-12
libpve-apiclient-perl: 2.0-5
libpve-common-perl: 5.0-54
libpve-guest-common-perl: 2.0-20
libpve-http-server-perl: 2.0-14
libpve-storage-perl: 5.0-44
libqb0: 1.0.3-1~bpo9
lvm2: 2.02.168-pve6
lxc-pve: 3.1.0-5
lxcfs: 3.0.3-pve1
novnc-pve: 1.0.0-3
proxmox-widget-toolkit: 1.0-28
pve-cluster: 5.0-38
pve-container: 2.0-40
pve-docs: 5.4-2
pve-edk2-firmware: 1.20190312-1
pve-firewall: 3.0-22
pve-firmware: 2.0-7
pve-ha-manager: 2.0-9
pve-i18n: 1.1-4
pve-libspice-server1: 0.14.1-2
pve-qemu-kvm: 3.0.1-4
pve-xtermjs: 3.12.0-1
qemu-server: 5.0-54
smartmontools: 6.5+svn4324-1
spiceterm: 3.0-5
vncterm: 1.5-3

现在去Porxmox创建一台虚拟机,需要注意的有4个点:

1.不要设置虚拟机开机自启:

2.如果只是直通核显设备,不要像网上那些教程那样改什么BIOS和Machine,保持和下图一样的默认就行:

3.一般直通GPU给虚拟机,虚拟机都是用Windows吧,我发现Proxmox上装Windows硬盘的总线/设备改为IDE,格式改为Raw的性能是最好的,另外如果宿主机是单盘(没有RAID阵列)就不要设置Writeback模式了,默认的最好:

4.CPU的模式选择Host,即尽量保证虚拟机内的CPU指令集和宿主机内一致。

现在配置直通相关的东西。

首先编辑GRUB配置文件:

nano /etc/default/grub

开启IOMMU支持:

GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on video=efifb:off"

如果是AMD的CPU:

GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on video=efifb:off"

更新GRUB:

update-grub

添加所需的系统模块(驱动):

echo "vfio" >> /etc/modules
echo "vfio_iommu_type1" >> /etc/modules
echo "vfio_pci" >> /etc/modules
echo "vfio_virqfd" >> /etc/modules

接着添加模块(驱动)黑名单,即让GPU设备在下次系统启动之后不使用这些驱动,把设备腾出来给vfio驱动用:

Intel核显:

echo "blacklist snd_hda_intel" >> /etc/modprobe.d/pve-blacklist.conf
echo "blacklist snd_hda_codec_hdmi" >> /etc/modprobe.d/pve-blacklist.conf
echo "blacklist i915" >> /etc/modprobe.d/pve-blacklist.conf

N卡/A卡:

echo "blacklist nouveau" >> /etc/modprobe.d/pve-blacklist.conf
echo "blacklist radeon" >> /etc/modprobe.d/pve-blacklist.conf

如果是N卡还需要加入下面的配置到kvm.conf(据老外说是避免一些莫名其妙的错误):

echo "options kvm ignore_msrs=1" > /etc/modprobe.d/kvm.conf

更新内核:

update-initramfs -u

重启机器:

reboot

重启上来之后检查模块是否正常加载:

lsmod | grep vfio

有类似回显说明正常:

vfio_pci               45056  1
vfio_virqfd            16384  1 vfio_pci
irqbypass              16384  13 vfio_pci,kvm
vfio_iommu_type1       24576  1
vfio                   28672  5 vfio_iommu_type1,vfio_pci

查看GPU设备ID:

lspci -nn | grep VGA

类似我的回显:

00:02.0 VGA compatible controller [0300]: Intel Corporation HD Graphics 530 [8086:1912] (rev 06)

再执行下面的命令:

lspci -vvv -s 00:02.0

看有没有Kernel driver in use这一行,正常情况下应该是没有的。

如果有那么就说明你之前肯定是哪里没配置好(一般是i915的驱动没屏蔽成功),这时候千万别硬着脑壳上了,接下来如果两台机器(宿主机和虚拟机)抢占同一个设备绝对会让机器死机。。(这也就是为什么我之前说用来直通的虚拟机一定不要设置开机启动)如果死机了,你还设置了虚拟机自启动,宿主机重启后虚拟机还是会和你的宿主机抢占同一个设备,这样就死循环了,导致你的机器永远都开不了机。。

如果你已经把这个设备直通给虚拟机了,那么这里应该会显示类似如下图的样子(我这个图片是后截的,因为我已经直通成功了,所以这里会显示):

现在把需要直通给虚拟机的设备ID写到vfio.conf内,注意这次这里的ID不是00:02.0而是8086:1912:

echo "options vfio-pci ids=8086:1912" >> /etc/modprobe.d/vfio.conf

回到Proxmox的WEB界面,给需要直通GPU的虚拟机添加对应的PCI设备:

切记直通核显不要勾选这个主GPU的选项:

给虚拟机开机,先用VNC登录进去,登录进去之后开启RDP,然后退出来用远程桌面去登录。

之后去Inter的官网下载对应的驱动程序:

https://downloadcenter.intel.com/zh-cn/product/80939/-

我这个U是i7-6700,核显是530,系统是Win10那么应该下载的驱动是:

https://downloadcenter.intel.com/zh-cn/download/25620/-Windows-7-8-1-15-40-6-?product=88345

安装过程中远程桌面应该会断开一次,重新连上去之后重启虚拟机,之后应该就OK了:

OJBK告辞:

LALA

我什么都不卖了,告辞!

赞(0)
未经允许不得转载:拆东墙 » Proxmox核显直通

评论 抢沙发

登录

找回密码

注册