首页 > 其他分享 >PVE开启IOMMU(硬件直通)

PVE开启IOMMU(硬件直通)

时间:2024-12-14 22:12:53浏览次数:3  
标签:直通 IOMMU blacklist pci PVE vfio iommu

PVE开启IOMMU(硬件直通)

硬件直通

确认主板支持
启用 VT-d
启用 amd-v(amd cpu)
禁用 CSM # i44fx机型建议开启此项,并且设置csm里的其他项目为UEFI
ACS 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.conf
options 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 ExperiencePassmark Performance TestSiSoftware 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 上面的ID

      lspci -n -s 02:00
      01: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 -u 
      reboot
      
    • 检查 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 即为成功
      

添加显卡到虚拟机

创建虚拟机

常规 选项卡请根据自己情况填写

操作系统 选项卡请根据自己情况填写

系统 选项卡

  • 显卡 选择 标准VGASPICEVirtlO-GPUVirGL GPU 任选其一即可
  • 机型 选择 q35
  • Qemu代理 选择 开启(一般会安装的,类似 ESXI agent,用于与 虚拟机通信 获取 虚拟机信息
  • BIOS 选择 OVMF(UEFI) ,并选择 EFI存储

磁盘 选项卡请根据自己情况填写

CPU 选项卡

  • 类别 推荐选择 host
  • 其他请根据自己情况填写

内存 选项卡

  • 推荐关闭 Ballooning设备 ,因为 硬件直通虚拟机 需要保证内存不是共享的。

网络 选项卡请根据自己情况填写

添加显卡到虚拟机

选择 虚拟机 , 并点击 硬件

点击 添加 , 然后点击 PCI设备

选择 原始设备 ,在 设备 中选择需要直通的显卡

启用 所有功能主GPUROM-BarPCI-Express

其中 主GPU 可以不用选择,此选项影响 显卡默认参数(会导致无法启动终端) 所有功能ROM-BarPCI-Express 经测试不影响 nvidia-smi 命令

点击添加

intel GVT-g虚拟化核显

理论上支持intel 5-10代CPU

  • GRUB配置 ,在 GRUB_CMDLINE_LINUX_DEFAULT= 行添加 intel_iommu=on i915.enable_gvt=1

  • 更新Grub,update-grubOrproxmox-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
    
    

标签:直通,IOMMU,blacklist,pci,PVE,vfio,iommu
From: https://www.cnblogs.com/yihuyuan/p/18607284

相关文章

  • PVE教程网址导航
    PVE教程网址导航文字教程佛西博客-全面PVE教程AllinOne开荒指南-踩坑-知乎设置硬盘直通-CSDNPVE7设置显卡直通-张大妈PVE8设置显卡直通-张大妈PVE核显独显直通-知乎Pve_sourcePve-ToolesCSDNPVEsource-X86社区B站教程司波图2022通用PVE系列教程好用斋PVE系列......
  • M68LC302CAF20VCT,MMC2107CFCPU33,MC9S12UF32PUM,S9S12DJ12F1MPVEMCF52235CVM60MAC7121MA
    NXPSemiconductors公司的产品和技术还广泛应用于安全和身份验证领域,包括智能卡、支付系统、身份识别和生物识别技术。此外,该公司还在电源管理、射频技术和传感器领域拥有丰富的经验和专业知识。恩智浦的产品不仅提供高性能和创新的解决方案,还致力于保证产品的安全性。NXPSem......
  • 阿里巴巴国际站运营教程:新版直通车
    直通车的花样越来越多,前台展示位置直通车的位子越来越多,自然流量被挤压,阿里的意思就是尽量少让我们白嫖,所以必须要交保护费~那我们如何开始做呢?发品之类的基础暂且不提,需要的可以看以前的文章。我们开启计划建立在发好产品的的基础上,目前我觉得前期比较有用的就是新品加速......
  • pve7.2虚拟机 lvm磁盘扩容,增加硬盘操作
    参考:https://blog.csdn.net/qq_32429805/article/details/132230402之前安装pve时候只有256的ssd,最近安装的虚拟机较多,给加块闲置硬盘,顺便学习一下,像pve这种虚拟机系统,硬盘应该可以像nas你这样随时增加,而不影响上层应用,我自己也是摸索着做。一、安装好硬盘后打开pve的管理页面,......
  • 验证从vmware企业级虚拟化迁移到pve系统
    今天已经验证了vmware企业级虚拟化迁移到pve系统中,感觉一切都非常的丝滑。比原来简单多了,步骤不繁琐,而且迁移完成后直接就可以开机。pve支棱起来了,vmware估计这次要危险了。添加esxi主机很简单这样就完事了,就可以访问esxi主机了这个按照你的esxi主机访问的用户名密码填写就可以了找......
  • [VMware]ESXI下硬盘的直通方式
      ESXI6.7下直通硬盘给群晖步骤,RDM直通方式! 参考文章:https://rmbz.net/archives/vmware-esxi-passthrough1.进入ESXI6.7web管理后台。开启SSH2.点击存储,选择默认存储(ESXI安装硬盘)。复制位置地址备用; 3.打开SSH工具,登录SSH。登录以后执行以下命令。执行命令1:......
  • pve(‌Proxmox Virtual Environment)-GPT4回答的关于CT容器的一些问题
    文章目录前言一、pve中的ct虚拟机是干嘛用的?**CT(容器)与VM(虚拟机)的区别****在PVE中使用CT的优点**二、怎么使用呢,比如我要启动一个nginx容器?1.**创建一个LXC容器**2.**启动并进入容器**3.**在容器中安装Nginx**4.**访问Nginx**5.**管理容器**三、创建一......
  • pve 8.2.2 解决unsupported Ubuntu version '24.04'
    解决unsupportedUbuntuversion'24.04'问题描述:我在重装pve8.2.2恢复我的容器和虚拟机的时候,发现24.04的容器恢复时出现了如下错误:TASKERROR:unabletorestoreCT104-unsupportedUbuntuversion'24.04'在pve的论坛可以看到这篇文章:Ubuntu24.04-unsupportedUbunt......
  • PVE安装windows7
    ProxmoxVEpve安装win7系统,安装Windows10和Windows11也是一样的流程/设置朗读全文Yourbrowserdoesnotsupporttheaudioelement.有什么用分享整个PVE重新安装Windows7的过程J4125已经有Window2008了,用来承载服务端应用还是妥妥的;可是最近搞硬件,CH341A土豪金24/25......
  • MMU和SMMU IOMMU使用场景和区别,SMMU技术与cache
    1.各种MMUMMU是memorymanageunit内存管理单元;SMMU是systemmemorymanageunit系统内存管理单元;IOMMU和SMMU的功能基本相同,只是不同厂商的叫法2.各种MMU的使用场景MMU是cpu和各种处理器对应的内存管理单元;SMMU/IOMMU是DMA使用的内存管理单元MMU/SMMU的发展是围绕着虚拟......