2024年現在、XCP-ng 8.3環境でGPUパススルーを実現するためには、いくつか重要なポイントを正確に押さえる必要があります。本記事では、実際に成功した手順に基づき、GPUパススルーを確実に通すための方法を解説します。
なお、XCP-ng 8.3はXen 4.17ベースにバージョンアップした影響で、以前使えていた設定(例:xen-pciback.hide
など)が無効化されています。本記事では、最新版に対応した正しい手順を紹介します。
✅ 目次
- はじめに:GPUパススルー成功までの流れ
- 事前準備:BIOS設定の確認
- SVM (Secure Virtual Machine) を有効化
- IOMMU を有効化
- SR-IOV Support を有効化
- GRUB設定の修正(失敗例・原因・正しい設定)
- PCIデバイスの確認と割り当て
- 仮想マシンへのGPUパススルー設定
- 動作確認と注意点
- まとめ
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に設定します。

2-2. IOMMU を有効化
アドバンスド → AMD CBS → NBIO Common Options → IOMMUをEnabledに設定します。

2-3. SR-IOV Support を有効化
アドバンスド → PCI設定 → SR-IOV SupportをEnabledに設定します。

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-vi | iommu=1 | Xenでは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パススルーを実現できます!
コメント