1.2. ホストから GPU をデタッチ
GPU がホストカーネルドライバーにバインドされている場合、GPU を仮想マシンに追加することはできません。そのため、仮想マシンに追加する前に、GPU デバイスとホストのバインドを解除する必要があります。多くの場合、ホストドライバーは GPU の動的なバインド解除をサポートしていないため、ホストドライバーへのバインドからデバイスを手動で除外することをお勧めします。
手順
ホストで、
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
です。
-
グラフィックスコントローラーのデバイススロット名は
ホストマシンドライバーが 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 を追加する場合は、コンマで区切ります。
grub2-mkconfig を使用して、ブートローダー設定を再生成し、この項目を追加します。
# grub2-mkconfig -o /etc/grub2.cfg
注記UEFI ベースのホストを使用する場合、ターゲットファイルは
/etc/grub2-efi.cfg
である必要があります。- ホストマシンを再起動します。
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