PVE开启硬件直通功能

PVE开启网卡直通,显卡直通,USB直通。请务必看完此文章,再结合自己实际,操作,如果成功,请再下面评论,自己的平台,有助于网友交流。

第一步:确认自己的主板CPU是否支持Vt-d功能

不支持就搞不了直通。intel要b75以上芯片组才支持。也就是说intel4代酷睿处理器以上,都支持。amd不明。

VT-D是io虚拟化。不是VT-X,具体请参考下面文章

https://zhuanlan.zhihu.com/p/50640466

有很多新手,以为主板开启虚拟化功能,就能直通了,其实不是!要开启vt-d才能io虚拟化。AMD平台是iommu,某些OEM主板上叫SRIOV。请注意。

第二步:开启iommu

#编辑grub,请不要盲目改。根据自己的环境,选择设置
vi /etc/default/grub
#在里面找到:
GRUB_CMDLINE_LINUX_DEFAULT="quiet" #然后修改为:
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt" #如果是amd cpu请改为:
GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on iommu=pt"
#如果是需要显卡直通,建议在cmdline再加一句video=vesafb:off video=efifb:off video=simplefb:off,加了之后,pve重启进内核后停留在一个画面,这是正常情况
GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on iommu=pt video=vesafb:off video=efifb:off video=simplefb:off"

修改完成之后,直接更新grub 

update-grub

注意,如果此方法还不能开启iommu,请修改 

 /etc/kernel/cmdline文件

并且使用proxmox-boot-tool refresh 更新启动项

第三步 加载相应的内核模块

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

使用update-initramfs -k all -u命令更新内核参数

重启主机

第四步 验证是否开启iommu

重启之后,在终端输入

dmesg | grep iommu

出现如下例子。则代表成功

[ 0.329978] iommu: Default domain type: Translated 
[ 1.341100] pci 0000:00:00.0: Adding to iommu group 0
[ 1.341116] pci 0000:00:01.0: Adding to iommu group 1
[ 1.341126] pci 0000:00:02.0: Adding to iommu group 2
[ 1.341137] pci 0000:00:14.0: Adding to iommu group 3
[ 1.341146] pci 0000:00:17.0: Adding to iommu group 4

此时输入命令

find /sys/kernel/iommu_groups/ -type l 
#出现很多直通组,就代表成功了。如果没有任何东西,就是没有开启

显卡直通

理论上AMD RADEON 5xxx, 6xxx, 7xxx, Navi 5XXX(XT), NVIDIA GEFORCE 7, 8, GTX 4xx, 5xx, 6xx, 7xx, 9xx, 10xx and RTX 16xx/20xx/30xx都可以成功直通。

但是对于NVIDIA显卡,建议使用9代以上中端卡直通,且使用最新的驱动。

对于AMD的APU3/5系列核显/RX4XX/5XX/6XXX均无法完美直通。无法使用本文提供的教程直通,请注意,有其他的教程,但由于我没有卡,无法撰写教程

1、直接屏蔽显卡驱动

#直通AMD显卡,请使用下面命令
echo "blacklist radeon" >> /etc/modprobe.d/blacklist.conf
echo "blacklist amdgpu" >> /etc/modprobe.d/blacklist.conf
#直通NVIDIA显卡,请使用下面命令 echo "blacklist nouveau" >> /etc/modprobe.d/blacklist.conf echo "blacklist nvidia" >> /etc/modprobe.d/blacklist.conf echo "blacklist nvidiafb" >> /etc/modprobe.d/blacklist.conf #直通INTEL核显,请使用下面命令,注意!如果使用Gvt-G,请不要使用下面的命令 echo "blacklist snd_hda_intel" >> /etc/modprobe.d/blacklist.conf echo "blacklist snd_hda_codec_hdmi" >> /etc/modprobe.d/blacklist.conf echo "blacklist i915" >> /etc/modprobe.d/blacklist.conf

2、把显卡绑定到vfio-pci

使用lspci 查看自己的显卡PCI地址,如02:00

使用lspci -n 查看显卡的did和vid。我这边是02:00,可以看到下面输出

root@pve1:~# lspci -n
00:00.0 0600: 8086:3ec4 (rev 0a)
00:01.0 0604: 8086:1901 (rev 0a)
00:02.0 0300: 8086:3e9b
00:14.0 0c03: 8086:a12f (rev 31)
00:17.0 0106: 8086:a102 (rev 31)
00:1c.0 0604: 8086:a114 (rev f1)
00:1d.0 0604: 8086:a118 (rev f1)
00:1d.2 0604: 8086:a11a (rev f1)
00:1d.3 0604: 8086:a11b (rev f1)
00:1f.0 0601: 8086:a148 (rev 31)
00:1f.2 0580: 8086:a121 (rev 31)
00:1f.3 0403: 8086:a170 (rev 31)
00:1f.4 0c05: 8086:a123 (rev 31)
00:1f.6 0200: 8086:15b8 (rev 31)
01:00.0 0200: 15b3:1003
02:00.0 0100: 10de:1381 (rev 03)
02:00.1 0100: 10de:0fbc (rev 03) 03:00.0 0108: 8086:f1a6 (rev 03) 04:00.0 0604: 1b21:1080 (rev 04)

 02:00.0 02:00.1一个是GPU,一个是声卡,两者都要一起直通,所以通过命令,把2者都绑定到vfio-pci上。

