跳转到内容跳转到页面导航:上一页 [访问键 p]/下一页 [访问键 n]
适用于 openSUSE Leap 15.5

配置 NVIDIA 卡的 GPU 直通

A.1 简介 编辑源文件

本文档描述了如何将主机上的 NVIDIA GPU 显卡分配给虚拟化的客户机。

A.2 先决条件 编辑源文件

  • GPU 直通仅支持 AMD64/Intel 64 架构。

  • 本文档介绍基于 V100/T1000 NVIDIA 卡的一系列指令,仅供 GPU 计算目的使用。

  • 请验证您使用的是 NVIDIA Tesla 产品——Maxwell、Pascal 或 Volta。

  • 要管理主机系统,您需要在主机上使用另一张显示卡,或者使用功能正常的 SSH 环境。

A.3 配置主机 编辑源文件

A.3.1 验证主机环境 编辑源文件

  1. 请验证主机是否支持 VT-d 技术,以及它是否已在固件设置中启用。

    > dmesg | grep -e "Directed I/O"
    [   12.819760] DMAR: Intel(R) Virtualization Technology for Directed I/O

    如果 VT-d 未在固件中启用,请启用它并重新启动主机。

  2. 请验证主机是否具有额外的 GPU 或 VGA 卡。

    > lspci | grep -i "vga"
    07:00.0 VGA compatible controller: Matrox Electronics Systems Ltd. \
      MGA G200e [Pilot] ServerEngines (SEP1) (rev 05)

    使用 Tesla V100 卡

    > lspci | grep -i nvidia
    03:00.0 3D controller: NVIDIA Corporation GV100 [Tesla V100 PCIe] (rev a1)

    使用 T1000 Mobile(适用于 Dell 5540)

    > lspci | grep -i nvidia
    01:00.0 3D controller: NVIDIA Corporation TU117GLM [Quadro T1000 Mobile] (rev a1)

A.3.2 启用 IOMMU 编辑源文件

IOMMU 默认情况下是禁用的。您需要在 /etc/default/grub 配置文件中启动时启用它。

  1. 对于基于 Intel 的主机

    GRUB_CMDLINE_LINUX="intel_iommu=on iommu=pt rd.driver.pre=vfio-pci"

    对于基于 AMD 的主机

    GRUB_CMDLINE_LINUX="iommu=pt amd_iommu=on rd.driver.pre=vfio-pci"
  2. 保存修改后的 /etc/default/grub 文件后,重新生成主 GRUB 2 配置文件 /boot/grub2/grub.cfg

    > sudo grub2-mkconfig -o /boot/grub2/grub.cfg
  3. 重新启动主机并验证 IOMMU 是否已启用。

    > dmesg |  grep -e DMAR -e IOMMU

A.3.3 阻止 Nouveau 驱动程序 编辑源文件

为了将 NVIDIA 卡分配给 VM 客户机,我们需要阻止主机操作系统加载 NVIDIA GPU 的内置 nouveau 驱动程序。使用以下内容创建文件 /etc/modprobe.d/60-blacklist-nouveau.conf

blacklist nouveau

A.3.4 配置 VFIO 并隔离用于直通的 GPU 编辑源文件

  1. 查找卡的供应商和型号 ID。使用在 第 A.3.1 节,“验证主机环境” 中标识的 Bus 号码,例如 03:00.0

    > lspci -nn | grep 03:00.0
    03:00.0 3D controller [0302]: NVIDIA Corporation GV100 [Tesla V100 PCIe] [10de:1db4] (rev a1)
  2. 使用以下内容创建文件 /etc/modprobe.d/vfio.conf

    options vfio-pci ids=10de:1db4
    Note
    注意

    请验证您的卡是否需要额外的 ids= 参数。对于某些卡,您还必须指定音频设备,因此也必须将设备的 ID 添加到列表中,否则您将无法使用该卡。

A.3.5 加载 VFIO 驱动程序 编辑源文件

您可以加载 VFIO 驱动程序的方法有三种。

A.3.5.1 将驱动程序包含在 initrd 文件中 编辑源文件

  1. 创建文件 /etc/dracut.conf.d/gpu-passthrough.conf 并添加以下内容(注意前导空格)

    add_drivers+=" vfio vfio_iommu_type1 vfio_pci vfio_virqfd"
  2. 重新生成 initrd 文件

    > sudo dracut --force /boot/initrd $(uname -r)

A.3.5.2 将驱动程序添加到自动加载模块的列表中 编辑源文件

创建文件 /etc/modules-load.d/vfio-pci.conf 并添加以下内容

vfio
vfio_iommu_type1
vfio_pci
kvm
kvm_intel

A.3.5.3 手动加载驱动程序 编辑源文件

要在运行时手动加载驱动程序,请执行以下命令

> sudo modprobe vfio-pci

A.3.6 禁用 Microsoft Windows 客户机的 MSR 编辑源文件

对于 Microsoft Windows 客户机,我们建议禁用 MSR(特定于型号的寄存器)以避免客户机崩溃。创建文件 /etc/modprobe.d/kvm.conf 并添加以下内容

options kvm ignore_msrs=1

A.3.7 安装 UEFI 固件 编辑源文件

