UTM安裝的Linux虛擬機是沒有GPU加速的,這會導致圖形界面用起來不愉快。要解決這個問題請使用virtio-gpu。virtio-gpu為QEMU提供的半虛擬化GPU加速技術。
相關文章: Linux QEMU/KVM透過virtio-gpu啟用GPU加速
跟Linux Virt Manager類似,UTM提供了使用者便捷的界面來啟用virtio-gpu。如此一來就可以免GPU直通,給Linux虛擬機啟用GPU加速,改善部份圖形程式的執行效能。
1. virtio-gpu注意事項#
- virtio-gpu適用macOS與iOS版的UTM,由Apple Metal或OpenGL提供支援,不論有無Hypervisor皆可使用。
- 目前virtio-gpu僅支援GNU/Linux虛擬機,Windows虛擬機的patch還在路上。
- 大部分Linux發行版的核心和Mesa驅動應該都有支援VirGL,無需刻意安裝驅動。
- 分別用x86_64架構與ARM64架構的Debian測試,得出:無論是ARM架構跑ARM虛擬機,或是ARM跑x86虛擬機,都可以使用virtio-gpu的GPU加速。
- virtio-gpu僅支援加速OpenGL,Vulkan尚屬實驗性。
2. virtio-gpu啟用方式#
安裝Debian虛擬機。
在UTM設定將算繪後端設定為ANGLE (Metal)
編輯UTM虛擬機設定 → 顯示器,切換顯示卡,要選哪個呢?
根據QEMU官方文件,virtio-gpu以-gl
作結尾的便是使用virglrenderer作為後端。
於是符合條件的顯示卡就是:virtio-gpu-gl-device、virtio-gpu-gl-pci、virtio-ramfb-gl、virtio-vga-gl。
差別在於他們背後模擬顯示卡原理不太一樣,對Debian Linux而言選virtio-gpu-gl-pci
或virtio-vga-gl-pci
就夠了。請記得勾選「啟用GPU加速」。
3. 測試virtio-gpu加速效果#
安裝Debian虛擬機。開機後進入X11工作階段。
執行
sudo dmesg | grep drm
指令,檢查virgl是否有載入利用
glxinfo | grep OpenGL
指令,檢查系統是否有抓到VirGL。若VirGL沒有成功載入則會顯示CPU算繪的llvmpipe
。
可見到宿主機的Apple GPU型號和VirGL,OpenGL ES 2.0
若用OpenGL當算繪後端會看到OpenGL ES 3.0
- 不是所有程式都支援VirGL,有時VirGL得手動啟用:
GALLIUM_DRIVER=virgl "執行檔路徑"
- 例如,跑
glmark
跑分程式:
GALLIUM_DRIVER=virgl glmark2
沒有VirGL、純CPU的llvmpipe算繪下,FPS低落
啟用VirGL後FPS變得十分順暢。
- 我另外測試了MPV的播放效果,使用指令:
GALLIUM_DRIVER=virgl mpv --no-config --vo=gpu --gpu-context=x11egl "影片路徑"
,只要VirGL圖形加速有起來的話,那麼在虛擬機裡面解碼1080p影片也不是問題了。