硬件直通
确认主板支持
启用 VT-d启用 amd-v(amd cpu)禁用 CSM # i44fx机型建议开启此项,并且设置csm里的其他项目为UEFIACS Enable # 如果存在,设置为已启用(自动不起作用)启用 4G解码 4G Decoding禁用 Resizable BAR/Smart Access Memory智能访问内存 #(如果启用,AMD GPUS(Vega 及更高版本)会遇到“代码 43 错误”)启用 IOMMU # 如果存在,主要用于 AMD 主板将主显示器设置为 CPU/iGPU # 如果您的 CPU 有 iGPU预分配内存为 64M
忽略部分错误(同 忽略显卡警告(Nvidia专属)
忽略 dmesg 输出中的一些的错误, 请运行以下命令(# 这一步对于直通来说不是必需的,但有助于保持干净。)
nano /etc/modprobe.d/kvm.confoptions kvm ignore_msrs=Y report_ignored_msrs=0# 按 Ctrl + X,然后按 Y + Enter 保存更改。
开启iommu
IOMMU(Input-Output Memory Management Unit)是一种硬件功能,用于管理设备对系统内存的访问。启用 IOMMU 后,可以在虚拟机中直接访问物理设备,并允许虚拟机独立于主机操作系统运行
编辑(nano、vi) /etc/default/grub ,并修改 GRUB_CMDLINE_LINUX_DEFAULT 那一行。
# 对于 Intel CPU GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt initcall_blacklist=sysfb_init pcie_acs_override=downstream,multifunction pci=nommconf" # 对于 AMD CPU GRUB_CMDLINE_LINUX_DEFAULT="quiet iommu=pt initcall_blacklist=sysfb_init pcie_acs_override=downstream,multifunction pci=nommconf" # 其他的一些写法(如果是AMD处理器,将intel改为amd) GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt i915.enable_gvt=1 video=efifb:off" # 这是GVT模式,也就是共享模式,少部分cpu支持,但体验很好 GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt video=efifb:off" # 这是独占模式,都支持,但显示器没有pve的控制台输出,也只能直通个一个虚拟机 GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt pcie_acs_override=downstream,multifunction" GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on initcall_blacklist=sysfb_init pcie_acs_override=downstream,multifunction" # 参数释义 1.iommu=pt:启用 Intel VT-d 或 AMD-Vi 的 IOMMU。这是一种硬件功能,用于管理设备对系统内存的访问。在虚拟化环境中,启用 IOMMU 后,可以将物理设备直通到虚拟机中,以便虚拟机可以直接访问硬件设备。“iommu=pt”不是必须的,PT模式只在必要的时候开启设备的IOMMU转换,可以提高未直通设备PCIe的性能,建议添加。 2.initcall_blacklist=sysfb_init:禁用 sysfb_init 内核初始化函数。这个函数通常用于在内核启动过程中初始化系统帧缓冲。在使用 GPU 直通的情况下,这个函数可能会干扰直通操作,因此需要禁用它。 3.i915.enable_gvt=1:启用 Intel GVT-g 虚拟 GPU 技术。这个选项用于创建一个虚拟的 Intel GPU 设备,以便多个虚拟机可以共享物理 GPU 设备。启用 GVT-g 需要在支持虚拟 GPU 的 Intel CPU 和主板上运行,并且需要正确配置内核和虚拟机。想开启GVT-g的就添加这条,显卡直通的就不要添加了。 4.initcall_blacklist=sysfb_init:屏蔽掉pve7.2以上的一个bug,方便启动时候就屏蔽核显等设备驱动; 5.pcie_acs_override=downstream,multifunction:便于iommu每个设备单独分组,以免直通导致物理机卡死等问题 6.pci=nommconf:意思是禁用pci配置空间的内存映射,所有的 PCI 设备都有一个描述该设备的区域(您可以看到lspci -vv),访问该区域的最初方法是通过 I/O 端口,而 PCIe 允许将此空间映射到内存以便更简单地访问。 intel_iommu 和 amd_iommu=on 为 开启IOMMU video=vesafb:off 不加载 vesafb 是 veas设备 的 fb video=efifb:off 不加载 uefi设备 的 fb 在 PVE 7.3 之后版本用initcall_blacklist=sysfb_init 替代 pcie_acs_override=downstream 是为了将 iommu groups拆分, 方便直通一些板载的设备(来源于加强硬件直通的功能) 更新GRUB
proxmox-boot-tool refresh 或 update-grub reboot 加载内核模块,编辑
/etc/modules
,新增一下内容nano /etc/modules # 添加以下行; vfio vfio_iommu_type1 vfio_pci #vfio_virqfd vfio_virqfd 在 Linux 6.2 以上版本中不适用,低于 Linux 6.2 的请取消注释- 刷新 initramfs。 运行以下命令
update-initramfs -u -k all
验证是否成功,输入命令,如有类似下列提示,则成功
dmesclg | grep -e DMAR -e IOMMU # 如果没有输出,则说明有问题。你应该看到这样的东西;“DMAR: IOMMU enabled” # 另外一种验证方式 dmesg | grep iommu [ 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 # 出现很多直通组,就代表成功了。如果没有任何东西,就是没有开启 验证是否 启用IOMMU中断重映射 输入
dmesg | grep remapping
并输出 类似 以下内容即为成功。到目前为止可以 直通 除显卡外 的 PCI-E设备。dmesg | grep remapping # intel [ 0.175675] DMAR-IR: Queued invalidation will be enabled to support x2apic and Intr-remapping. [ 0.177198] DMAR-IR: Enabled IRQ remapping in x2apic mode # amd AMD-Vi: Interrupt remapping enabled 如果失败或者没有,可能没有 启用IOMMU中断重映射 ,会导致无法直通,请如下操作。
vim /etc/modprobe.d/iommu_unsafe_interrupts.conf #增加 options vfio_iommu_type1 allow_unsafe_interrupts=1
显卡直通
屏蔽驱动 编辑
/etc/modprobe.d/pve-blacklist.conf
,添加以下内容nano /etc/modprobe.d/pve-blacklist.conf # 添加以下行; # 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 blacklist i915 忽略显卡警告(Nvidia专属,主要在 Win 中遇到一些应用,列如 GeForce Experience 、Passmark Performance Test 和 SiSoftware Sandra) 编辑
/etc/modprobe.d/kvm.conf
options kvm ignore_msrs=1 report_ignored_msrs=0 ignore_msrs 忽略异常 report_ignored_msrs 是否报告异常 配置 VFIO ,主要用于 显示输出 和 音频输出 分开
查看显卡ID 输入
lspci -nn | grep VGA
,得到类似以下内容lspci -nn | grep -i “device” # 您也可以执行 lspci -nn 命令,这将列出所有设备及ID # “device”= amd、ati、nvidia、vga、usb、audio、wireless 等 # 然后您应该会看到类似于下面的列表; # 一次只引用一个设备,并记下您需要的 ID。 “0x:00.x VGA compatible controller … [1234:5678]” “0x.00.x Audio Device … [1234:5678]” # 无需记下 GPU 音频 ID。 “0x.00.x USB controller … [1234:5678]” 获取 设备ID 和 音频ID , 输入
lspci -n -s 02:00
上面的IDlspci -n -s 02:0001:00.0 0300: 10dg:1fa2 (rev a1)01:00.1 0403: 10dg:10fd (rev a1)
将 设备ID 和 音频ID 写入到
/etc/modprobe.d/vfio.conf
nano /etc/modprobe.d/vfio-pci.conf # 请注意,在此处添加disable_vga 可能会阻止来宾在SeaBIOS 模式下启动,也可以将disable_vga=1参数去掉 # 像这样在此文件中添加设备 ID,两组以上用,隔开,只有一个就不用了; options vfio-pci ids=1234:5678,1234:5678 disable_vga=1 # 再次强调,不要添加 GPU 音频 ID。 #如果有多个设备,ids后面每个设备之间用,隔开 更新内核,重启
update-initramfs -ureboot
检查
vfio-pci
是否应用成功 输入lspci -nnk
并找到 显卡编号 那一行,如果得到类似以下结果,为成功01:00.0 VGA compatible controller [0300]: NVIDIA Corporation TU117GLM [Quadro T400 Mobile] [10dg:1fa2] (rev a1) Subsystem: NVIDIA Corporation TU117GLM [Quadro T400 Mobile] [10dg:1fa2] Kernel driver in use: vfio-pci Kernel modules: nvidiafb, nouveau 01:00.1 Audio device [0403]: NVIDIA Corporation Device [10dg:10fd] (rev a1) Subsystem: NVIDIA Corporation Device [10dg:10fd] Kernel driver in use: vfio-pci Kernel modules: snd_hda_intel #结果中有 Kernel driver in use: vfio-pci 即为成功
添加显卡到虚拟机
创建虚拟机
常规 选项卡请根据自己情况填写
操作系统 选项卡请根据自己情况填写
系统 选项卡
显卡 选择
标准VGA
、SPICE
、VirtlO-GPU
、VirGL GPU
任选其一即可机型 选择
q35
Qemu代理 选择 开启(一般会安装的,类似 ESXI agent,用于与 虚拟机通信 获取 虚拟机信息)
BIOS 选择
OVMF(UEFI)
,并选择EFI存储
磁盘 选项卡请根据自己情况填写
CPU 选项卡
类别 推荐选择
host
其他请根据自己情况填写
内存 选项卡
推荐关闭
Ballooning设备
,因为 硬件直通 的 虚拟机 需要保证内存不是共享的。
网络 选项卡请根据自己情况填写
添加显卡到虚拟机
选择 虚拟机 , 并点击 硬件
点击 添加 , 然后点击 PCI设备
选择 原始设备
,在 设备 中选择需要直通的显卡
启用 所有功能 、 主GPU 、 ROM-Bar 、 PCI-Express
其中 主GPU 可以不用选择,此选项影响 显卡 为 默认参数(会导致无法启动终端) 所有功能 、ROM-Bar 、 PCI-Express 经测试不影响
nvidia-smi
命令
点击添加
intel GVT-g虚拟化核显
理论上支持intel 5-10代CPU
改 GRUB配置 ,在 GRUB_CMDLINE_LINUX_DEFAULT= 行添加
intel_iommu=on i915.enable_gvt=1
更新Grub,update-grub
Or
proxmox-boot-tool refresh检查 IOMMU是否开启
加载内核模块
编辑 /etc/modules vfio vfio_iommu_type1 vfio_pci # vfio_virqfd kvmgt #vfio_virqfd 在 Linux 6.2 以上版本中不适用,低于 Linux 6.2 的请取消注释 更新内核
update-initramfs -u
,并重启pve验证量否开启
ls /sys/bus/pci/devices/0000:00:02.0/mdev_supported_types/ # 如果不是,将00:02.0换成自己的 # 出现下面4个选项或者类似的即成功 i915-GVTg_V5_1 i915-GVTg_V5_2 i915-GVTg_V5_4 i915-GVTg_V5_8
推荐本站淘宝优惠价购买喜欢的宝贝:
本文链接:https://sg.hqyman.cn/post/9647.html 非本站原创文章欢迎转载,原创文章需保留本站地址!
休息一下~~