[心得] AMD 顯卡在 linux host/VM 間熱插拔現況

作者: v72807647 (xilwen)   2022-09-25 03:42:47
得益於 Valve 大力推動 Steam Deck 和其中的 Proton,linux 如今已經可以執行不少
Windows only 的遊戲[1],然而線上遊戲的防外掛軟體仍是個大麻煩,因此偶爾仍需要
用 Windows 虛擬機器並 passthrough 顯卡到 VM 中才能愉快的玩多數線上遊戲。
在 linux 5.14 之前 AMD 的顯卡有熱插拔的問題[2],使得 passthrough 到 VM 的顯卡
很難回到 host 上繼續使用,在只有一張效能較佳顯卡的主機上需要重開機才能讓 host
利用那張顯卡,想在 host 也玩效能需求較高的遊戲時很不方便;然而搭載 Linux 5.15
的 Ubuntu 22.04 上的顯卡在從 VM 切回 Host 的過程中 module 會載入失敗[3],
workaround 稍微麻煩,可能要掛 login script 和 libvirt hook 才能順利熱插拔。
最近升級 Ubuntu 22.10 (linux 5.19) 測試版後,發現狀況改善很多,熱插拔幾乎不用
額外修改就能用了:
- Ubuntu Host OS 可以掛著 amdgpu 啟動(預設行為),
用 DRI_PRIME=1 環境變數啟動遊戲或其他用到顯卡的程式就可以使用顯卡
- 關掉使用顯卡的程式後,從 libvirt (如 virsh / virt-manager) 啟動 VM,
就會自動解開 amdgpu module 並換上 vfio-pci
- VM 關機後會自動換回 amdgpu,跟啟動 VM 前相同
如果原本已經有設定過 passthrough,拿掉 kernel 或 module 參數的 vfio-pci.ids,
並在 /etc/X11/xorg.conf 中加上設定避免 GPU 開機時被 Xorg 撈去當顯示螢幕:
Section "ServerFlags"
Option "AutoAddGPU" "false"
EndSection
此外 VM 的 libvirt XML 需要有 managed="yes":
<hostdev mode="subsystem" type="pci" managed="yes">
這樣就不用購置兩張性能接近的顯卡、或每次重開機切換 vfio module 的設定了,可以
給近期想買或已有 AMD 顯卡偶爾休閒用 vfio / PCIe passthrough 玩遊戲的人參考。
實際運作情況可以參考影片:
(VM 執行線上遊戲後關機,Host OS 可接著啟動 steam 、Corectrl 和遊戲在顯卡上運作)
(註:可能有一點蘇菲的煉金工房一代雷)
https://youtu.be/Q36zKXpHfJ4
硬體設備:
- AMD Ryzen 5 5600G
- MSI X470 GAMING PLUS MAX
- AMD RX 460 (其實不是這個用途的良好案例)
軟體:
- Ubuntu 22.10, linux 5.19, mesa 22.2.0+git2209211817
- libvirt 8.6.0, QEMU 7.0
- looking-glass B6-rc1, scream
kernel 開機參數:
amdgpu.ppfeaturemask=0xffffffff amd_iommu=on iommu=pt kvm.ignore_msrs=1
(第一個是用於corectrl降頻,與 passthrough 應該無關)
[1] 可以執行的遊戲參考 protondb: https://www.protondb.com/
[2] https://www.phoronix.com/news/Linux-5.14-AMDGPU-Hot-Unplug
[3] https://gitlab.freedesktop.org/drm/amd/-/issues/1836
作者: wahaha99 (此方不可長)   2022-09-25 04:17:00
...對不起,所以是Linux下可以將PCIE passthro到哪一種VM? VMWARE? 還是?這是小白問題 orz 但想知道想滿久了
作者: oopFoo (3d)   2022-09-25 06:34:00
kvm+qemu,大部份人用這。vmware較少,xen更少
作者: tomsawyer (安安)   2022-09-25 06:45:00
如果kernel修好了 理論上是不是pve支援了
作者: keyword1983 (法蘭蘇)   2022-09-25 07:11:00
比較想知道apu的內顯hdmi直通的問題好了沒?
作者: HMKRL (HMKRL)   2022-09-25 08:41:00
好奇PVE +1
作者: tomsawyer (安安)   2022-09-25 10:33:00
有條件的通常還是選esxi+vspher(+vsan) 介面舒服
作者: ry3298 (null)   2022-09-25 11:00:00
作者: silentazure (北極熊)   2022-09-25 11:50:00
作者: ian31722 (閱讀者)   2022-09-25 13:20:00
作者: HSKAO (^o^)   2022-09-25 13:29:00
不懂還是推一下XD
作者: Arbin (路人_Lv菜逼八)   2022-09-25 14:36:00
看PVE的Kernel有沒有打相關patch吧,希望有跟上
作者: wahaha99 (此方不可長)   2022-09-25 15:26:00
了解 感謝

Links booklink

Contact Us: admin [ a t ] ucptt.com