IOMMU(Input-Output Memory Management Unit)是一种硬件功能,用于管理设备对系统内存的访问。启用 IOMMU 后,可以在虚拟机中直接访问物理设备,并允许虚拟机独立于主机操作系统运行
# Intel CPU
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt"
# AMD CPU
GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on iommu=pt"
#以上是常规配置
root@pve:~# cat /etc/default/grub|egrep GRUB_CMDLINE_LINUX_DEFAULT
#GRUB_CMDLINE_LINUX_DEFAULT="quiet"
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt i915.enable_gvt=1 initcall_blacklist=sysfb_init"
其他说明: 中介设备【 Mediated Devices 】:vGPU, GVT-g。Intel核显的技术叫GVT-g, NVIDIA技术叫vGPU。
直通 Intel 核心显卡需要使用 VFIO 驱动程序,并且需要在虚拟机中正确配置,如果需要Intel 核显直通虚拟机
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt i915.enable_gvt=1"
相关解释:
iommu=pt
:启用 Intel VT-d 或 AMD-Vi 的 IOMMU。这是一种硬件功能,用于管理设备对系统内存的访问。在虚拟化环境中,启用 IOMMU 后,可以将物理设备直通到虚拟机中,以便虚拟机可以直接访问硬件设备。initcall_blacklist=sysfb_init
:禁用 sysfb_init 内核初始化函数。这个函数通常用于在内核启动过程中初始化系统帧缓冲。在使用 GPU 直通的情况下,这个函数可能会干扰直通操作,因此需要禁用它。i915.enable_gvt=1
:启用 Intel GVT-g 虚拟 GPU 技术。这个选项用于创建一个虚拟的 Intel GPU 设备,以便多个虚拟机可以共享物理 GPU 设备。启用 GVT-g 需要在支持虚拟 GPU 的 Intel CPU 和主板上运行,并且需要正确配置内核和虚拟机。想开启GVT-g的就添加这条,显卡直通的就不要添加了。
- 添加内核模块
cp -v /etc/modules{,-back0}
root@pve:~# cat /etc/modules
# /etc/modules: kernel modules to load at boot time.
#
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line. Lines beginning with "#" are ignored.
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd
kvmgt
原理说明:
1、PCIe直通启用vfio vfio_iommu_type1 vfio_pci vfio_virqfd
2、vGPU和GVT-g需再添加kvmgt
重启 reboot , 之后检查
dmesg | grep -e DMAR -e IOMMU -e AMD-Vi
find /sys/kernel/iommu_groups/ -type l
查找系统中的 IOMMU 组符号链接,并查看每个 IOMMU 组包含哪些设备
root@pve:~# dmesg | grep remapping
[ 0.469964] DMAR-IR: Queued invalidation will be enabled to support x2apic and Intr-remapping.
[ 0.470814] DMAR-IR: Enabled IRQ remapping in x2apic mode
IRQ remapping 是一种硬件功能,用于在虚拟化环境中管理设备中断的路由。
在虚拟化环境中,多个虚拟机可能会共享同一个物理设备,这意味着多个虚拟机可能会请求使用同一个中断线。如果没有中断路由管理,可能会导致中断冲突和错误,从而影响系统的稳定性和可靠性。IRQ remapping 可以解决这个问题,它可以动态地将中断路由到正确的虚拟机中。
在上面的 dmesg 输出中,DMAR-IR 是与 Interrupt Remapping 相关的一个内核模块。Queued invalidation will be enabled to support x2apic and Intr-remapping 表示将启用队列化失效 (queued invalidation) 来支持 x2APIC 和 Interrupt Remapping。Enabled IRQ remapping in x2apic mode 表示在 x2APIC 模式下启用了 IRQ remapping。
总之,这些消息表明系统已经启用了 IRQ remapping 和相关的硬件支持,以便在虚拟化环境中管理中断路由,并提高系统的稳定性和可靠性。
屏蔽驱动
cat /etc/modprobe.d/pve-blacklist.conf
# This file contains a list of modules which are not supported by Proxmox VE 2
# nidiafb see bugreport https://bugzilla.proxmox.com/show_bug.cgi?id=701
# Nvidia
blacklist nvidiafb
blacklist nouveau
blacklist nvidia
# AMD
blacklist amdgpu
blacklist radeon
# Intel UHD
blacklist snd_hda_codec_hdmi
blacklist snd_hda_intel
blacklist snd_hda_codec
blacklist snd_hda_core
options nouveau modeset=0
是NVIDIA的显卡,还需要执行
echo 'options kvm ignore_msrs=1 report_ignored_msrs=0' > /etc/modprobe.d/kvm.conf
root@pve:~# lspci -knn | grep -i -A 2 vga
01:00.0 VGA compatible controller [0300]: NVIDIA Corporation Device [10de:2504] (rev a1)
Subsystem: ASUSTeK Computer Inc. Device [1043:88d6]
Kernel driver in use: vfio-pci
root@pve:~# lspci -n -s 01:00
01:00.0 0300: 10de:2504 (rev a1)
01:00.1 0403: 10de:228e (rev a1)
cat /etc/modprobe.d/vfio.conf
options vfio-pci ids=10de:2504,10de:228e
# 一个是nvidia的vga,一个是声音audio
# 重启
机型一定要选择q35, 如果不是,后期再调整为q35会启动失败,踩坑小半天
最后,windows驱动下载: https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/virtio-win-0.1.229-1/virtio-win-0.1.229.iso