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
原文来源
作者:Rakutens
链接:https://www.jianshu.com/p/bf519b4f1950
来源:简书
评论区