新版本的 PVE,例如 PVE 7.0,无需做驱动屏蔽,请直接开启 IOMMU 之后,创建虚拟机类型选择q35,直接添加直通设备即可。
NVIDIA 已经开放 GPU on VM,也就是说使用最新版本的驱动,可以顺利直通N卡,并且不会出现43代码。
如果你的设备支持 SR-IOV 和 vGPU,那你可以无需直通整个设备。
开启直通
首先确认主板是否开启 VT-d 功能
注:太远古的 CPU 可能不支持虚拟化,Intel CPU 可以在此查询 https://ark.intel.com/content/www/cn/zh/ark.html
# 执行 dmesg | grep -e DMAR -e IOMMU # 若无输出,请在 BIOS 内开启 VT-d
编辑
/etc/default/grub
文件,开启IOMMU
vim /etc/default/grub # 找到 GRUB_CMDLINE_LINUX_DEFAULT="quiet" # Intel 用户修改为 GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt pcie_acs_override=downstream,multifunction video=vesafb:off video=efifb:off" # AMD 用户修改为 GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on iommu=pt pcie_acs_override=downstream,multifunction video=vesafb:off video=efifb:off" # 更新grub update-grub
pcie_acs_override=downstream,multifunction
:尝试拆分IOMMU分组,部分主板 PCI 设备可能在同一个分组内,直接直通时会直通一大片设备,使用find /sys/kernel/iommu_groups/ -type l
可以查看设备分组信息,不需要可以不配置此参数video=vesafb:off video=efifb:off
: 开启显卡直通需要配置,禁止启动 vesa 驱动和 efi 启动的显卡
加载相应的内核模块,编辑
/etc/modules
文件,加入如下内容vfio vfio_iommu_type1 vfio_pci vfio_virqfd
重启主机,验证是否成功开启 IOMMU
reboot # 重启后在终端输入 dmesg | grep 'remapping' # 出现如下例子,则代表成功 AMD-Vi: Interrupt remapping enabled # 或 DMAR-IR: Enabled IRQ remapping in x2apic mode
显卡直通
屏蔽显卡
# 找到显卡设备的 PCI,有很多需要自行查找 lspci # 下列是我的亮机卡,25:00 代表组名,25:00.0 代表 25:00 组的第一设备 # 25:00.0 是显卡本身视频输出 # 25:00.1 是显卡自带的声卡 # 25:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Cedar [Radeon HD 5000/6000/7350/8350 Series] # 25:00.1 Audio device: Advanced Micro Devices, Inc. [AMD/ATI] Cedar HDMI Audio [Radeon HD 5400/6300/7300 Series] # 查看设备的 Device ID(将 Device ID 替换成你自己的) lspci -n -s 25:00 # 25:00.0 0300: 1002:68f9 # 25:00.1 0403: 1002:aa68 # 将显卡添加进直通组 echo "options vfio-pci ids=1002:68f9,1002:aa68" > /etc/modprobe.d/vfio.conf # 对于 NVIDIA 显卡,还需要 echo "options kvm ignore_msrs=1" > /etc/modprobe.d/kvm.conf
禁用驱动
将要禁用的驱动加入
/etc/modprobe.d/pve-blacklist.conf
# 编辑 blacklist vim /etc/modprobe.d/pve-blacklist.conf # 添加如下内容 blacklist nvidiafb blacklist nouveau blacklist nvidia blacklist snd_hda_intel # 如果不需要直通核显,这个可以不用 blacklist snd_hda_codec_hdmi blacklist i915 # AMD Driver blacklist radeon
更新配置
# 更新 initramfs update-initramfs -u # 若输出 EFI sync什么的没有,不用理会,那是由于 PVE 安装方式引起的 #重启 reboot
直通设备
机型选择 q35,在虚拟机中添加 PCI 设备即可,主 GPU 可勾可不勾,Linux 下多 GPU 可能需要自己配置
可以通过
dmesg
查看是否有错误,如果提示No more image in the PCI ROM
,可以尝试把核显驱动也禁用
PCI-E 直通
开启直通设置无误后,虚拟机类型选择 q35 即可。
引用
https://pve.proxmox.com/wiki/Pci_passthrough
https://foxi.buduanwang.vip/virtualization/pve/561.html
https://docs.erlipan.dev/books/mywiki/page/proxmox-gpu-passthrough