PC_Shopping / PTTBBS 推薦

[心得] AMD內顯Passthrough踩坑心得

看板: PC_Shopping

作者: NCTUFAIWEN (交大廢文王子)

標題: [心得] AMD內顯Passthrough踩坑心得

時間: Tue Dec 2 23:38:32 2025


前言


小弟有組一台黑X暉的NAS

因為所需服務都已經找到替代的開源方案,好像也沒有理由再繼續用黑X暉了

再加上上次手賤點個升級結果系統掛點==,花幾個小時才修好

想了想還是轉往Proxmox + TrueNAS的方案比較安心


因此在拆掉前來記錄兼分享下在黑X暉平台上玩的VMM內顯直通方案


*先聲明本篇沒有要推廣黑X暉,相反的想在這上面搞些有的沒的真的麻煩超級多

還有整個過程在其他KVM環境也都通用,非限制於黑X暉才可用



以下正文開始


我的平台是AMD Ryzen3 5350GE + Asrock B450m Pro4 + 40G ECC RAM

(往回翻的話這張消費級主板已經24/7服役進入第七年惹 周邊都換一輪剩他還在 真的妖)

周邊有張4 port HBA卡跟10G光口洋垃圾網卡

硬碟共4顆HDD/2顆SATA SSD/1條NVME SSD當cache

這樣的組合常駐功耗大概落在90-100W之間

https://imgur.com/42WV9JU.jpg https://imgur.com/42WV9JU.jpg


https://imgur.com/5nrxrrL.jpg https://imgur.com/5nrxrrL.jpg


https://imgur.com/I1nvXee.jpg https://imgur.com/I1nvXee.jpg


https://imgur.com/hgRg5F5.jpg https://imgur.com/hgRg5F5.jpg


https://imgur.com/yK0ELMQ.jpg https://imgur.com/yK0ELMQ.jpg


https://imgur.com/lyCszeC.jpg https://imgur.com/lyCszeC.jpg



帳面配置怎麼看這顆CPU只跑NAS實在是大材小用

因此也在黑X上額外跑了Ubuntu跟Windows虛擬機

玩到這邊其實跑得順風順水,也算榨乾了整個系統的資源...嗎?

並沒有XDD,想折騰的心是無窮的,看著白花花銀子買來的iGPU被晾在那就覺得不太爽

加上NAS是放在電視旁,想讓Windows虛擬機可以直接顯示輸出到電視上

做到用電視看各種直播/影片,甚至是遠端PC來大螢幕玩遊戲的騷操作

所以就有了以下直通內顯的曲折過程


‧黑X暉VMM如何做到PCI Passthrough

雖然底層是KVM ,但顯然VMM介面是不可能會串直通功能的,要做到大概就兩種做法:

a. 直接改虛擬機的xml設定

b. 用指令"virsh attach-device"直接把device分配給某台虛擬機


a作法就我所知是行不通,VMM似乎有自己維護的虛擬機設定檔,每次VM開機都會蓋掉xml

正解是b做法:

1. 先把device unbind

echo "0000:${DEVICE}" > /sys/bus/pci/devices/0000:${DEVICE}/driver/unbind

那個${DEVICE}是PCIe device的vendor:product值 可以從lspci看到


2. 將想要分配出去的PCI device按照kvm所需格式填寫xml檔






https://imgur.com/fP8KJaZ https://imgur.com/fP8KJaZ


3. 把PCI device分配給VM

virsh attach-device ${VM_NAME} *.xml


但這方法也不是很完美,因為每次VM重開機都要自行去執行一遍這個步驟

不過可用就是了


‧IOMMU Group的坑

PCI Passthrough是以IOMMU Group為單位,因此如果你想直通的device分到的Group很糟

(例如這個Group內存在超多device) 那就頭很痛了

可以用類似這種script來檢查看看:

https://gist.github.com/jabbas/a8785710a5e8655045fc0be67385e887


一般來說Group分配太爛可以嘗試去BIOS打開ACS Enable選項,會好很多


然而慘的是Asrock B450m Pro4這張板子在使用5系列Ryzen的時候,這選項被閹掉了...

原因也很簡單,這麼老的板子要支援更多AM4 CPU能做的也只有砍功能這一步

才能塞進去這麼小的BIOS內 (都支援5代了也不忍苛責XD)

只能說AM4產品週期長是好事,但也是有意想不到的副作用QQ

到這邊幾乎覺得是死局了...


但!!直到找到這篇討論:

https://www.reddit.com/r/ASRock/comments/pfza16/deskmini_x300_bios_with_acs_enable/


在Asrock B450F的某版本BIOS開啟PCIe ARI選項也可以跟ACS選項同樣有好的Group分配

