1.2. ホストから GPU をデタッチ

GPU がホストカーネルドライバーにバインドされている場合、GPU を仮想マシンに追加することはできません。そのため、仮想マシンに追加する前に、GPU デバイスとホストのバインドを解除する必要があります。多くの場合、ホストドライバーは GPU の動的なバインド解除をサポートしていないため、ホストドライバーへのバインドからデバイスを手動で除外することをお勧めします。

手順

  1. ホストで、lspci コマンドを実行して、デバイスのスロット名と ID を識別します。次の例では、NVIDIA Quadro や GRID カードなどのグラフィックスコントローラーが使用されています。

    # lspci -Dnn | grep -i NVIDIA
    0000:03:00.0 VGA compatible controller [0300]: NVIDIA Corporation GK104GL [Quadro K4200] [10de:11b4] (rev a1)
    0000:03:00.1 Audio device [0403]: NVIDIA Corporation GK104 HDMI Audio Controller [10de:0e0a] (rev a1)

    出力は、NVIDIA GK104 デバイスがインストールされていることを示しています。グラフィックスコントローラーとオーディオコントローラーがあり、プロパティーは以下のとおりです。

    • グラフィックスコントローラーのデバイススロット名は 0000:03:00.0、グラフィックスコントローラーの vendor-id:device-id は 10de:11b4 です。
    • オーディオコントローラーのデバイススロット名は 0000:03:00.1、オーディオコントローラーの vendor-id:device-id は 10de:0e0a です。
  2. ホストマシンドライバーが GPU デバイスを使用できないようにします。pci-stub ドライバーで vendor-id:device-id を使用できます。これには、vendor-id:device-id を値として、/etc/sysconfig/grub 設定ファイルにある GRUB_CMDLINX_LINUX 環境変数に pci-stub.ids オプションを追加します。以下はその例です。

    GRUB_CMDLINE_LINUX="crashkernel=auto resume=/dev/mapper/vg0-lv_swap rd.lvm.lv=vg0/lv_root rd.lvm.lv=vg0/lv_swap rhgb quiet intel_iommu=on pci-stub.ids=10de:11b4,10de:0e0a"

    pci-stub のベンダー ID とデバイス ID を追加する場合は、コンマで区切ります。

  3. 以下のとおり、grub2-mkconfig を使用してブートローダー設定を再生成し、この項目を追加します。

    # grub2-mkconfig -o /etc/grub2.cfg
    注記

    UEFI ベースのホストを使用する場合、ターゲットファイルは /etc/grub2-efi.cfg である必要があります。

  4. ホストマシンを再起動します。
  5. IOMMU が有効で、ホストデバイスが pci-stub.ids のリストに追加され、Nouveau がブラックリストに登録されていることを確認します。

    # cat /proc/cmdline
    BOOT_IMAGE=(hd0,msdos1)/vmlinuz-4.18.0-147.el8.x86_64 root=/dev/mapper/vg0-lv_root ro crashkernel=auto resume=/dev/mapper/vg0-lv_swap rd.lvm.lv=vg0/lv_root rd.lvm.lv=vg0/lv_swap rhgb quiet intel_iommu=on 1
    pci-stub.ids=10de:11b4,10de:0e0a 2
    rdblacklist=nouveau 3
1
IOMMU が有効
2
ホストデバイスが pci-stub.ids のリストに追加されている
3
Nouveau はブラックリストに登録されている