为了获得适当的 GPU 直通功能,主机需要使用 UEFI 固件启动(即,不使用传统 BIOS 启动序列)。如果尚未安装,请安装 qemu-ovmf

> sudo zypper install qemu-ovmf

A.3.8 重新启动主机 编辑源文件

为了使上述步骤的大多数更改生效,您需要重新启动主机。

> sudo shutdown -r now

A.4 配置客户机 编辑源文件

本节描述了如何配置客户机虚拟机,以便它可以利用主机的 NVIDIA GPU。使用 Virtual Machine Manager 或 virt-install 安装客户机 VM。有关更多详细信息,请参阅 第 9 章,“客户机安装”

A.4.1 客户机配置要求 编辑源文件

在客户机 VM 安装期间,选择 在安装前自定义配置 并配置以下设备

  • 如果可能,请使用 Q35 芯片组。

  • 使用 UEFI 固件安装客户机 VM。

  • 添加以下模拟设备

    图形:Spice 或 VNC

    设备:qxl、VGA 或 Virtio

    有关更多信息,请参阅 第 13.6 节,“视频”

  • 将主机 PCI 设备(例如,我们的示例中的 03:00.0)添加到客户机。有关更多信息,请参阅 第 13.12 节,“将主机 PCI 设备分配给 VM 客户机”

  • 为了获得最佳性能,我们建议对网络卡和存储使用 virtio 驱动程序。

A.4.2 安装图形卡驱动程序 编辑源文件

A.4.2.1 Linux 客户机 编辑源文件

过程 A.1: 基于 RPM 的发行版
  1. http://www.nvidia.com/download/driverResults.aspx/131159/en-us 下载驱动程序 RPM 包。

  2. 安装下载的 RPM 包

    > sudo rpm -i nvidia-diag-driver-local-repo-sles123-390.30-1.0-1.x86_64.rpm
  3. 刷新仓库并安装 cuda-drivers。此步骤与非 SUSE 发行版不同

    > sudo zypper refresh && zypper install cuda-drivers
  4. 重新启动客户机 VM

    > sudo shutdown -r now
过程 A.2: 通用安装程序
  1. 由于安装程序需要编译 NVIDIA 驱动程序模块,因此请安装 gcc-c++kernel-devel 包。

  2. 禁用 Secure Boot,因为 NVIDIA 的驱动程序模块未签名。在 SUSE 发行版上,您可以使用 YaST GRUB 2 模块来禁用 Secure Boot。有关更多信息,请参阅 参考”一书,第 14 章“UEFI(统一可扩展固件接口)”,第 14.1.1 节“在 openSUSE Leap 上的实现”

  3. https://www.nvidia.com/Download/index.aspx?lang=en-us 下载驱动程序安装脚本,使其可执行并运行它以完成驱动程序安装

    > chmod +x NVIDIA-Linux-x86_64-460.73.01.run
    > sudo ./NVIDIA-Linux-x86_64-460.73.01.run
  4. https://developer.nvidia.com/cuda-downloads?target_os=Linux&target_arch=x86_64&target_distro=SLES&target_version=15&target_type=rpmlocal 下载 CUDA 驱动程序并按照屏幕上的说明进行安装。

Note
注意:显示问题

安装 NVIDIA 驱动程序后,Virtual Machine Manager 显示会失去与客户机操作系统的连接。要访问客户机 VM,您必须通过 ssh 登录,切换到控制台界面,或在客户机中安装专用的 VNC 服务器。为了避免屏幕闪烁,请停止并禁用显示管理器

> sudo systemctl stop display-manager && systemctl disable display-manager
过程 A.3: 测试 Linux 驱动程序安装
  1. 更改目录到 CUDA 示例模板

    > cd /usr/local/cuda-9.1/samples/0_Simple/simpleTemplates
  2. 编译并运行 simpleTemplates 文件

    > make && ./simpleTemplates
    runTest<float,32>
    GPU Device 0: "Tesla V100-PCIE-16GB" with compute capability 7.0
    CUDA device [Tesla V100-PCIE-16GB] has 80 Multi-Processors
    Processing time: 495.006000 (ms)
    Compare OK
    runTest<int,64>
    GPU Device 0: "Tesla V100-PCIE-16GB" with compute capability 7.0
    CUDA device [Tesla V100-PCIE-16GB] has 80 Multi-Processors
    Processing time: 0.203000 (ms)
    Compare OK
    [simpleTemplates] -> Test Results: 0 Failures

A.4.2.2 Microsoft Windows 客户机 编辑源文件

Important
重要提示

在安装 NVIDIA 驱动程序之前,您需要使用客户机的 <hidden state='on'/> 指令隐藏 hypervisor,例如

<features>
 <acpi/>
 <apic/>
 <kvm>
  <hidden state='on'/>
 </kvm>
</features>
  1. https://www.nvidia.com/Download/index.aspx 下载并安装 NVIDIA 驱动程序。

  2. https://developer.nvidia.com/cuda-downloads?target_os=Windows&target_arch=x86_64 下载并安装 CUDA 工具包。

  3. 在目录 Program Files\Nvidia GPU Computing Toolkit\CUDA\v10.2\extras\demo_suite 中找到几个 NVIDIA 演示示例。

打印此页面