用相應AGESA版本的BIOS刷到B450m後就成功啦!

正常的結果應該如下:

https://imgur.com/3zeUbbi.jpg https://imgur.com/3zeUbbi.jpg


可以看到目標的VGA compatible controller單獨在Group 13


只能說妖板不愧是妖板

BTW這資訊看起來還是寄信去Asrock原廠問到的 連這種小眾的需求都願意回真的太棒惹

╰(⊙Д⊙)╮佛心公司╭(⊙Д⊙)╯佛心公司


‧AMD GPU Passthrough的坑

用上面的作法依樣畫葫蘆把AMD iGPU passthrough之後進到Windows始終顯示Error 43

首先有個懷疑的點: virsh attach-device時間點太慢了

由於這指令必須要在VM開機後才可以下 從按下開機到attach都跑過BIOS了可能真的太晚

有找到可以在KVM START階段hook並且執行attach的方案:

https://github.com/sramshaw/pci_coral_on_synology


魔改一下後就成功在BIOS前把iGPU attach上去了!


但還是Error 43,可撥QQ


再來網路上對於AMD iGPU的直通其實也滿多資訊惹,很多作業可以抄

(雖然幾乎都是Proxmox 但反正底都是KVM沒差)

總結大概有幾個問題待解:

1. GPU直通時要順便帶vbios

2. 直通給Windows要順便把CPU的Audio直通過去 並且代AMDGopDriver

3. AMD Reset Bug


1/2要用一些tool把你當前iGPU的vbios跟AMDGopDriver導出來

或是可以去這邊翻看看有沒有相應型號的可以直接下載來用:

https://github.com/isc30/ryzen-gpu-passthrough-proxmox


並且在做virsh attach-device時的xml裡面要順便帶rom這個參數進去

此時Windows VM進去就不會Error 43了,到此算是完成惹~

https://imgur.com/YlNepUN.jpg https://imgur.com/YlNepUN.jpg



剩下一個AMD Reset Bug比較討厭,可以安裝這個Service:

https://github.com/inga-lovinde/RadeonResetBugFix


它的作用是在Windows VM關機時會正常的把GPU關閉,等到下次VM開機時才可以正常init

但如果VM被強制關機或reboot那就沒救了(e.g. 藍屏)

只要上次GPU沒有正常關閉那顆GPU就再也沒辦法被使用了,只能reboot host


另外我的經驗是如果確定上次VM有正常關機但還是Error 43

可以直接重裝GPU Driver並reboot VM,通常都能好




最後來看結果 Windows虛擬機可以直接HDMI連到電視 看實況YT都很順

https://imgur.com/AlGlwVH.jpg https://imgur.com/AlGlwVH.jpg



甚至透過10G內網遠端到PC打個POE刷圖都沒問題

https://imgur.com/l1GINLY.jpg https://imgur.com/l1GINLY.jpg


就是畫面有時候FPS會變低 這個需求CPU真的極限了XDD 解碼速度上不去



另外,上面那些步驟實在太繁瑣,小弟把此方案弄成一個簡單的script:

https://github.com/jcchen7566/SynoPassthru


不算是很無腦的script需要花一點時間了解在幹麻,但只要配置好deploy完就一勞永逸了

目前用這方案半年多,除了Reset Bug常踩到要重開機很討厭之外真的滿穩定的


謝謝大家收看


--

