Udon's xLog

Udon's xLog

乌冬的xLog分站,随想随记。
telegram
steam
twitter

AMD 5700G在Proxmox VE 7.x 中安裝Win11並設置顯卡直通

一、搭建背景#

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 设置#

  1. 重置 BIOS 为默认设置
    Settings\Save & Exit\Restore Defaults

  2. 关闭 S/3Modern Standby Support(可选)
    Settings\Advanced\ACPI Settings\S/3Modern Standby Support [Disabled]

  3. 设置 Initiate Graphic Adaptor 为外置显卡
    Settings\Advanced\Initiate Graphic Configuration\Initiate Graphic Adaptor [PEG]

  4. 设置 Integrated Graphics 为 Force Mode
    Settings\Advanced\Initiate Graphic Configuration\Integrated Graphics [Force]

  5. 设置 UMA Frame Buffer Size(显存大小)为 2G/4G
    Settings\Advanced\Initiate Graphic Configuration\UMA Frame Buffer Size [4G]

  6. 打开主板 IOMMU
    Overclocking\Advanced CPU Configuration\AMD CBS\IOMMU [Enabled]

  7. 打开 CPU 虚拟化
    Overclocking\Advanced CPU Configuration\SVM Mode [Enabled]

  8. 保存并退出

四、导出集显 VBIOS 并备用#

  1. 打开MSI B550M MORTAR WIFI 支持页面 ,下载对应 BIOS 版本的文件并解压得到 BIOS 源文件

  2. 下载UEFI BIOS Updater ,解压后将第一步的 BIOS 文件放至 UBU 目录中,运行 UBU.bat
    WindowsTerminal_5HjPXtAnx5

  3. 进入主菜单后输入 2 并回车
    WindowsTerminal_Ik2Hu7Lddv

  4. 输入 S 并回车
    WindowsTerminal_OJOTe25l7c

  5. 输入 0 并回车退出到主菜单,然后再退出工具
    WindowsTerminal_YzvQG5MbWF

  6. UBU_v1.79.17\Extracted\VBIOS\017.010.000.030.000000 中找到 vbios_1638.dat ,这就是 5700G 集显的 VBIOS,保留备用

  7. 如果 CPU 并非 5700G,则可在 UBU_v1.79.17\Files\AMD\VBIOS\_Listvbios.txt 中按照架构查找对应 VBIOS 的文件名

五、安装 PVE#

Rufus 制作启动 U 盘,引导项选择 U 盘启动,按照提示下一步即可,本文略。

六、修改 PVE 内核#

  1. 用 SSH 连接至 PVE 主机

  2. 修改 GRUB

root@pve:~# nano /etc/default/grub
  1. GRUB_CMDLINE_LINUX_DEFAULT="quiet" 改为 GRUB_CMDLINE_LINUX_DEFAULT="quiet iommu=pt initcall_blacklist=sysfb_init pcie_acs_override=downstream,multifunltifunction" ,保存并退出

Termius_bqasr4Ick1

  1. 更新 GRUB
root@pve:~# update-grub
  1. 添加内核模块
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

保存并退出

  1. 禁用设备驱动
root@pve:~# nano /etc/modprobe.d/pve-blacklist.conf

在文件中写入:

blacklist amdgpu
blacklist snd_hda_intel

保存并退出

  1. 更新修改的设置
root@pve:~# update-initramfs -u -k all
  1. 重启机器

  2. 查看 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;

保存并退出

  1. 将文件增加执行权限并运行,查看 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 可能会因为设备不同而不同

  1. 绑定 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

保存并退出

  1. 再次更新内核
root@pve:~# update-initramfs -u -k all
  1. 重启机器

八、安装 Windows 11 虚拟机#

因为 PVE 安装 Windows 虚拟机的教程很多,本篇只展示针对集显直通而作的一些必需的更改。首先进入 PVE 网页控制台,新建一台虚拟机,然后参照下图配置。

chrome_ukgU94fVBT

chrome_eLPxn9Q1nn
机型必须是 q35,BIOS 必须是 SeaBIOS,SCSI 控制器选择 VirtIO SCSI Single 来获得更好的性能,TPM 储存必须添加。

chrome_celhivVbgi
同理,磁盘总线设置为 VirtIO Block 来获得更好的性能。

chrome_Nqoqe9oCHX

CPU 类别必须选择 host。

chrome_awvrTiQ6xl

初次安装时将网络断开避免自动安装更新 / 驱动,模型选择 VirtIO 来获得更好的性能。

chrome_TyjtFZe33c

因为 Windows 自身不包含对 VirtIO 的支持,故需要将VirtIO 驱动 以 ISO 格式挂载到一块 CD 盘中。点击虚拟机进入详细页面,选择硬件栏,添加一块 CD 驱动器。

chrome_5VyVScUEZL

启动虚拟机,安装 Windows。在选择驱动器安装时发现驱动器列表为空,点击加载驱动选项,选择 VirtIO 驱动器,找到目录 CD Drive:\amd64\w11 ,选择 w11 文件夹并确定。等待驱动加载完毕后挂载的硬盘就会出现在列表中。继续安装即可。

九、修改 Windows 设置#

  1. 进入设置,暂停更新

  2. 打开高级系统设置,在硬件栏中点击设备安装设置,取消自动下载

SystemPropertiesAdvanced_Ubvzg5h1WZ

  1. 安装 VirtIO 驱动
    打开挂载的 CD 驱动器,运行 virtio-win-gt-x64.msi ,默认安装即可

  2. (可选)打开远程桌面

  3. 关机

十、设置显卡直通#

  1. 将提取到的 VBIOS 上传至 PVE
scp .\vbios_1638.dat root@192.168.3.2:/usr/share/kvm
  1. 给虚拟机增加一个 PCI 设备

chrome_aNw2ZYK6F8

  1. 选择之前找到的集显 PCI ID 0000:30:00.0 ,并将主 GPU 以及 PCI-Express 勾选,然后添加

chrome_W37V8Ruu7n

  1. 更改虚拟机配置文件
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

保存并退出

  1. 将虚拟机硬件的显示改为无

chrome_AlUhPLczXt

  1. 将网卡断连取消,开机,使用 RDP 连接 Windows 11 虚拟机,安装AMD 显卡驱动

  2. 大功告成!

十一、解决一些 Bug#

在 Proxmox VE 7.x,AMD Vega 集显直通 Windows 环境中,会出现正常关机后开机无法自动直通的问题是,即再开机后 Windows 识别不到集显,画面无输出。要解决这个问题有两种方法:

  1. 手动在设备管理器中弹出显卡后关机,但是不太优雅。

  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 即将在五秒后关机...
ping 127.0.0.1 -n 6 > nul
shutdown /s /t 0

2-5. 保存后以管理员身份运行 bat 即可自动关机啦~

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。