当前位置:首页 > 未分类 > 正文内容

PVE下直通PCI设备通用教程

sep152个月前 (06-17)未分类3

PVE下直通PCI设备通用教程

根据黑苹果屋教程整理

配置文件修改前请先将原配置文件备份

cp /*/*/***.* /*/*/***.*.bak

一、BIOS设置

启用 VT-d禁用 CSM # i44fx机型建议开启此项,并且设置csm里的其他项目为UEFIACS Enable # 如果存在,设置为已启用(自动不起作用)启用 4G解码 4G Decoding禁用 Resizable BAR/Smart Access Memory智能访问内存 #(如果启用,AMD GPUS(Vega 及更高版本)会遇到“代码 43 错误”)启用 IOMMU # 如果存在,主要用于 AMD 主板将主显示器设置为 CPU/iGPU # 如果您的 CPU 有 iGPU预分配内存为 64M

二、忽略错误

忽略 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 /etc/default/grub # 将以下行粘贴到其中,并在旧标签前面添加一个注释标签#,以下为常用的一些写法。# 对于 Intel CPUGRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt initcall_blacklist=sysfb_init pcie_acs_override=downstream,multifunction pci=nommconf"# 对于 AMD CPUGRUB_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 允许将此空间映射到内存以便更简单地访问。
参数解释说明
quiet默认参数,表示在启动过程中只显示重要信息
intel_iommu=on用 intel_iommu 驱动来驱动 IOMMU 硬件单元
amd_iommu=on用 amd_iommu 驱动来驱动 IOMMU 硬件单元
iommu=pt只为使用透传功能的设备启用 IOMMU,并可以提供更好的功能和性能
pci=assign-busses部分网卡开启 SR-IOV 需要这个参数,否则可能报错
PCIe_acs_override=downstream用于将 iommu groups 拆分,方便灵活按需直通一些板载的设备
PCIe_acs_override=multifunctionPCIe 直通多功能支持,提高直通完美度(可选)
nofb该选项允许你不用一个frame缓冲来使用图形安装程序
textonly仅在文本模式下支持 GRUB 串行控制台
nomodeset系统启动过程中,暂时不运行图像驱动程序
video=vesafb:off禁用 vesa 启动显示设备
video=efifb:off禁用 efi 启动显示设备
video=simplefb:off5.15 内核开始直通可能需要这个参数
initcall_blacklist=sysfb_init部分 A 卡如 RX580 直通异常可能需要这个参数
pcie_aspm=off关闭 PCIe 设备的 ASPM 节能模式,解决部分 PCIe 设备 AER 报错
pcie_aspm=force强制 PCIe 设备及爱情 ASPM 节能模式,解决部分 PCIe 设备 AER 报错
pci=noaer不输出 AER 报错日志,华南主板经常会 AER 报错,建议配合使用,眼不见心不烦
pci=nomsi在系统范围内禁用 MSI 中断,主要还是解决 PCIe 相关的报错

四、更新grub,并重启

update-grubreboot

五、重启后,验证是否开启iommu

dmesg | grep -e DMAR -e IOMMU -e AMD-Vi# 如果没有输出,则说明有问题。你应该看到这样的东西;“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
# 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
#https://www.cnblogs.com/MAENESA/p/18005241 教程网址

#如果失败或者没有,可能没有启用IOMMU中断重映射 ,会导致无法直通,请如下操作。
# 编辑文件,添加以下行;请注意,此选项可能会使您的系统不稳定。
nano /etc/modprobe.d/iommu_unsafe_interrupts.conf
options vfio_iommu_type1 allow_unsafe_interrupts=1

七、启用必要的内核模块

nano /etc/modules # 添加以下行;vfiovfio_iommu_type1vfio_pcivfio_virqfd

八、更改任何相关模块后,需刷新initramfs

update-initramfs -u -k all

九、检查是否已启用重新映射

dmesg | grep remapping # 应该输出类似这样的内容;
“AMD-Vi: Interrupt remapping enabled”
“DMAR-IR: Enabled IRQ remapping in x2apic mode”
# 'x2apic' 在旧 CPU 上可能有所不同,但应该仍然可以工作。

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
#其它教程结合  https://www.cnblogs.com/MAENESA/p/18005241

十、驱动程序模块列入黑名单,以使虚拟机能够完全访问显卡等

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

#屏蔽hdmi声音驱动
options vfio_iommu_type1 allow_unsafe_interrupts=1
# 屏蔽三大显卡驱动,

十一、找到您的 PCI 设备对应的 ID

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]”

十二、将主机的PCI设备ID绑定到vifo模块,并重启。

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。