※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.34.178.145 (臺灣) ※ 文章網址 ※
Saren : 讚哦 我的prime x370還在服役中 61.224.57.202 12/02 23:49
AM4真的讚 但現在板子不好買了 希望別掛掉
sdbb : 謝謝 112.104.153.164 12/02 23:59
bodhi : 入境隨俗 114.36.96.9 12/03 00:03
E7lijah : 雖然門外漢不太懂但還是推分享 27.242.99.64 12/03 00:10
Destiny6 : 感謝分享 1.171.147.190 12/03 00:10
bodhi : 風氣 114.36.96.9 12/03 00:18
AbeNana : 怎麼有JB... 114.136.145.58 12/03 00:38
ATND : 118.168.234.43 12/03 00:40
roger788 roger788
Koogeal : 小丑被A桶了.嘻嘻*(專業文推一個) 59.115.38.228 12/03 00:52
smallreader : 111.254.155.154 12/03 00:53
※ 編輯: NCTUFAIWEN (1.34.178.145 臺灣), 12/03/2025 00:45:33
BABU1990 : 感謝大大無私分享,本來打算搞完一般服 220.130.152.29 12/03 01:04
BABU1990 : 務就放置,看到這篇之後一定要搞一搞了 220.130.152.29 12/03 01:04
s25g5d4 : 清一下灰塵好嗎... 1.34.245.37 12/03 01:05
s25g5d4 : reset bug fix 6000 系顯卡 (Navi20) 1.34.245.37 12/03 01:11
s25g5d4 : 之後就沒用了,之後只能賭看看卡本身有沒 1.34.245.37 12/03 01:11
s25g5d4 : reset bug 1.34.245.37 12/03 01:11
pphyy5844548 : 39.15.25.255 12/03 01:24
chenteddy : JB 223.137.210.75 12/03 02:45
chenteddy : 補推 223.137.210.75 12/03 02:45
litwild : 看個yt 、打個電動這麼累 223.137.60.20 12/03 06:05
a22663564 : 常駐等於一天要2.5度電,還不含作動功 180.214.182.79 12/03 07:02
a22663564 : 180.214.182.79 12/03 07:02
kanding255 : 直通內顯有什麼好處 效能好很多嗎 49.217.61.139 12/03 07:05
spfy : 自己動手樂趣多 合理 223.137.27.91 12/03 07:20
kaj1983 : 這操作太騷了 218.166.17.13 12/03 07:59
autoupdate : 42.70.118.14 12/03 08:11
s78513221 : 太麻煩了 玩直通或虛擬化還是偏好 42.79.134.11 12/03 08:22
s78513221 : Intel,只要開SRIOV就解決了不折騰 42.79.134.11 12/03 08:22
harry886901 : 之前玩12700k 直通也是搞得要死要活 101.12.146.195 12/03 08:27
nisioisin : 用不到但給技術分享給推 101.14.6.76 12/03 09:18
w1222067 : 不能被發現看不懂 先推 111.82.178.110 12/03 09:23
ARui : 感謝分享 203.204.58.36 12/03 09:57
neoark : 推實作心得,以後買小主機可以參考 101.8.139.25 12/03 11:39
saito2190 : YT上面一堆中國人搞這類All in ONE 1.161.186.114 12/03 12:37
saito2190 : 有很多解決方案可以參考 1.161.186.114 12/03 12:37
saito2190 : 我手上幾臺7840HS底層都是PVE 1.161.186.114 12/03 12:37
saito2190 : 然後通iGPU進去給Win用掛機遊戲 1.161.186.114 12/03 12:37
saito2190 : 老實說黑群非常難用 不如買TrueNAS或 1.161.186.114 12/03 12:37
saito2190 : UnRAID 社群多又豐富 XD 1.161.186.114 12/03 12:37
saito2190 : 我是裝VirtualDisplayDriver 不接螢幕 1.161.186.114 12/03 12:38
saito2190 : 通通用moonlight遠端操作 1.161.186.114 12/03 12:38
saito2190 : Intel的SRIOV也不是萬能解 我好幾次Li 1.161.186.114 12/03 12:39
saito2190 : nux Kernel一更新整個跑掉 要重新編譯 1.161.186.114 12/03 12:39
saito2190 : 順帶一提 不同機型的GopDriver不一定 1.161.186.114 12/03 12:42
saito2190 : 能通用,我用GMK K6導出給銘凡UM780不 1.161.186.114 12/03 12:42
saito2190 : 能用,最好還是自己導出自己的 1.161.186.114 12/03 12:42
kuroshizu21 : 寫得如此詳細, 即便自己應該不會這樣 61.227.59.43 12/03 13:58
kuroshizu21 : 折騰自己, 還是覺得不推不行 XDDD 61.227.59.43 12/03 13:58
jhjhs33504 : 掉驅動問題 NV也曾容器化過渡期調很久 1.162.100.219 12/03 14:18
a24606 : 推!!之前搞VMM直通網卡給opnsense虛擬機 27.247.193.38 12/03 17:23
a24606 : 也是得掛一堆腳本,但成功後直接解放NAS 27.247.193.38 12/03 17:23
Litfal : 不是應該先套一層PVE吧組儲存和運算分離 123.110.136.43 12/03 19:23
Litfal : 嗎XD 123.110.136.43 12/03 19:23
jack860719 : 虛擬化玩家推一個 Intel這邊其實也沒 223.139.113.112 12/03 19:28
jack860719 : 好多少 SRIOV好用但也並沒無所不能 223.139.113.112 12/03 19:28
jack860719 : 如上面大大提到的kernel編譯 223.139.113.112 12/03 19:28
jack860719 : 目前小弟是用N100當迷你server 兼具NA 223.139.113.112 12/03 19:29
jack860719 : S WinVM 軟路由 223.139.113.112 12/03 19:29
tomsawyer : 好傑寶 49.218.242.243 12/03 19:54