一、搭建背景#
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 并回车
-
输入 S 并回车
-
输入 0 并回车退出到主菜单,然后再退出工具
-
在
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 制作启动 U 盘,引导项选择 U 盘启动,按照提示下一步即可,本文略。
六、修改 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 分组是否基本为一设备一分组
root@pve:~# chmod +x ~/iommu_group.sh && ./iommu_group.sh
七、绑定 PCI 设备#
1. 列出本机所有 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 识别不到集显,画面无输出。要解决这个问题有两种方法:
-
手动在设备管理器中弹出显卡后关机,但是不太优雅。
-
安装 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 即将在五秒后关机...
ping 127.0.0.1 -n 6 > nul
shutdown /s /t 0
2-5. 保存后以管理员身份运行 bat 即可自动关机啦~