搜索

16.7. 分配 GPU 设备

download PDF
要将 GPU 分配给客户端,请使用以下方法之 一 :
  • GPU PCI 设备分配 - 使用此方法,可以从主机中删除 GPU 设备并将其分配给单个客户端。
  • NVIDIA vGPU 分配 - 这个方法可以从物理 GPU 创建多个介质设备,并将这些设备分配为多个客户端。这只在所选 NVIDIA GPU 上被支持,且只能将一个介质设备分配给单个客户端。

16.7.1. GPU PCI 设备分配

Red Hat Enterprise Linux 7 支持将以下基于 PCIe 的 GPU 设备分配为非VGA 图形设备:
  • NVIDIA Quadro K-Series、M-Series、P-Series 以及更新的构架(型号为 2000 系列或更高版本)
  • NVIDIA Tesla K-Series、M-Series 和更高的架构
注意
可附加到虚拟机的 GPU 数量受分配的最大 PCI 设备数的限制,在 RHEL 7 中,当前为 32。但是,将多个 GPU 附加到虚拟机可能会导致客户端上内存映射 I/O(MMIO)出现问题,这可能会导致 GPU 不可用。
要临时解决这个问题,请设置较大的 64 位 MMIO 空间并配置 vCPU 物理地址位,以使扩展 64 位 MMIO 空间可以寻址。
要将 GPU 分配给客户机虚拟机,您必须在主机中启用 I/O 内存管理单元(IOMMU),使用 lspci 命令确定 GPU 设备,将设备从主机分离,将其附加到客户端,并在客户端 - 如以下步骤中所述:

过程 16.13. 在主机机器内核中启用 IOMMU 支持

  1. 编辑内核命令行

    对于 Intel VT-d 系统,IOMMU 通过在内核命令行中添加 intel_iommu=oniommu=pt 参数来激活。对于 AMD-Vi 系统,所需的选项仅为 iommu=pt。要启用这个选项,请编辑或将 GRUB_CMDLINX_LINUX 行添加到 /etc/sysconfig/grub 配置文件,如下所示:
    GRUB_CMDLINE_LINUX="rd.lvm.lv=vg_VolGroup00/LogVol01
    vconsole.font=latarcyrheb-sun16 rd.lvm.lv=vg_VolGroup_1/root
    vconsole.keymap=us $([ -x /usr/sbin/rhcrashkernel-param ]  &&
    /usr/sbin/rhcrashkernel-param || :) rhgb quiet intel_iommu=on iommu=pt"
    
    注意
    有关 IOMMU 的详情,请参考 附录 E, 使用 IOMMU 组
  2. 重新生成引导装载程序配置

    要应用内核命令行的更改,请使用 grub2-mkconfig 命令重新生成引导装载程序配置:
    # grub2-mkconfig -o /etc/grub2.cfg
    请注意,如果您使用基于 UEFI 的主机,则目标文件应当是 /etc/grub2-efi.cfg
  3. 重启主机

    要使更改生效,请重启主机机器:
    # reboot

过程 16.14. 将 GPU 设备绑定到主机物理机器驱动程序中排除

对于 GPU 分配,建议将设备从绑定到主机驱动程序中排除,因为这些驱动程序通常不支持动态未绑定设备。
  1. 识别 PCI 总线地址

    要识别设备的 PCI 总线地址和 ID,请运行以下 lspci 命令。在本例中,使用的是 VGA 控制器,如 NVIDIA Quadro 或 GRID 卡:
    # lspci -Dnn | grep VGA
    0000:02:00.0 VGA compatible controller [0300]: NVIDIA Corporation GK106GL [Quadro K4000] [10de:11fa] (rev a1)
    
    生成的搜索显示,这个设备的 PCI 总线地址为 0000:02:00.0,该设备的 PCI ID 为 10de:11fa。
  2. 防止原生主机机器驱动程序使用 GPU 设备

    要防止原生主机机器驱动程序使用 GPU 设备,您可以使用带有 pci-stub 驱动程序的 PCI ID。要做到这一点,将 pci-stub.ids 选项及其值附加到位于 /etc/sysconfig/grub 配置文件中的 GRUB_CMDLINX_LINUX 行,例如:
    GRUB_CMDLINE_LINUX="rd.lvm.lv=vg_VolGroup00/LogVol01
    vconsole.font=latarcyrheb-sun16 rd.lvm.lv=vg_VolGroup_1/root
    vconsole.keymap=us $([ -x /usr/sbin/rhcrashkernel-param ]  &&
    /usr/sbin/rhcrashkernel-param || :) rhgb quiet intel_iommu=on iommu=pt pci-stub.ids=10de:11fa"
    
    要为 pci-stub 添加额外的 PCI ID,使用逗号分隔它们。
  3. 重新生成引导装载程序配置

    使用 grub2-mkconfig 来重新生成引导装载程序配置,使其包含这个选项:
    # grub2-mkconfig -o /etc/grub2.cfg
    请注意,如果您使用基于 UEFI 的主机,则目标文件应当是 /etc/grub2-efi.cfg
  4. 重启主机机器

    要使更改生效,重启主机机器:
    # reboot

过程 16.15. 可选:编辑 GPU IOMMU 配置

