• 那是云首页
  • 快捷导航
  • 更多
    设为首页收藏本站
  • |
花生壳

amd 5700G igpu在qnap上的 直通

威联通 QNAP  / 教程分享  / 只看大图  / 倒序浏览   © 著作权归作者本人所有

#楼主# 2022-6-5 15:53

跳转到指定楼层
本帖最后由 r-MT 于 2022-9-18 17:43 编辑

没有amd主板的请直接绕道,不想折腾amd机型的直接绕道
不会安装qnap的直接绕道,没有耐心的也请直接绕道

前段时间 有个网友不停折腾他的白鸡tvs-671的显卡直通来问我,很佩服他的耐心
忍不住手痒,也把amd的5700G核显也直通了一下

这里吐槽一下qnap官方,这次内核升级到5.10.60,
5.10内核配置里面有几个跟amdgpu相关的mm设置改为隐式了,默认no了,以及KALLSYMS_ALL默认也关闭了
不知道qnap官方有意还是无意,统统没有打开.
这样造成几乎所有qnap机型都不再支持amdgpu的显卡驱动了,除了TVS-X83机型。
TVS-X83机型的内核设定又有不少缺陷,无法完全发挥Ryzen的性能,tvs-x63更烂了,只支持raden。

那么有没有办法在qnap上
即发挥amd Ryzen的性能,又把核显给利用起来
如果利用qnap的虚拟机把核显直通出来,也不失为一种曲线利用核显的办法。

当然还有一种办法,利用qnap的源码,把qnap一些隐藏的设定代码给找出来,
自定义编译自己的5.10.60-qnap的bzImage,也能完美驱动x77 x72 x82这些机型驱动amdgpu
我做了一些尝试,把amd官方22.10.50100-1395274版本的amdgpu驱动移植到qnap上,然后通过容器,
成功实现了opengl vulkan以及amf的编码等等,
当然这些不是本次主题。

言归正传吧

整个大体流程
1:提取核显vbios
2:修改model.conf nas_model.py pci.py强制使用核显的vbios.rom
3:修改grub.cfg以及相关bios设置,确保iommu分组成功
4:安装win10 安装amd驱动以及gpu重置补丁
除了驱动,所有涉及的文件我打包放在末尾

1.我的硬件配置
主板:MSI B450M MORTAR MAX, bios version 7B89v2G
cpu:5700G
内存:48G 频率2400  

2.机型qnap ts-877
自行安装ts-877,版本5.0.0.1932 build 20220129以上
自行安装 虚拟机工作站 3.6.27

1.获取核显构架以及硬件ID以及子ID,提取核显vbios.rom

https://pci-ids.ucw.cz/下载最新pci.ids覆盖掉本系统的pci.ids
qnap的在/usr/local/share/pci.ids

覆盖后执行一下
  1. /sbin/lspci -nn | grep VGA
复制代码

可以看到核显是amd 5700G 构架Cezanne  硬件ID[1002:1638]
  1. /sbin/lspci -nnv -d 1002:1638
复制代码

获得子ID[1002:1636]

id

id


构架Cezanne  硬件ID[1002:1638] ID[1002:1636] 备用

https://winraid.level1techs.com/t/tool-guide-news-uefi-bios-updater-ubu/30357
下载UBU_v1.79.17,解压

下载主板bios,比如我的微星B450M-MORTAR-MAX主板所用的bios版本7B89v2G
解压后E7B89AMS.2G1丢ubu解压目录
双击UBU.bat,会自动搜寻当前目录的bios,并读取展开
按任意键后输入2 进video菜单
输入S,提取vbios,01退出即可

ubu

ubu

当前目录下就会生成一个Extracted目录
把Extracted-VBIOS-017.010.000.030.000000目录的vbios_1638.dat提取出来改名成硬件ID+子ID.rom
也就是1002_1638_1002_1636.rom
文件名格式不能错,qnap会按此格式读取vbios的rom

