1.设备正常工作的BIOS 设置基础
启用 VT-d
禁用 CSM
ACS Enable # 如果存在,设置为已启用(自动不起作用)
启用 4G解码 4G Decoding
禁用 Resizable BAR/Smart Access Memory智能访问内存 #(如果启用,AMD GPUS(Vega 及更高版本)会遇到“代码 43 错误”)
启用 IOMMU # 如果存在,用于 AMD 主板
将主显示器设置为 CPU/iGPU (如果您的 CPU 有 iGPU)
预分配内存为 64M
新建的虚拟机BIOS设置为OVMF(它是开源的UEFI实现)
- 开启IOMMU支持
vi /etc/default/grub
#Intel处理器:
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt initcall_blacklist=sysfb_init initcall_blacklist=sysfb_init pcie_acs_override=downstream,multifunction pci=nommconf video=efifb:off"
#AMD处理器:
GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on iommu=pt initcall_blacklist=sysfb_init initcall_blacklist=sysfb_init pcie_acs_override=downstream,multifunction pci=nommconf video=efifb:off"
- 更新grub并重启
update-grub
reboot
- 验证iommu是否生效
dmesg | grep -e IOMMU
# 如果没有输出,则说明有问题。你应该看到这样的东西;“DMAR: IOMMU enabled”
- 添加所需的系统模块(驱动)
echo "vfio" >> /etc/modules
echo "vfio_iommu_type1" >> /etc/modules
echo "vfio_pci" >> /etc/modules
echo "vfio_virqfd" >> /etc/modules
update-initramfs -u -k all
- 添加模块(驱动)黑名单(即让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
A卡:
echo "blacklist radeon" >> /etc/modprobe.d/pve-blacklist.conf
N卡
echo "blacklist nvidia" >> /etc/modprobe.d/pve-blacklist.conf
echo "blacklist nvidiafb" >> /etc/modprobe.d/pve-blacklist.conf
echo "blacklist nouveau" >> /etc/modprobe.d/pve-blacklist.conf
echo "options kvm ignore_msrs=1" > /etc/modprobe.d/kvm.conf
更新内核并重启
update-initramfs -u
reboot
https://zhuanlan.zhihu.com/p/435195451
https://imacos.top/2023/07/31/pci/