在附加 GPU 设备前,可能需要编辑其 IOMMU 配置以便 GPU 在客户机上正常工作。
  1. 显示 GPU 的 XML 信息

    要以 XML 格式显示 GPU 的设置,您首先需要将其 PCI 总线地址转换为兼容 libvirt 的格式,方法是附加 pci_ 和将分隔符转换为下划线。在本例中,通过 0000:02:00.0 总线地址标识的 GPU PCI 设备( 如上一步中获取)将变为 pci_0000_02_00_0。使用 virsh nodedev-dumpxml 的设备 libvirt 地址显示其 XML 配置:
    # virsh nodedev-dumpxml pci_0000_02_00_0
    
    <device>
     <name>pci_0000_02_00_0</name>
     <path>/sys/devices/pci0000:00/0000:00:03.0/0000:02:00.0</path>
     <parent>pci_0000_00_03_0</parent>
     <driver>
      <name>pci-stub</name>
     </driver>
     <capability type='pci'>
      <domain>0</domain>
      <bus>2</bus>
      <slot>0</slot>
      <function>0</function>
      <product id='0x11fa'>GK106GL [Quadro K4000]</product>
      <vendor id='0x10de'>NVIDIA Corporation</vendor>
         <!-- pay attention to the following lines -->
      <iommuGroup number='13'>
       <address domain='0x0000' bus='0x02' slot='0x00' function='0x0'/>
       <address domain='0x0000' bus='0x02' slot='0x00' function='0x1'/>
      </iommuGroup>
      <pci-express>
       <link validity='cap' port='0' speed='8' width='16'/>
       <link validity='sta' speed='2.5' width='16'/>
      </pci-express>
     </capability>
    </device>
    
    注意 XML 的 <iommuGroup> 元素。iommuGroup 表示一组由于 IOMMU 功能和 PCI 总线拓扑考虑了与其他设备隔离的设备。iommuGroup 内的所有端点设备(认为不是 PCIe 根端口、网桥或交换机端口的设备)都需要从原生主机驱动程序中绑定,才能分配到客户机。在上面的示例中,组由 GPU 设备(0000:02:00.0)和 companion 音频设备(0000:02:00.1)组成。如需更多信息,请参阅 附录 E, 使用 IOMMU 组
  2. 调整 IOMMU 设置

    在本例中,不支持分配 NVIDIA 音频功能,因为存在旧中断支持的硬件问题。另外,在没有 GPU 本身的情况下,G GPU 音频功能通常不有用。因此,为了将 GPU 分配给客户机,必须首先将音频功能与原生主机驱动程序分离。这可使用以下方法之一完成:

过程 16.16. 附加 GPU

GPU 可使用以下任一方法附加到客户端:
  1. 使用 虚拟机管理器 接口.详情请查看 第 16.1.2 节 “使用 virt-manager 分配 PCI 设备”
  2. 为 GPU 创建 XML 配置片段并使用 virsh attach-device 附加它:
    1. 为该设备创建 XML,如下所示:
      
      <hostdev mode='subsystem' type='pci' managed='yes'>
       <driver name='vfio'/>
       <source>
        <address domain='0x0000' bus='0x02' slot='0x00' function='0x0'/>
       </source>
      </hostdev>
      
    2. 将它保存到文件中,并运行 virsh attach-device [domain] [file] --persistent,以在客户机配置中包含 XML。请注意,除了客户机机器中现有仿真图形设备外,还添加了分配的 GPU。分配的 GPU 作为虚拟机中的辅助图形设备进行处理。不支持作为主图形设备分配,不应删除 guest XML 中的模拟图形设备。
  3. 使用 virsh edit 命令编辑客户机 XML 配置并手动添加相应的 XML 段。

过程 16.17. containerruntimeodify 在客户机上的 Xorg 配置

客户机上的 GPU PCI 总线地址将与主机上的不同。要启用主机正确使用 GPU,将 guest 的 Xorg 显示服务器配置为使用分配的 GPU 地址:
  1. 在客户机中,使用 lspci 命令确定 GPU 的 PCI 总线适配器:
    # lspci | grep VGA
    00:02.0 VGA compatible controller: Device 1234:111
    00:09.0 VGA compatible controller: NVIDIA Corporation GK106GL [Quadro K4000] (rev a1)
    
    在本例中,总线地址为 00:09.0。
  2. 在客户机上的 /etc/X11/xorg.conf 文件中,在检测到的地址添加一个 BusID 选项,如下所示:
    		Section "Device"
    		    Identifier     "Device0"
    		    Driver         "nvidia"
    		    VendorName     "NVIDIA Corporation"
    		    BusID          "PCI:0:9:0"
    		EndSection
    
    重要
    如果第 1 步中检测到的总线地址是十六进制的,您需要将分隔符之间的值转换为十进制系统。例如,00:0a.0 应转换为 PCI:0:10:0。
注意
当在客户机中使用分配的 NVIDIA GPU 时,只支持 NVIDIA 驱动程序。其他驱动程序可能无法正常工作,并可能会生成错误。对于 Red Hat Enterprise Linux 7 客户机,可以在安装期间在内核命令行中使用 modprobe.blacklist=nouveau 选项将 nouveau 驱动程序列入黑名单。 有关其他客户虚拟机的详情,请查看操作系统的特定文档。
根据载入 NVIDIA 驱动程序的客户机操作系统,客户机可能会同时使用仿真图形和分配的图形支持,也可以禁用模拟图形。请注意,对分配的图形帧缓冲的访问不是由 virt-manager 等应用程序提供的。如果分配的 GPU 未连接到物理显示,则可能需要基于 guest 的删除解决方案来访问 GPU 桌面。与所有 PCI 设备分配一样,不支持迁移带有分配 GPU 的客户机,每个 GPU 都由单个虚拟机所有。根据客户端操作系统,可能会对 GPU 的热插拔支持可用。
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.