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

看板PC_Shopping作者 (xilwen)時間1年前 (2022/09/25 03:42), 1年前編輯推噓9(905)
留言14則, 10人參與, 1年前最新討論串1/1
得益於 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 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 122.116.169.156 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/PC_Shopping/M.1664048571.A.2B7.html ※ 編輯: v72807647 (122.116.169.156 臺灣), 09/25/2022 03:52:00

09/25 04:17, 1年前 , 1F
...對不起,所以是Linux下可以將PCIE passthro到哪一種
09/25 04:17, 1F

09/25 04:17, 1年前 , 2F
VM? VMWARE? 還是?
09/25 04:17, 2F

09/25 04:17, 1年前 , 3F
這是小白問題 orz 但想知道想滿久了
09/25 04:17, 3F
linux 在核心有一套自己的虛擬機器監視器 (hypervisor)- KVM (kernel virtual machine),搭配 QEMU 軟體模擬硬碟、網路卡等可以達成完整的虛擬機器功能, 最後透過 libvirt 呈現給使用者方便操作(像影片右上的 virt-manager)。 ※ 編輯: v72807647 (122.116.169.156 臺灣), 09/25/2022 04:21:41 ※ 編輯: v72807647 (122.116.169.156 臺灣), 09/25/2022 04:24:53

09/25 06:34, 1年前 , 4F
kvm+qemu,大部份人用這。vmware較少,xen更少
09/25 06:34, 4F

09/25 06:45, 1年前 , 5F
如果kernel修好了 理論上是不是pve支援了
09/25 06:45, 5F
通常 PVE 應該不會在 host 開桌面環境或跑應用程式,不太需要用 amdgpu driver 吧? 開機直接綁 vfio-pci 給不同 VM 用在 Ubuntu 21.10/22.04 等版本都沒遇到問題; 除非遇到之前的 AMD reset bug,才有在不同 VM 間會不能切換的狀況。 如果還是有遇到可以試試看 vendor-reset:https://github.com/gnif/vendor-reset

09/25 07:11, 1年前 , 6F
比較想知道apu的內顯hdmi直通的問題好了沒?
09/25 07:11, 6F

09/25 08:41, 1年前 , 7F
好奇PVE +1
09/25 08:41, 7F

09/25 10:33, 1年前 , 8F
有條件的通常還是選esxi+vspher(+vsan) 介面舒服
09/25 10:33, 8F

09/25 11:00, 1年前 , 9F
09/25 11:00, 9F

09/25 11:50, 1年前 , 10F
09/25 11:50, 10F

09/25 13:20, 1年前 , 11F
09/25 13:20, 11F

09/25 13:29, 1年前 , 12F
不懂還是推一下XD
09/25 13:29, 12F

09/25 14:36, 1年前 , 13F
看PVE的Kernel有沒有打相關patch吧,希望有跟上
09/25 14:36, 13F

09/25 15:26, 1年前 , 14F
了解 感謝
09/25 15:26, 14F
※ 編輯: v72807647 (122.116.169.156 臺灣), 09/25/2022 18:59:10
文章代碼(AID): #1ZBrsxAt (PC_Shopping)