XCP-ng 8.3 GPUパススルー設定ガイド|正しい設定と注意点

ESXiからXCP-ngへ移行する手順と構成まとめ|仮想化シリーズ案内

2024年現在、XCP-ng 8.3環境でGPUパススルーを実現するためには、いくつか重要なポイントを正確に押さえる必要があります。本記事では、実際に成功した手順に基づき、GPUパススルーを確実に通すための方法を解説します。

なお、XCP-ng 8.3はXen 4.17ベースにバージョンアップした影響で、以前使えていた設定(例:xen-pciback.hideなど)が無効化されています。本記事では、最新版に対応した正しい手順を紹介します。


✅ 目次

  1. はじめに:GPUパススルー成功までの流れ
  2. 事前準備:BIOS設定の確認
    1. SVM (Secure Virtual Machine) を有効化
    2. IOMMU を有効化
    3. SR-IOV Support を有効化
  3. GRUB設定の修正(失敗例・原因・正しい設定)
  4. PCIデバイスの確認と割り当て
  5. 仮想マシンへのGPUパススルー設定
  6. 動作確認と注意点
  7. まとめ

1. はじめに:GPUパススルー成功までの流れ

XCP-ng 8.3では、Xen 4.17ベースのため、従来の情報とは設定方法が異なる部分があります。特に、GRUBのiommuパラメータやデバイスバインド方法に注意が必要です。本記事では、成功した実体験をもとに、正しい設定手順をまとめています。

なお、XCP-ng 8.3はXen 4.17ベースにバージョンアップした影響で、以前使えていた設定(例:xen-pciback.hideなど)が無効化されています。本記事では、最新版に対応した正しい手順を紹介します。


2. 事前準備:BIOS設定の確認

ホストサーバーのBIOSで以下の設定を有効化します。すべて「Enabled」にしてください。

2-1. SVM (Secure Virtual Machine) を有効化

アドバンスド → CPU設定 → SVMをEnabledに設定します。

SVM設定画面

2-2. IOMMU を有効化

アドバンスド → AMD CBS → NBIO Common Options → IOMMUをEnabledに設定します。

IOMMU設定画面

2-3. SR-IOV Support を有効化

アドバンスド → PCI設定 → SR-IOV SupportをEnabledに設定します。

SR-IOV設定画面

3. GRUB設定の修正(失敗例・原因・正しい設定)

❌ 失敗例(iommu=amd-vi、xen-pciback.hide)

過去の情報に基づき、GRUBに以下の設定を行っていました。

multiboot2 /boot/xen.gz iommu=amd-vi dom0_mem=7584M,max:7584M watchdog ucode=scan dom0_max_vcpus=1-16 crashkernel=256M,below=4G

この設定で起動すると、次のようなエラーが発生しました。

(XEN) parameter "iommu" has invalid value "amd-vi", rc=-22!
(XEN) parameter "xen-pciback.hide" unknown!

🔥 問題の原因

  • iommu=amd-vi はLinuxカーネル用であり、Xenハイパーバイザーでは無効なパラメータだったため、エラーが発生しました。
  • xen-pciback.hide は、Xen 4.17以降廃止されており、使用できませんでした。

つまり、Xen専用の正しいパラメータ設定ができていなかったことが原因です。

Xen 4.17以降では、古いパラメータ(例:xen-pciback.hide)が完全に廃止され、正しいパラメータ(iommu=1)のみが有効になっています。

✅ 正しい設定(iommu=1、xen-pciback.hideなし)

修正後の正しい grub.cfg 設定は以下です。

menuentry 'XCP-ng' {
    search --label --set root root-ondswz
    multiboot2 /boot/xen.gz iommu=1 dom0_mem=7584M,max:7584M watchdog ucode=scan dom0_max_vcpus=1-16 crashkernel=256M,below=4G
    module2 /boot/vmlinuz-4.19-xen root=LABEL=root-ondswz ro nolvm hpet=disable console=hvc0 console=tty0 quiet splash
    module2 /boot/initrd-4.19-xen.img
}

修正ポイントまとめ

誤設定正設定理由
iommu=amd-viiommu=1Xenでは1(有効化)を指定する必要あり
xen-pciback.hideあり完全に削除Xen 4.17以降で廃止されたため

✍ 編集手順

vi /boot/efi/EFI/xenserver/grub.cfg
  • すべての multiboot2 /boot/xen.gz 行に、iommu=1 を正しく追記します。
  • xen-pciback.hide 関連の設定があれば、すべて削除します。

編集が終わったら、ホストを再起動します。

🔍 起動後の確認

xl dmesg | grep -i iommu

次のような出力が確認できれば成功です。

(XEN) IOMMU 0 Enabled.

4. PCIデバイスの確認と割り当て

パススルー対象となるGPUのデバイスIDを確認します。

lspci -nn | grep VGA

例)出力例

12:00.0 VGA compatible controller [0300]: Advanced Micro Devices, Inc. [AMD/ATI] Navi 21 [Radeon RX 6800 XT] [1002:73bf] (rev c1)

ここでは 12:00.0 を使用します。

GPUデバイスを割り当て可能にする

xl pci-assignable-add 0000:12:00.0

※起動後に毎回実行する場合、スクリプトやrc.localに登録する方法もあります。


5. 仮想マシンへのGPUパススルー設定

仮想マシン(VM)作成後、GPUデバイスを手動で追加します。

  • XCP-ngCenterまたはXen Orchestraから、対象VMの設定画面を開く
  • GPUデバイス(PCIデバイス)を追加SSHからCUIで GPUを手動アタッチします
  • 仮想マシンを起動
xe vm-param-set other-config:pci=0/0000:XX:XX.X uuid=<VMのUUID>

0/0000:XX:XX.X はパススルーするGPUのPCIアドレスです。

  • さらに、VMのプラットフォーム設定を変更します
xe vm-param-set platform:device-model=qemu-traditional uuid=<VMのUUID>
xe vm-param-set platform:msi=1 uuid=<VMのUUID>
  • 設定完了後、VMを起動します
xe vm-start uuid=<VMのUUID>
  • VM内で、GPUが正しく認識されているか確認します
lspci -nnk

GPUに Kernel driver in use: amdgpu と表示されていれば成功です

Windows VMの場合は、GPUドライバをインストールしてください。Linux VMの場合も、適切なドライバをインストールして認識を確認します。


6. 動作確認と注意点

仮想マシン内で、GPUデバイスが正しく認識されているか確認します。

Linux VMなら:

lspci
lspci -nnk

GPUに対して Kernel driver in use: amdgpu が付いていれば、パススルー成功。

Windows VMなら:

  • デバイスマネージャーを開き、ディスプレイアダプターを確認

⚡ 注意点

  • 仮想マシンのVNCコンソール画面が真っ黒になることがあります(正常動作)
  • SSHやRDPで接続するようにしてください

7. まとめ

XCP-ng 8.3でGPUパススルーを成功させるためには、以下を正確に実施することが重要です。

  • BIOSで SVM(Secure Virtual Machine)IOMMU(I/O Memory Management Unit) を有効化する
  • XCP-ngホストの GRUBにiommu=1を正しく設定 し、不要なパラメータを削除する
  • VM作成後、xeコマンドでGPU(PCIデバイス)を手動アタッチする
  • VMのプラットフォーム設定で
  • device-modelをqemu-traditionalに設定
  • MSI Interruptサポート(msi=1)を有効化
  • VM起動後、ゲストOS内でGPUデバイスが amdgpuドライバ 等で認識されていることを確認する

正しい手順を踏めば、安定してGPUパススルーを実現できます!

コメント

タイトルとURLをコピーしました