echo "options vfio-pci ids=10de:1381,10de:0fbc" > /etc/modprobe.d/vfio.conf
#注意,上面这条命令,ids=后面跟直通组的所有设备。中间以英文逗号隔开。自己的设备自己替换。

上述操作完成之后,再检查一下,是否将例子内容替换成自己的。使用以下命令查看。

cat /etc/modprobe.d/blacklist.conf
cat /etc/modprobe.d/vfio.conf

3、更新内核

对于nvidia显卡,需要

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

update-initramfs -k all -u 

随后重启

4、开始直通

新建一个虚拟机。根据自己的爱好,选择ovmf或者seabios,通常来说两者对独显直通没有影响,建议nvidia 9系以上选择OVMF,其他选择seabios。

打开虚拟机面板,正常安装系统,并且开启远程桌面或者安装好向日葵。随后点击添加 PCI设备 

如下图,注意!!!不要勾选主GPU!。如果不能勾选PCIE,那么一定要把虚拟机改成Q35类型。

随后开机,如果能正常启动,那么就安装NVIDIA最新驱动。

提示:由于某些消费级主板PCI的设计问题,你可能只能直通第一个PCIe x16槽的显卡。

 

核显直通

目前IGD( Intel Graphics Device)直通理论上支持3代酷睿以上。但是从目前的直通结果看,比较容易的是5代-10代。3-4代直通成功概率低,受多方面影响。11代及其之后,直通之后无法驱动。

amd 3400g 5xxg 需要vender reset才能直通(本文教程不适合)。

核显直通过程与上面的独显直通1-3步骤一样。请参考上文。

假设你已经完成了前面的步骤,那么现在就是配置虚拟机。

使用命令配置虚拟机

qm set <vmid> -args "-device vfio-pci,host=00:02.0,addr=0x18,x-vga=on,x-igd-opregion=on" 

如果你的VMID是101,那么命令应该是

qm set 101 -args "-device vfio-pci,host=00:02.0,addr=0x18,x-vga=on,x-igd-opregion=on" 

此种直通是基于UDT模式,适用于5代以上的CPU核显。

如果你打算直通到群晖,需要在GUI面板上,将显卡设置成无,添加串口设备用于调试,同时将核显位置绑定到虚拟机的00:02位置,所以应该执行该命令

qm set 101 -args "-device vfio-pci,host=00:02.0,addr=0x02,x-vga=on,x-igd-opregion=on" 

如果你把上面的命令输错了,或者有问题,你可以使用命令qm set 101 --delete args删除此args参数,或者修改vm的配置文件

如果通过上述操作,核显不能输出到显示器,那么你应该尝试传统方式,即将bios改成seabios,使用传统模式装好系统,开启远程,将显卡设置成无,将核显绑定到00:02位置(和群晖命令相同)。使用远程方式进系统安装驱动。

如果上面操作还是不行,请尝试添加vbios,关于什么是vbios,请百度一下,如何提取vbios,请参考下面文章https://foxi.buduanwang.vip/yj/1602.html/,本文不适用。

提示:可能某些平台它直通核显就有问题。建议换主板或者升级、降低主板bios。

 

硬盘直通

此部分请参考

Proxmox VE pve硬盘直通

网卡直通

正常情况下,网卡直通不会有什么困难。在开启iommu之后,即可在Web页面上,将网卡作为PCIe设备添加即可。

但,你需要确保没有直通到PVE的管理网口。否则你的PVE会失联。且PVE没有使用此网卡。

下图为PVE7.2直通网卡的界面。

注意!

由于供应商的问题,可能一张物理网卡会有多个逻辑的网口,这些网口会在同一个PCIe地址上,如下

这有2个I350的网卡,均在07:00这个位置上。将此类网卡直通,有2种情况。

1、一个网口为PVE管理口,一个网口直通给虚拟机

此种情况,请参考上面,进行直通,如上上图,请勿勾选 所有功能。

2、分别直通给虚拟机。

由于多个网卡位于同一个PCI地址上,可能会在一个iommu组里,只能将这些网卡同时直通给一个虚拟机,否则会报错。

你需要确认网卡是否在同一个iommu组,执行下面命令:

for d in /sys/kernel/iommu_groups/*/devices/*; do n=${d#*/iommu_groups/*}; n=${n%%/*}; printf 'IOMMU Group %s ' "$n"; lspci -nns "${d##*/}"; done|grep Eth  

