一、搭建背景#
AMD Ryzen 7 5700G は、AMD Radeon RX Vega 8 を統合しており、Vega アーキテクチャ(第 5 世代 GCN)に基づいて、8 つの CU を持ち、合計 512 のストリームプロセッサを備えています。この性能が 750ti とほぼ同等で、Windows 11 に直接通すことができれば、別途グラフィックカードを購入する必要がなくなり、電気代も節約できます。
この記事は大まかにPVE7 AMD 5700G 核显直通 (iGPU Passthrough)を参考にしています。
二、软硬件环境#
-
CPU: AMD Ryzen 7 5700G
-
Motherboard: MSI MAG B550M MORTAR WIFI
-
BIOS Version: 7C94v1C(E7C94AMS.1C0)
-
PVE Version: 7.4-13
-
PVE Manager Version: pve-manager/7.4-13/46c37d9c
-
Linux Kernel Version: Linux 5.15.107-2-pve #1 SMP PVE 5.15.107-2 (2023-05-10T09:10Z)
三、更改 BIOS 设置#
-
BIOS をデフォルト設定にリセット
Settings\Save & Exit\Restore Defaults -
S/3Modern Standby Support を無効にする(オプション)
Settings\Advanced\ACPI Settings\S/3Modern Standby Support [Disabled] -
Initiate Graphic Adaptor を外部グラフィックカードに設定
Settings\Advanced\Initiate Graphic Configuration\Initiate Graphic Adaptor [PEG] -
Integrated Graphics を Force Mode に設定
Settings\Advanced\Initiate Graphic Configuration\Integrated Graphics [Force] -
UMA Frame Buffer Size(ビデオメモリサイズ)を 2G/4G に設定
Settings\Advanced\Initiate Graphic Configuration\UMA Frame Buffer Size [4G] -
マザーボードの IOMMU を有効にする
Overclocking\Advanced CPU Configuration\AMD CBS\IOMMU [Enabled] -
CPU 仮想化を有効にする
Overclocking\Advanced CPU Configuration\SVM Mode [Enabled] -
保存して終了
四、导出集显 VBIOS 并备用#
-
MSI B550M MORTAR WIFI サポートページを開き、対応する BIOS バージョンのファイルをダウンロードして解凍し、BIOS ソースファイルを取得します。
-
UEFI BIOS Updaterをダウンロードし、解凍後、最初のステップで取得した BIOS ファイルを UBU ディレクトリに置き、UBU.bat を実行します。
-
メインメニューに入ったら、2 を入力して Enter を押します。
-
S を入力して Enter を押します。
-
0 を入力して Enter を押してメインメニューに戻り、その後ツールを終了します。
-
UBU_v1.79.17\Extracted\VBIOS\017.010.000.030.000000
内にあるvbios_1638.dat
を見つけます。これが 5700G の集成 VBIOS であり、保管しておきます。 -
CPU が 5700G でない場合は、
UBU_v1.79.17\Files\AMD\VBIOS\_Listvbios.txt
でアーキテクチャに基づいて対応する VBIOS のファイル名を探します。
五、安装 PVE#
Rufus を使用してブート USB を作成し、ブート項目で USB から起動を選択し、指示に従って次に進むだけです。この記事では省略します。
六、修改 PVE 内核#
-
SSH で PVE ホストに接続します。
-
GRUB を変更します。
root@pve:~# nano /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="quiet"
をGRUB_CMDLINE_LINUX_DEFAULT="quiet iommu=pt initcall_blacklist=sysfb_init pcie_acs_override=downstream,multifunltifunction"
に変更し、保存して終了します。
- GRUB を更新します。
root@pve:~# update-grub
- カーネルモジュールを追加します。
root@pve:~# nano /etc/modules
ファイルを以下のように変更します。
# /etc/modules: kernel modules to load at boot time.
#
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line. Lines beginning with "#" are ignored.
vfio
vfio_pci
vfio_virqfd
vfio_iommu_type1
保存して終了します。
- デバイスドライバを無効にします。
root@pve:~# nano /etc/modprobe.d/pve-blacklist.conf
ファイルに以下を書き込みます。
blacklist amdgpu
blacklist snd_hda_intel
保存して終了します。
- 変更した設定を更新します。
root@pve:~# update-initramfs -u -k all
-
マシンを再起動します。
-
IOMMU グループの状況を確認します。
root@pve:~# nano ~/iommu_group.sh
ファイルに以下を書き込みます。
#!/bin/bash
shopt -s nullglob
for g in $(find /sys/kernel/iommu_groups/* -maxdepth 0 -type d | sort -V); do
echo "IOMMU Group ${g##*/}:"
for d in $g/devices/*; do
echo -e "\t$(lspci -D -nns ${d##*/})"
done;
done;
保存して終了します。
- ファイルに実行権限を追加し、実行して IOMMU グループが基本的に 1 デバイス 1 グループであるか確認します。
root@pve:~# chmod +x ~/iommu_group.sh && ./iommu_group.sh
七、绑定 PCI 设备#
- このマシンのすべての PCI デバイスをリストします。
root@pve:~# lspci -D -nnk
VGA compatible controller
を含む行を見つけます:
0000:30:00.0 VGA compatible controller [0300]: Advanced Micro Devices, Inc. [AMD/ATI] Cezanne [1002:1638] (rev c8)
Subsystem: Advanced Micro Devices, Inc. [AMD/ATI] Device [1002:1636]
Kernel modules: amdgpu
集成グラフィックの PCI ID 0000:30:00.0
と集成グラフィックのデバイス ID [1002:1638]
をメモしておきます。ID はデバイスによって異なる場合があります。
- PCI デバイスを vfio にバインドします。
root@pve:~# nano //etc/modprobe.d/pt.conf
ファイルに以下を書き込みます。
options vfio-pci ids=xxxx:xxxx #"xxxx:xxxx"はあなたの集成グラフィックデバイスID
options vfio-pci disable_idle_d3=1
保存して終了します。
- 再度カーネルを更新します。
root@pve:~# update-initramfs -u -k all
- マシンを再起動します。
八、安装 Windows 11 虚拟机#
PVE で Windows 仮想マシンをインストールするためのチュートリアルはたくさんありますが、この記事では集成グラフィックのパススルーに必要な変更のみを示します。まず PVE のウェブコンソールに入り、新しい仮想マシンを作成し、以下の図を参考に設定します。
マシンタイプは q35 でなければならず、BIOS は SeaBIOS で、SCSI コントローラーは VirtIO SCSI Single を選択してより良いパフォーマンスを得る必要があります。TPM ストレージを追加する必要があります。
同様に、ディスクバスを VirtIO Block に設定してより良いパフォーマンスを得ます。
CPU カテゴリは host を選択する必要があります。
初回インストール時はネットワークを切断して自動更新 / ドライバのインストールを避け、モデルは VirtIO を選択してより良いパフォーマンスを得ます。
Windows 自体は VirtIO のサポートを含んでいないため、VirtIO ドライバを ISO 形式で CD にマウントする必要があります。仮想マシンをクリックして詳細ページに入り、ハードウェアタブを選択し、CD ドライブを追加します。
仮想マシンを起動し、Windows をインストールします。ドライブを選択する際にドライブリストが空であることに気づいたら、ドライバを読み込むオプションをクリックし、VirtIO ドライブを選択して、ディレクトリCD Drive:\amd64\w11
を見つけ、w11 フォルダを選択して確定します。ドライバの読み込みが完了すると、マウントされたハードディスクがリストに表示されます。続けてインストールします。
九、修改 Windows 设置#
-
設定に入り、更新を一時停止します。
-
高度なシステム設定を開き、ハードウェアタブでデバイスインストール設定をクリックし、自動ダウンロードを無効にします。
-
VirtIO ドライバをインストールします。
マウントされた CD ドライブを開き、virtio-win-gt-x64.msi
を実行し、デフォルトでインストールします。 -
(オプション)リモートデスクトップを開きます。
-
シャットダウンします。
十、设置显卡直通#
- 抽出した VBIOS を PVE にアップロードします。
scp .\vbios_1638.dat root@192.168.3.2:/usr/share/kvm
-
仮想マシンに PCI デバイスを追加します。
-
以前見つけた集成グラフィックの PCI ID
0000:30:00.0
を選択し、主 GPU および PCI-Express にチェックを入れてから追加します。
-
仮想マシンの設定ファイルを変更します。
root@pve:~# nano /etc/pve/qemu-server/104.conf #104はあなたの仮想マシンID
cpu と hostpci0 の項目を以下のように変更します。
cpu: host,hidden=1
hostpci0: 0000:30:00.0,pcie=1,x-vga=1,romfile=vbios_1638.dat
保存して終了します。
-
仮想マシンのハードウェアの表示を無に変更します。
-
ネットワーク接続を解除し、起動します。RDP を使用して Windows 11 仮想マシンに接続し、AMD グラフィックドライバをインストールします。
-
完了です!
十一、解决一些 Bug#
Proxmox VE 7.x で、AMD Vega 集成グラフィックを Windows 環境にパススルーすると、正常にシャットダウンした後に再起動できない問題が発生します。再起動後に Windows が集成グラフィックを認識できず、画面に出力がありません。この問題を解決する方法は 2 つあります。
-
デバイスマネージャーで手動でグラフィックカードを取り外してからシャットダウンしますが、あまり優雅ではありません。
-
Devcon をインストールし、bat ファイルを作成して集成グラフィックを自動的に取り外してシャットダウンします。
2-1. GitHub からDevcon Installerを取得します。
2-2. 管理者として Devcon Installer を実行し、プロキシがある場合はUpdate Sources
を選択してソースを更新します。
2-3.Add DevCon to environment PATH
にチェックを入れ、Windows 11 version 22H2
を選択し、x64
アーキテクチャを選択してインストールします。
2-4. bat ファイルを作成し、以下の内容を入力します。
@echo off
chcp 65001
echo グラフィックカードを取り外しています...
set devmgr_show_nonpresent_devices=1
start devmgmt.msc
echo しばらくお待ちください...
ping 127.0.0.1 -n 6 > nul
echo グラフィックカードをアンインストールしています...
devcon.exe remove "PCI\VEN_1002&DEV_1638" #あなたの集成グラフィックデバイスIDを入力
echo 5秒後にシャットダウンします...
ping 127.0.0.1 -n 6 > nul
shutdown /s /t 0
2-5. 保存後、管理者として bat を実行すれば自動的にシャットダウンできます。