在qnap的/share/CACHEDEV1_DATA/.qpkg/.QKVM/
注意QKVM前有个.号,新建一个romfile文件夹,把1002_1638_1002_1636.rom放进去

romfile

romfile



2.修改model.conf nas_model.py pci.py先把 Virtualization Station 停掉
/share/CACHEDEV1_DATA/.qpkg/QKVM/qvs/qvs/define/nas_model.pyc
/share/CACHEDEV1_DATA/.qpkg/QKVM/qvs/vms/models/pci.pyc
2个文件做个备份,然后反编译成py,具体自己百度或者使用我压缩包的对应Virtualization Station版本V3.6.27
放入对应目录
2.1修改model.conf,并重启
/sbin/lspci -tvnn
得到我的核显在0000:00:08.1上
model.png
修改你引导盘上的patch里面的model.conf里面的 改成[System PCIE SLOT 2]
DEV_BUS = B0008:F1
  1. [System PCIE SLOT 2]
  2. DEV_BUS = B00:D08:F1
复制代码
打包重启后查看/etc/目录的model.conf确保修正成功
2.2修改nas_model.py
/share/CACHEDEV1_DATA/.qpkg/QKVM/qvs/qvs/define/nas_model.py
发现并没有我使用的TS-877机型,使用的是'TS-X77': {'default'
当然你也可以只改'TS-X77': {'default',或者新建个TX-877

我这里就把TS-877XU改成我的TS-877

  1. 'TS-877XU': {'pci_slots': [{'id': '0000:00:03.1', 'name': 'PCIe 1'}, {'id': '0000:00:03.2', 'name': 'PCIe 2'}, {'id': '0000:00:03.3', 'name': 'PCIe 3'}, {'id': '0000:00:03.4', 'name': 'PCIe 4'}], 'virtual_qts': True,
复制代码


改成
  1. 'TS-877': {'pci_slots': [{'id': '0000:00:01.1', 'name': 'PCIe 1'}, {'id': '0000:00:08.1', 'name': 'PCIe 2'}, {'id': '0000:00:03.3', 'name': 'PCIe 3'}, {'id': '0000:00:03.4', 'name': 'PCIe 4'}], 'virtual_qts': True,
复制代码



这里的pci_solts根据你主板实际填写 并跟model.conf配对好,后面的pcie3-4没有的话其实都可以删了

2.3修改/pci.py
/share/CACHEDEV1_DATA/.qpkg/QKVM/qvs/vms/models/pci.py

找到    def is_romfile_required(self):
        conditions = [
         NAS.GPU_ROM_CONDITIONAL_REQUIRED,
         self.is_nvidia_video_card,
         self.is_primary_card]
        return all(conditions)

简单修改一下判断逻辑,添加2行
    def is_romfile_required(self):
        if self.is_romfile_exists:
            return True    
        conditions = [
         NAS.GPU_ROM_CONDITIONAL_REQUIRED,
         self.is_nvidia_video_card,
         self.is_primary_card]
        return all(conditions)

3.修改grub.cfg,以及bios设定,确保iommu gruop分组成功
BIOS 里面
Re-Size BAR Support             --enable
Above 4G memory/Crypto    --enable   
SR-IOV Support                     --enable
Initiate Graphic Adapter        --IGD
Integrated Graphics               --Force
UMA Frame Buffer Size          --4G                 #根据自己内存大小自行修改
IOMMU                                  --enable
DMA Protection                     --auto
DMAr Support                       --auto
SVM Mode                            --enable
NX Mode                               --enable
其他全是自动
UEFI启动 CSM 关闭

grub.cfg改成/boot/bzImage root=/dev/ram0 rw  amd_iommu=on iommu=pt  pcie_acs_override=downstream,multifunction pci=noats  video=efifbff
  1. root=/dev/ram0 rw amd_iommu=on iommu=pt pcie_acs_override=downstream,multifunction pci=noats  video=efifb:off
复制代码


重启

在qnap下执行
  1. for d in /sys/kernel/iommu_groups/*/devices/*; do n=${d#*/iommu_groups/*}; n=${n%%/*}; printf 'IOMMU Group %s ' "$n"; /sbin/lspci -nns "${d##*/}"; done;
复制代码

确保核显以及核显对应的hdmi声卡 在单独的iommu gruop里面,或者一组只有他们2个
iommugroup.png


4.qnap虚拟机安装win10 相关设定

4.1准备工作,下载amd驱动以及amd重置补丁
当然你也可以在win10初始安装时下载

amd驱动
https://www.amd.com/en/support/apu/amd-ryzen-processors/amd-ryzen-7-5000-g-series-desktop-processors-radeon-graphics/amd
我这里用的 22.5.2 Optional (WHQL)
下载备用

amd gpu win10重置补丁
https://github.com/inga-lovinde/RadeonResetBugFix
下载备用

4.2安装win10以及相关设定
先随便安装一个win10,带远程桌面方便调试,
我这里用的是win10-21h2专业版,先不要直通gpu

win10虚拟机设置里面,确保
cpu---passthrough
隐藏kvm虚拟机监控程序签名
启动固件 seabios
          启用内存共享 未选
          启用动态内存 未选
安装完成后win10里面
把qnap的windows guest tool光盘挂载上 补上驱动,
打开远程桌面,固定好IP,方便调试
随便在c盘建个mydev目录,把重置补丁RadeonResetBugFixService.exe放入和前面下载的amd显卡驱动解压到该目录。

如果不是最新的21h2 win10,把 我的电脑-属性-高级系统设置-硬件-设备安装设置-选否
防止win10自动下载老版本amd的驱动,直接把你系统卡死.
然后关闭win10,快照里面自己做个备份

4.3.直通上igpu
pcie.png
再启动win10,显示器会被直接点亮,看到显示屏出现登录画面,远程桌面或者直通usb键盘鼠标操作,安装前面解压的amd驱动,
否则win检测到amd gpu会自动下载老版本的简化驱动(当然你也可以在7.1准备阶段把win10的自动驱动更新给关了)

安装完前面解压驱动 ,最后不要点重启。

cmd目录 amdin权限进去执行RadeonResetBugFixService.exe install
等待数分钟不一定,会有1-2次黑屏,等安装完成后再重启.

此时重启 显示器会有1-2分钟黑屏,等待RadeonResetBugFixService激活amd gpu,耐心等待显示器被激活。

在我的机器上
每次宿主机重启后,虚拟机 win10第一次启动会直接点亮显示器,进系统后等待1-2分钟闪屏一下,激活amdgpu,
第二次启动会先黑屏1-2分钟.然后再激活amdgpu


RadeonResetBugFixService具体原理见作者连接最下方
https://github.com/inga-lovinde/RadeonResetBugFix
这样就避免了gpu重置的bug

最后把win10里面的休眠等关了,我发觉休眠有可能会引发宿主机宕机

内存只有2400随便跑个分,马马虎虎将就了,解码编码已经不成问题了
lds1.png
lds2.png

5.虚拟机其他相关设置

/share/CACHEDEV1_DATA/.qpkg/QKVM/usr/etc/qvsd.d/44-preload/01-module
改成如下,含双引号,重启nas,防止kvm错误溢出报告.
load_kvm()
{
    ___load_module kvm.ko "ignore_msrs=Y report_ignored_msrs=N"
    check_ret
    echo 1 > /sys/module/kvm/parameters/ignore_msrs

    # load kvm module
    if [ $VMX_FEATURE -ne 0 ]; then
        ___load_module kvm-intel.ko nested=0
        check_ret
    elif [ $SVM_FEATURE -ne 0 ]; then
        ___load_module kvm-amd.ko nested=0


当然如果要实现套中套的话,把
nested=1

https://pan.baidu.com/s/1PmejEGeMrB1OCmIpS3pQuw
游客,如果您要查看本帖隐藏内容请回复


另外把我的引导盘也给你们吧用qnap的最新版gpt格式的uefi引导盘修改,u盘大于3G
dd 把img写进U盘,bios设定为uefi引导,
工具我选用debian11官方基础包,内存中运行,

如果你跟我用的是同一块主板微星B450M-MORTAR-MAX同一款主板
只要下载固件解压就行了
具体看压缩包里面的说明吧
https://pan.baidu.com/s/1C0kHY_EjG-nh20uW5npfRg




那是云论坛 - 国内知名的NAS交流平台
http://www.nasyun.com
分享淘帖
回复 印象

使用道具

0

精华

89

回帖

1338

积分

发烧玩家

Rank: 2

云币
0
贡献
49
活跃
1037
精华
0
mikeee146 发表于 2022-6-5 17:22 来自 中国福建福州
QNAP的虚拟机支持直通?这么厉害了?我这么Out
回复 支持 反对 印象

使用道具 举报

0

精华

96

回帖

2165

积分

搞机大神

Rank: 3Rank: 3

云币
0
贡献
71
活跃
1760
精华
0
s2k7 发表于 2022-6-5 22:21 来自 日本
谢谢楼主的详细教程,正好618入手了5700g,好好跟进学习。
回复 支持 反对 印象

使用道具 举报

0

精华

169

回帖

2422

积分

搞机大神

Rank: 3Rank: 3

云币
0
贡献
14
活跃
2264
精华
0
chirle 发表于 2022-6-6 20:42 来自 中国台湾
啥也不说了,感谢楼主分享哇!
回复 支持 反对 印象

使用道具 举报

0

精华

152

回帖

3473

积分

搞机大神

Rank: 3Rank: 3

云币
0
贡献
21
活跃
3292
精华
0
Alan萬 发表于 2022-6-6 21:39 来自 中国广东东莞
谢谢楼主的详细教程,B550I+5700g在手,好好学习。
回复 支持 反对 印象

使用道具 举报

0

精华

32

回帖

690

积分

入门用户

Rank: 1

云币
1
贡献
0
活跃
674
精华
0
Ikne921 发表于 2022-6-8 20:16 来自 中国浙江舟山
膜拜大佬,学习下。。。
回复 支持 反对 印象

使用道具 举报

0

精华

24

回帖

171

积分

入门用户

Rank: 1

云币
0
贡献
0
活跃
159
精华
0
no3ks 发表于 2022-6-8 20:22 来自 中国四川成都
谢谢大佬的分享,先评论,再慢慢拜读。
回复 支持 反对 印象

使用道具 举报

0

精华

26

回帖

318

积分

入门用户

Rank: 1

云币
0
贡献
6
活跃
273
精华
0
game168 发表于 2022-6-8 20:27 来自 中国广东深圳
大佬你好,我留意到你直接修改了grub的iommu参数,在intel 上是都可以用修改grub的方式让系统支持gvt-g?实现qnap和虚拟机共用核显的目的?

点评

肉测过只修改grud是不行的  详情 回复 发表于 2022-6-11 18:44
理论上是可行的 但是呢,qnap虚拟机使用的libvirt qemu的版本只有4.1,同时呢,qnap在内核启动阶段直接把intel核显跟i915驱动进行了绑定。 还要另外编译kvm驱动 要解决的麻烦事情比较多。  详情 回复 发表于 2022-6-9 12:03
回复 支持 反对 印象

使用道具 举报

0

精华

41

回帖

339

积分

入门用户

Rank: 1

云币
0
贡献
0
活跃
318
精华
0
sclsgj 发表于 2022-6-8 20:29 来自 中国
感谢大佬提供,正好需要
回复 支持 反对 印象

使用道具 举报

0

精华

35

回帖

412

积分

入门用户

Rank: 1

云币
0
贡献
0
活跃
394
精华
0
自足 发表于 2022-6-8 21:20 来自 中国福建漳州
大佬出手 必属精品,谢谢分享
回复 支持 反对 印象

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回列表 搜索 官方QQ群
懒人地图| 手机版|小黑屋| 智能生活 , 上那是云 |闽ICP备2020018196号-1 |网站地图