如下输出:

root@pve3:~# for d in /sys/kernel/iommu_groups/*/devices/*; do      n=${d#*/iommu_groups/*}; n=${n%%/*};     printf 'IOMMU Group %s ' "$n";     lspc
IOMMU Group 17 04:00.0 Ethernet controller [0200]: Mellanox Technologies MT27500 Family [ConnectX-3] [15b3:1003]
IOMMU Group 19 07:00.0 Ethernet controller [0200]: Intel Corporation I350 Gigabit Network Connection [8086:1521] (rev 01)
IOMMU Group 20 07:00.1 Ethernet controller [0200]: Intel Corporation I350 Gigabit Network Connection [8086:1521] (rev 01)

 从上面输出看,这上面的2个I350网卡分别在组19和20上,就意味着可以分开直通给虚拟机。

如果不在同一个iommu组,那么就需要利用设备ACS特性,这部分请参考

IOMMU是如何划分PCI device group的? - 知乎 (zhihu.com)

我们可以通过下面的命令查看设备是否支持。

首先记住设备的PCI地址,如上面的I350网卡地址为07:00,那么执行命令 lspci -vs 07:00  ,输出如下

root@pve3:~# lspci -vs 07:00
07:00.0 Ethernet controller: Intel Corporation I350 Gigabit Network Connection (rev 01)
	Flags: bus master, fast devsel, latency 0, IRQ 16, NUMA node 0, IOMMU group 19
	Memory at 97d20000 (32-bit, non-prefetchable) [size=128K]
	I/O ports at 7020 [size=32]
	Memory at 97d44000 (32-bit, non-prefetchable) [size=16K]
	Capabilities: [40] Power Management version 3
	Capabilities: [50] MSI: Enable- Count=1/1 Maskable+ 64bit+
	Capabilities: [70] MSI-X: Enable+ Count=10 Masked-
	Capabilities: [a0] Express Endpoint, MSI 00
	Capabilities: [100] Advanced Error Reporting
	Capabilities: [140] Device Serial Number 6c-92-bf-ff-ff-20-cc-4f
	Capabilities: [150] Alternative Routing-ID Interpretation (ARI)
	Capabilities: [160] Single Root I/O Virtualization (SR-IOV)
	Capabilities: [1a0] Transaction Processing Hints
	Capabilities: [1c0] Latency Tolerance Reporting
//	Capabilities: [1d0] Access Control Services
	Kernel driver in use: vfio-pci
	Kernel modules: igb

07:00.1 Ethernet controller: Intel Corporation I350 Gigabit Network Connection (rev 01)
	Flags: bus master, fast devsel, latency 0, IRQ 17, NUMA node 0, IOMMU group 20
	Memory at 97d00000 (32-bit, non-prefetchable) [size=128K]
	I/O ports at 7000 [size=32]
	Memory at 97d40000 (32-bit, non-prefetchable) [size=16K]
	Capabilities: [40] Power Management version 3
	Capabilities: [50] MSI: Enable- Count=1/1 Maskable+ 64bit+
	Capabilities: [70] MSI-X: Enable+ Count=10 Masked-
	Capabilities: [a0] Express Endpoint, MSI 00
	Capabilities: [100] Advanced Error Reporting
	Capabilities: [140] Device Serial Number 6c-92-bf-ff-ff-20-cc-4f
	Capabilities: [150] Alternative Routing-ID Interpretation (ARI)
	Capabilities: [160] Single Root I/O Virtualization (SR-IOV)
	Capabilities: [1a0] Transaction Processing Hints
//	Capabilities: [1d0] Access Control Services
	Kernel driver in use: vfio-pci
	Kernel modules: igb

 上面输出代码中,我编辑了2个//符号,Access Control Services就是ACS。

如果你的设备支持,这里又有多个情况

情况1: 版本低于7.1

你需要安装破解内核,才能开启ACS强制。

这部分参考:

Proxmox VE pve7.0安装破解内核,解决iommu分组问题

情况2:PVE版本为7.1

你可以在GRUB上配置一个命令即可完成。

在grub文件里添加一个参数pcie_acs_override=downstream

grub如下

GRUB_DEFAULT=0
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on  pcie_acs_override=downstream"
GRUB_CMDLINE_LINUX=""

随后进行保存,并且更新内核,更新grub

update-grub
update-initramfs -k all -u 

随后重启

 

情况3:PVE版本为7.2+

默认已经开启,无需理会。

目前网卡直通并没有什么特别困难的地方。

不过有一点需要提的就是,是否需要网卡直通?

 

 

 

 

版权声明:
作者:佛西
链接:https://foxi.buduanwang.vip/yj/561.html/
文章版权归作者所有,未经允许请勿转载
如需获得支持,请点击网页右上角
THE END
分享
二维码
< <上一篇
下一篇>>
文章目录
关闭
目 录