rbboot

十三、直通显卡一些注意事项

# 勾选直通的所有功能,这是您希望 GPU 充分工作的设置。对于某些功能,只能勾选“所有功能”和“ROM-Bar”。这些复选框因卡而异,可能需要测试适合您的选项。有些卡还需要转储显卡的.rom文件才能工作。要实现这一点,您必须使用现有的一些指南,从您的特定卡中自行转储显卡的rom文件。我们将来可能会为此添加一个指南。独立显卡的rom下载地址https://www.techpowerup.com/vgabios# 我们最近发现,如果未勾选 PCI-Express,则 HDMI-音频之类的功能可能无法工作。但请注意,您的安装可能无法在勾选后启动,然后取消勾选即可。

十四、挂载显卡rom方式操作

  • 设备只有核显:大部分情况会出现核显直通后,即使驱动了显卡,显示信号的HDMI、DP、DVI等接口无法正常输出画面,但是也有部分电脑可以通过加载显卡的rom来实现显示信号的输出,提取rom并加载的一些方式,后续在更新对应的教程

  • 设备只有独立显卡(或双独立显卡):直通后需要通过加载显卡的rom后,可实现显示信号输出,显卡信号输出正常工作.独立显卡的rom可以通过https://www.techpowerup.com/vgabios下载自己对应的型号,下载的时候需要对应显卡型号、厂商信息、显卡BIOS版本日期等信息,至于这些信息如何查看,下面的内容会介绍

  • 设备核显与独立显卡同时具备:直通独立显卡一般不用加载显卡的rom,但这也不是绝对的,直通核显同样需要加载显卡的rom,不然也会出现接口无法正常输出画面的情况

  • 设备有两张以上独立显卡或同时具备两张显卡:通常PCIE通道的第一张独立显卡需要加载显卡的rom,才能直通。第二张之后的独立显卡因为启动PVE系统的时候不会占用到,所以第二张之后的独立显卡不用添加rom也可以实现直通,添加了rom后反而会直通不成功。

  • 获取显卡rom

    • 使用GPU-Z后,界面上显示的“bios 版本”(英文版的叫“bios vision”),这一行最右边有一个小图标,点击一下,会出现菜单选项,选“保存至文件”就可以了。如果保存下来的是“*.bin”格式的文件,也是可以直接用的

    • 将获取到的显卡rom上传到PVE的指定目录中(PVE开机状态),上传路径:/usr/share/kvm

    1. 在winPE环境下:您需要使用U盘制作winPE的启动盘,在winPE下使用Aida64.exe工具,可以通过显卡的BIOS版本日期、显存大小来查看这些信息.下载对应的显卡rom

    2. 获得显卡的信息,进入下载https://www.techpowerup.com/vgabios

  • 在虚拟机硬件中添加直通显卡,然后再虚拟机的配置文件中添加显卡rom的加载

    nano /etc/pve/qemu-server/"VMID".conf
    # VMID修改为您的设备ID,VMID = 例如 100、101、102 等
    # 可能需要避免在某些设备上使用“pcie=1”。
    hostpci0: “0x:00”,pcie=1,x-vga=1
    #hostpci1: “0x:00”,pcie=1
    #hostpci2; “0x:00”,pcie=1
    # 在直通的显卡后加入如下参数
    ,romfile=amd580.rom

    reboot
  • 在虚拟机”硬件“里高显示设置为”无“,或修改配置文件。

    nano /etc/pve/qemu-server/”VMID”.conf# VMID = 例如 100、101、102 等# 请注意,将“显示”设置为“无”(vga:无)会导致控制台/noVNC 被禁用 - “任务错误:无法运行 vncproxy”。# 如有必要,恢复到 vmware。vga: none# vga: vmware # 如果使用此选项,请删除“vga: none”。


扫描二维码推送至手机访问。

版权声明:本文由sep15发布,如需转载请注明出处。

本文链接:https://zb.490915.xyz/?id=4

分享给朋友:

“PVE下直通PCI设备通用教程” 的相关文章

北京联通HN8546Q 双线单播实现千兆宽带跑满1200M带宽

北京联通HN8546Q 双线单播实现千兆宽带跑满1200M带宽

最近这两年宽带已经升到1000M了,但是苦恼于光猫有线接口千兆速率限制。单线单播只能跑到940M左右,双线双播虽然可以跑满1200M,但是双播有一个关于分流的问题。实际使用会出现一些奇奇怪怪的问题。现阶段在没有下行接口是2.5G/10G的低成本实现方式就是使用Bonding进行链路聚合,使得从逻辑链...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。