付録C PCI パススルー用ホストの設定

注記

これは、Red Hat Virtualization で SR-IOV を準備およびセットアップする方法を示す一連のトピックの 1 つです。詳細は、SR-IOV のセットアップと設定 を参照してください。

PCI パススルーを有効化すると、デバイスが仮想マシンに直接アタッチされているかのように、ホストのデバイスを仮想マシンで使用できます。PCI パススルー機能を有効化するには、仮想化拡張機能および IOMMU 機能を有効化する必要があります。以下の手順では、ホストを再起動する必要があります。すでにホストが Manager にアタッチされている場合は、最初にホストがメンテナンスモードに設定されていることを確認してください。

前提条件

  • ホストハードウェアが PCI デバイスパススルーおよび割り当ての要件を満たしていることを確認する。詳細は、PCI デバイスの要件 を参照してください。

PCI パススルー用ホストの設定

  1. BIOS の仮想化拡張機能および IOMMU 拡張機能を有効にします。詳細は、Red Hat Enterprise Linux 仮想化の導入および管理ガイドBIOS での INTEL VT-X と AMD-V の仮想化ハードウェア拡張の有効化 を参照してください。
  2. ホストを Manager に追加する際に Hostdev Passthrough & SR-IOV のチェックボックスを選択するか、手動で grub 設定ファイルを編集して、カーネルの IOMMU フラグを有効化します。

  3. GPU パススルーを有効にするには、ホストとゲストシステムの両方で追加の設定手順を実行する必要があります。詳細は、Red Hat Virtualization での仮想マシン用 NVIDIA GPU のセットアップGPU デバイスパススルー: 単一の仮想マシンへのホスト GPU の割り当て を参照してください。

IOMMU の手動での有効化

  1. grub 設定ファイルを編集して IOMMU を有効化します。

    注記

    IBM POWER8 ハードウェアを使用している場合は、デフォルトで IOMMU が有効になっているため、この手順は省略してください。

    • Intel の場合は、マシンを起動し、grub 設定ファイルの GRUB_CMDLINE_LINUX 行の末尾に intel_iommu=on を追加します。

      # vi /etc/default/grub
      ...
      GRUB_CMDLINE_LINUX="nofb splash=quiet console=tty0 ... intel_iommu=on
      ...
    • AMD の場合は、マシンを起動し、grub 設定ファイルの GRUB_CMDLINE_LINUX 行の末尾に amd_iommu=on を追加します。

      # vi /etc/default/grub
      …​
      GRUB_CMDLINE_LINUX="nofb splash=quiet console=tty0 …​ amd_iommu=on
      …​
      注記

      intel_iommu=on または AMD IOMMU が検出される場合は、iommu=pt を追加してみてください。pt オプションでは、パススルーで使用するデバイスの IOMMU のみが有効化され、ホストのパフォーマンスが向上します。ただし、このオプションはすべてのハードウェアでサポートされているわけではありません。pt オプションがお使いのホストで機能しない場合は、以前のオプションに戻してください。

      ハードウェアが割り込みの再マッピングをサポートしていないためにパススルーが失敗する場合、仮想マシンが信頼できるのであれば allow_unsafe_interrupts オプションを有効化することも検討してください。allow_unsafe_interrupts を有効化すると、ホストが仮想マシンからの MSI 攻撃にさらされる可能性があるため、このオプションはデフォルトで有効化されていません。オプションを有効化するには、以下のとおり設定してください。

      # vi /etc/modprobe.d
      options vfio_iommu_type1 allow_unsafe_interrupts=1
  2. grub.cfg ファイルをリフレッシュしてからホストを再起動し、変更を有効にします。

    # grub2-mkconfig -o /boot/grub2/grub.cfg
    # reboot