Menu Close
Settings Close

Language and Page Formatting Options

15.2. 管理 NVIDIA vGPU 设备

vGPU 功能可使物理 NVIDIA GPU 设备划分为多个虚拟设备,称为 介质设备。然后可将这些 mediated devices 分配给多个虚拟机(VM)作为虚拟 GPU。因此,这些虚拟机可以共享单个物理 GPU 的性能。

重要

为虚拟机分配物理 GPU,使用介质设备或不使用介质设备,使得主机无法使用 GPU。

15.2.1. 设置 NVIDIA vGPU 设备

要设置 NVIDIA vGPU 功能,您需要为 GPU 设备下载 NVIDIA vGPU 驱动程序,创建介质设备,并将其分配给预期的虚拟机。具体步骤请查看以下说明。

先决条件

  • 您的 GPU 支持 vGPU 介质设备。有关支持创建 vGPU 的 NVIDIA GPU 的最新列表,请参阅 NVIDIA vGPU 软件文档

    • 如果您不知道您的主机正在使用哪个 GPU,请安装 lshw 软件包并使用 lshw -C display 命令。以下示例显示系统使用与 vGPU 兼容的 NVIDIA Tesla P4 GPU。

      # lshw -C display
      
      *-display
             description: 3D controller
             product: GP104GL [Tesla P4]
             vendor: NVIDIA Corporation
             physical id: 0
             bus info: pci@0000:01:00.0
             version: a1
             width: 64 bits
             clock: 33MHz
             capabilities: pm msi pciexpress cap_list
             configuration: driver=vfio-pci latency=0
             resources: irq:16 memory:f6000000-f6ffffff memory:e0000000-efffffff memory:f0000000-f1ffffff

流程

  1. 下载 NVIDIA vGPU 驱动程序并在您的系统中安装它们。具体步骤请查看 NVIDIA 文档
  2. 如果 NVIDIA 软件安装程序没有创建 /etc/modprobe.d/nvidia-installer-disable-nouveau.conf 文件,请在 /etc/modprobe.d/ 中创建任意名称的 conf 文件,并在文件中添加以下行:

    blacklist nouveau
    options nouveau modeset=0
  3. 为当前内核重新生成初始 ramdisk,然后重新启动。

    # dracut --force
    # reboot
  4. 检查内核是否已加载 nvidia_vgpu_vfio 模块,并且 nvidia-vgpu-mgr.service 服务正在运行。

    # lsmod | grep nvidia_vgpu_vfio
    nvidia_vgpu_vfio 45011 0
    nvidia 14333621 10 nvidia_vgpu_vfio
    mdev 20414 2 vfio_mdev,nvidia_vgpu_vfio
    vfio 32695 3 vfio_mdev,nvidia_vgpu_vfio,vfio_iommu_type1
    
    # systemctl status nvidia-vgpu-mgr.service
    nvidia-vgpu-mgr.service - NVIDIA vGPU Manager Daemon
       Loaded: loaded (/usr/lib/systemd/system/nvidia-vgpu-mgr.service; enabled; vendor preset: disabled)
       Active: active (running) since Fri 2018-03-16 10:17:36 CET; 5h 8min ago
     Main PID: 1553 (nvidia-vgpu-mgr)
     [...]

    另外,如果基于 NVIDIA Ampere GPU 设备创建 vGPU,请确保为物理 GPU 启用虚拟功能。具体步骤请查看 NVIDIA 文档

  5. 生成设备 UUID。

    # uuidgen
    30820a6f-b1a5-4503-91ca-0c10ba58692a
  6. 根据检测到的 GPU 硬件,使用 mediated 设备配置准备 XML 文件。例如,以下命令会在 0000:01:00.0 PCI 总线上运行的 NVIDIA Tesla P4 卡中配置 nvidia-63 vGPU 类型的介质设备,并使用上一步中生成的 UUID。

    <device>
        <parent>pci_0000_01_00_0</parent>
        <capability type="mdev">
            <type id="nvidia-63"/>
            <uuid>30820a6f-b1a5-4503-91ca-0c10ba58692a</uuid>
        </capability>
    </device>
  7. 根据您准备的 XML 文件定义 vGPU 介质设备。例如:

    # virsh nodedev-define vgpu-test.xml
    Node device mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0 created from vgpu-test.xml
  8. 可选:验证介质设备是否被列为 inactive。

    # virsh nodedev-list --cap mdev --inactive
    mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0
  9. 启动您创建的 vGPU 介质设备。

    # virsh nodedev-start mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0
    Device mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0 started
  10. 可选:确保介质设备被列为 active。

    # virsh nodedev-list --cap mdev
    mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0
  11. 将 vGPU 设备设置为在主机重启后自动启动

    # virsh nodedev-autostart mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0
    Device mdev_d196754e_d8ed_4f43_bf22_684ed698b08b_0000_9b_00_0 marked as autostarted
  12. 将 mediated 设备附加到要共享 vGPU 资源的虚拟机。要做到这一点,请将以下行以及之前生成的 UUID 添加到虚拟机 XML 配置的 <devices/> 部分。

    <hostdev mode='subsystem' type='mdev' managed='no' model='vfio-pci' display='on'>
      <source>
        <address uuid='30820a6f-b1a5-4503-91ca-0c10ba58692a'/>
      </source>
    </hostdev>

    请注意,每个 UUID 每次只能分配给一个虚拟机。另外,如果虚拟机没有 QEMU 视频设备,如 virtio-vga,在 <hostdev> 行中添加 ramfb='on' 参数。

  13. 有关在分配的虚拟机上可用的 vGPU 介质设备的完整功能,请在虚拟机上设置 NVIDIA vGPU 客户端软件许可。有关详情和说明,请参阅 NVIDIA Virtual GPU Software License Server User Guide

验证

  1. 查询您创建的 vGPU 的功能,并确保它列为 active 和 persistent。

    # virsh nodedev-info mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0
    Name:           virsh nodedev-autostart mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0
    Parent:         pci_0000_01_00_0
    Active:         yes
    Persistent:     yes
    Autostart:      yes
  2. 启动虚拟机并验证客户端操作系统是否检测到 mediated device 作为 NVIDIA GPU。例如,如果虚拟机使用 Linux:

    # lspci -d 10de: -k
    07:00.0 VGA compatible controller: NVIDIA Corporation GV100GL [Tesla V100 SXM2 32GB] (rev a1)
            Subsystem: NVIDIA Corporation Device 12ce
            Kernel driver in use: nvidia
            Kernel modules: nouveau, nvidia_drm, nvidia

已知问题

  • 将 NVIDIA vGPU 介质设备分配给使用 RHEL 9 客户机操作系统的虚拟机当前禁用该虚拟机上的 Wayland 会话,并改为载入 Xorg 会话。这是因为 NVIDIA 驱动程序和 Wayland 之间的不兼容。

其他资源