はじめに
Proxmox VE 8で稼働しているVM(Windows11)のパフォーマンスを少しでも上げたいと思い年末年始の休暇を利用して試行錯誤しました。
同様のことをやりたい人は多そうなのに、なぜかRyzenのGPU(APU)をPassthroughに関する日本語の情報は少なかったので、とりあえずやったことを残しておきます。
最終的にVMからGPUが見えるようになった状態を手順にしてありますが、この手順で実現できるのかどうかは検証できていません。また実際には不要な手順も残っているかもしれません。
環境
我が家のProxmoxサーバはRyzen7 5700Uが搭載されたミニPCで稼働してます。
今回は、このミニPCのRyzen7 5700UのGPUをVM(Windows11)にPassthroughします。
Proxmox VE のバージョン:8.3.2
使用しているkernel:6.8.12-5-pve
Proxmoxサーバの設定変更
ハードウェア(BIOS)設定
PassthroughするためにはBIOS設定も注意する必要ありますが(デフォルト状態で設定されていたので)省略。
IOMMUとかその辺の項目をenableにする必要あり。
grub設定変更
/etc/default/grub のGRUB_CMDLINE_LINUX_DEFAULTを以下に変更する。
GRUB_CMDLINE_LINUX_DEFAULT="amd-pstate=passive quiet video=efifb:off initcall_blacklist=sysfb_init textonly iommu=pt pcie_acs_override=downstream,multifunction"
上記の変更後にupdate-grubを実行
# update-grub
/etc/initramfs-tools/modulesにvfioモジュールを追加
/etc/initramfs-tools/modulesに以下を追加
vfio
vfio_iommu_type1
vfio_pci
/etc/modprobe.d/vfio.confの作成
PCIデバイスのIDを確認
lspciコマンドでVGAデバイスのIDを確認する(04:00.0の部分)。
# lspci -nn |grep VGA
04:00.0 VGA compatible controller [0300]: Advanced Micro Devices, Inc. [AMD/ATI] Lucienne [1002:164c] (rev c1)
Ryzen 5700U関連のデバイスを確認
確認したID(04:00)で絞り込んでRyzen7 5700Uのデバイスを確認する。
# lspci -nn | grep 04:00
04:00.0 VGA compatible controller [0300]: Advanced Micro Devices, Inc. [AMD/ATI] Lucienne [1002:164c] (rev c1)
04:00.1 Audio device [0403]: Advanced Micro Devices, Inc. [AMD/ATI] Renoir Radeon High Definition Audio Controller [1002:1637]
04:00.2 Encryption controller [1080]: Advanced Micro Devices, Inc. [AMD] Family 17h (Models 10h-1fh) Platform Security Processor [1022:15df]
04:00.3 USB controller [0c03]: Advanced Micro Devices, Inc. [AMD] Renoir/Cezanne USB 3.1 [1022:1639]
04:00.4 USB controller [0c03]: Advanced Micro Devices, Inc. [AMD] Renoir/Cezanne USB 3.1 [1022:1639]
04:00.5 Multimedia controller [0480]: Advanced Micro Devices, Inc. [AMD] ACP/ACP3X/ACP6x Audio Coprocessor [1022:15e2] (rev 01)
04:00.6 Audio device [0403]: Advanced Micro Devices, Inc. [AMD] Family 17h/19h HD Audio Controller [1022:15e3]
04:00.7 Signal processing controller [1180]: Advanced Micro Devices, Inc. [AMD] Sensor Fusion Hub [1022:15e4]
vfio.conf作成
ids=にはlspci -nnで確認したIDを書く。VGA(1002:164c)とAudio device(1002:1637)をPassthroughする。
options vfio-pci 1002:164c,1002:1637 disable_vga=1
softdep radeon pre: vfio-pci
softdep amdgpu pre: vfio-pci
softdep snd_hda_intel pre: vfio-pci
BIOSイメージからROMを抽出
ここの情報を参考にROMを抽出。
抽出されたvbios_1002_1636_1.romファイルをProxmox環境の/usr/share/kvm/に配置する。
# cp -p /tmp/extract/output/vbios_1002_1636_1.rom /usr/share/kvm/
/usr/share/kvm/に配置するのは lspciで調べた以下のメッセージにある[1002:164c]に該当するファイルです。
04:00.0 VGA compatible controller [0300]: Advanced Micro Devices, Inc. [AMD/ATI] Lucienne [1002:164c] (rev c1)
同様にAMDGopDriver.romも配置する。(これも抽出できるとおもうのだけど未確認。ここの情報を参考に入手した)
Proxmoxサーバ再起動前の確認
GPU のドライバとしてamdgpuを使用していることを確認。
# lspci -nnk | grep -A 2 04:00.0
04:00.0 VGA compatible controller [0300]: Advanced Micro Devices, Inc. [AMD/ATI] Lucienne [1002:164c] (rev c1)
Subsystem: Advanced Micro Devices, Inc. [AMD/ATI] Lucienne [1002:0123]
Kernel driver in use: amdgpu
Proxmoxサーバを再起動
initramfsを更新した後、OSを再起動する。
# update-initramfs -u -k all
# shutdown -r now
Proxmoxサーバ再起動後の確認
使用しているのドライバがvfio-pciになっていることを確認する。
# lspci -nnk | grep -A 3 04:00.0
04:00.0 VGA compatible controller [0300]: Advanced Micro Devices, Inc. [AMD/ATI] Lucienne [1002:164c] (rev c1)
Subsystem: Advanced Micro Devices, Inc. [AMD/ATI] Lucienne [1002:0123]
Kernel driver in use: vfio-pci
Kernel modules: amdgpu
# lspci -nnk | grep -A 3 04:00.1
04:00.1 Audio device [0403]: Advanced Micro Devices, Inc. [AMD/ATI] Renoir Radeon High Definition Audio Controller [1002:1637]
Subsystem: Advanced Micro Devices, Inc. [AMD/ATI] Renoir Radeon High Definition Audio Controller [1002:1637]
Kernel driver in use: vfio-pci
Kernel modules: snd_hda_intel
VM側の設定(Windows11)
PCIデバイスを追加
WebUIからPCIデバイスを追加する。
その後、定義ファイルを直接編集してROMファイルを指定する。
hostpci0: 0000:04:00.0,pcie=1,romfile=vbios_1002_164c.bin
hostpci1: 0000:04:00.1,pcie=1,romfile=AMDGopDriver.rom
ディスプレイを変更
ディスプレイの設定でグラフィックカードを「VirGL GPU」にしていたら起動できなくなったので「既定」に変更する。
VMを起動して動作確認
GPUが見えていることを確認
デバイスマネージャーを開いて確認する。
ドライバのインストール
AMDのサイトからダウンロードしたWindows用ドライバをインストールする。
RadeonResetBugFixのインストール
RadeonResetBugFixをインストールする。
これをインストールしないと、VMを再起動しようとすると起動できない状態になり、再起動するためにはProxmoxサーバ自体を再起動する必要あるらしい。
これをインストールしていても時々そのような状況になることがある気がする。画面見えないから詳細不明。
RadeonResetBugFixService.exeを実行ファイルを配置するパスにおいて以下を実行する。
RadeonResetBugFixService.exe install
Downloadsディレクトリに配置したまま実行すると、Downloadsディレクトリのパスで登録されてしまうので注意。
VMをシャットダウンして出力先を変更
追加したPCIデバイスをメインGPUに変更。
ディスプレイをnoneに変更。
リモートデスクトップ接続して確認
リモートデスクトップで接続して、GPUがPassthroughされて見えていることを確認。
Passthrough設定後
SunshineをインストールしてMoonlightでリモートアクセスしてます。
軽いSteamゲームであれば動作するので良い感じです。
Sunshine起動時にディスプレイがつながっていないとエラーになるようなので、ミニPCにはHDMIダミープラグを指してます。
参考リンク
https://forum.proxmox.com/threads/pci-gpu-passthrough-on-proxmox-ve-8-installation-and-configuration.130218/
https://forum.proxmox.com/threads/amd-apu-gpu-passthrough.138878/
https://github.com/isc30/ryzen-7000-series-proxmox
https://gist.github.com/matt22207/bb1ba1811a08a715e32f106450b0418a
https://zenn.dev/fukumen/articles/proxmox-gpu-passthrough-cezanne