[心得] 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