PVE8.2显卡直通

2024-06-15

最近要在 PVE 上测试 Nanos Unikernel 的 Nvidia 显卡集成,需要事先在 PVE 启用显卡直通功能,网上关于 PVE 显卡直通的文章零零散散,于是用本文记录直通过程。

测试环境

PVE 8.2.2
CPU Intel 12490F
显卡 Nvidia 4060

步骤

  1. 启用 VT-d

    在开始之前务必在 BIOS 中开启 Intel VT-d,这一步骤需要显卡和主板支持,不同 BIOS 的开启方法不同,网上搜索相关教程即可。

    Tips:撰写本文之前,由于盲目自信,认为以前自己装 Hackintosh 开启过 VT-d,导致尝试了几次都没有成功,后来去 BIOS 看了一眼,才发现 VT-d 没有启用。

  2. 修改内核启动参数

    编辑 /etc/default/grub 文件,修改 GRUB_CMDLINE_LINUX_DEFAULT 参数

    # before
    GRUB_CMDLINE_LINUX_DEFAULT="quiet"
    # after
    GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt"
    
  3. 添加内核模块

    编辑 /etc/modules 添加以下内容

    vfio
    vfio_iommu_type1
    vfio_pci
    vfio_virqfd
    
  4. 屏蔽驱动

    编辑 /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
    
  5. 查看显卡的 PCI ID

    这里一共出现两个设备,一个是视频输出,另一个是音频输出,都需要进行绑定

    lspci -nnk | grep -i nvidia
    01:00.0 VGA compatible controller [0300]: NVIDIA Corporation AD107 [GeForce RTX 4060] [10de:2882] (rev a1)
         Kernel modules: nvidiafb, nouveau
    01:00.1 Audio device [0403]: NVIDIA Corporation Device [10de:22be] (rev a1)
    
  1. 绑定 vfio-pci

    编辑 /etc/modprobe.d/vfio.conf,将上一步骤获取的 PCI ID 填入

    softdep nouveau pre: vfio-pci
    softdep snd_hda_intel pre: vfio-pci
    options vfio-pci ids=10de:2882,10de:22be
    
  1. 更新内核

    update-initramfs -u
    update-initramfs: Generating /boot/initrd.img-6.8.4-2-pve
    Running hook script 'zz-proxmox-boot'..
    Re-executing '/etc/kernel/postinst.d/zz-proxmox-boot' in new private mount namespace..
    No /etc/kernel/proxmox-boot-uuids found, skipping ESP sync.
    root@pve:~# update-grub
    Generating grub configuration file ...
    Found linux image: /boot/vmlinuz-6.8.4-2-pve
    Found initrd image: /boot/initrd.img-6.8.4-2-pve
    Found memtest86+ 64bit EFI image: /boot/memtest86+x64.efi
    Adding boot menu entry for UEFI Firmware Settings ...
    done
  2. 重启系统

  3. 检查是否成功绑定

    看到 Kernel driver in use: vfio-pci 字样即为直通成功

    lspci -nnk
    01:00.0 VGA compatible controller [0300]: NVIDIA Corporation AD107 [GeForce RTX 4060] [10de:2882] (rev a1)
        Subsystem: Shenzhen Colorful Yugong Technology and Development Co. AD107 [GeForce RTX 4060] [7377:1541]
        Kernel driver in use: vfio-pci
        Kernel modules: nvidiafb, nouveau
    01:00.1 Audio device [0403]: NVIDIA Corporation Device [10de:22be] (rev a1)
        Subsystem: Shenzhen Colorful Yugong Technology and Development Co. Device [7377:1541]
        Kernel driver in use: vfio-pci
        Kernel modules: snd_hda_intel
    

虚拟机添加直通设备

前往 PVE 控制台,在硬件选项卡中,添加 PCI 设备

2024-08-15-jzkpnbih.png

选择 原始设备,设备选择对应的 Nvidia 显卡,勾选 所有功能

2024-08-15-qebgoalo.png

启动虚拟机,安装 Nvidia 显卡驱动,使用 nvidia-smi 检查一下,有正常输出即为成功。