23 / 06 / 27

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

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

  4. 输入S并回车

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

  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
  3. GRUB_CMDLINE_LINUX_DEFAULT="quiet" 改为 GRUB_CMDLINE_LINUX_DEFAULT="quiet iommu=pt initcall_blacklist=sysfb_init pcie_acs_override=downstream,multifunltifunction" ,保存并退出

  4. 更新GRUB

    root@pve:~# update-grub
  5. 添加内核模块

    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

    保存并退出

  6. 禁用设备驱动

    root@pve:~# nano /etc/modprobe.d/pve-blacklist.conf

    在文件中写入:

    blacklist amdgpu blacklist snd_hda_intel

    保存并退出

  7. 更新修改的设置

    root@pve:~# update-initramfs -u -k all
  8. 重启机器

  9. 查看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可能会因为设备不同而不同

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

    保存并退出

  3. 再次更新内核

    root@pve:~# update-initramfs -u -k all
  4. 重启机器

八、安装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设置

  1. 进入设置,暂停更新

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

  3. 安装VirtIO驱动

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

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

  5. 关机

十、设置显卡直通

  1. 将提取到的VBIOS上传至PVE

    scp .\vbios_1638.dat root@192.168.3.2:/usr/share/kvm
  2. 给虚拟机增加一个PCI设备

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

  4. 更改虚拟机配置文件

    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

    保存并退出

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

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

  7. 大功告成!

十一、解决一些Bug

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

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

  2. 安装Devcon,写一个bat自动弹出集显并关机

    1. 从Github上获取Devcon Installer

    2. 以管理员身份运行Devcon Installer,在有代理的情况下选择 Update Sources 更新源

    3. Add DevCon to environment PATH 打勾,选择 Windows 11 version 22H2 ,选择 x64 架构,然后安装

    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
    5. 保存后以管理员身份运行bat即可自动关机啦~

Powered by Gridea