KVM Virgl 加速仅适用于某些客人?

KVM Virgl 加速仅适用于某些客人?

我正在为我的 KVM 来宾使用以下图形设置:

...
<graphics type="spice">
  <listen type="none"/>
  <image compression="off"/>
  <gl enable="yes" rendernode="/dev/dri/by-path/pci-0000:69:00.0-render"/>
</graphics>
...
<video>
  <model type="virtio" heads="1" primary="yes">
    <acceleration accel3d="yes"/>
  </model>
  <address type="pci" domain="0x0000" bus="0x00" slot="0x01" function="0x0"/>
</video>
...

它在 Fedora (32/33) 和 Ubuntu (20.04) 上运行得非常好,但到目前为止我无法让它在任何其他发行版上运行。即使在 Fedora 上,只有在安装后将其打开 ( enable="yes") 时它才起作用(在 live CD 上不起作用)。但在那之后,它就可以开箱即用了。

当在 manjaro 上尝试同样的操作时,甚至grub菜单也会冻结并且无法使用。我systemd-boot也尝试过。但是,如果您设法启动它,屏幕将保持黑色(它似乎运行得很好,因为尽管黑屏,鼠标集成仍在工作)。

更新: 毕竟这似乎不是内核问题。我错过了这一点,因为我启用了自动登录,但 lightdm 显示得很好。实际上是 DE (XFCE) 给我带来了黑屏。 Wayland 和 Xorg 上的 Gnome 运行良好。但 GRUB 菜单仍然无法使用。这似乎只是 virgl 与 GRUB 的兼容性问题?和XFCE。我可能会在没有EFI的情况下再试一次,但原来的问题已经基本解决了。

现在我想知道:fedora/ubuntu 有什么,例如:manjaro 丢失了?这是我缺少的内核选项还是某些驱动程序包?

我尝试virglrenderer在我的 manjaro 访客上安装,但这没有帮助(我不确定它是否适合访客)。

更新:

当在黑屏的 manjaro guest 上使用 ssh 时,我得到:

dmesg | grep drm
[    0.836414] [drm] pci: virtio-vga detected at 0000:00:01.0
[    0.836420] fb0: switching to virtiodrmfb from EFI VGA
[    0.836526] [drm] virgl 3d acceleration enabled
[    0.836527] [drm] EDID support available.
[    0.837182] [drm] number of scanouts: 1
[    0.837186] [drm] number of cap sets: 2
[    0.845823] [drm] cap set 0: id 1, max-version 1, max-size 308
[    0.845964] [drm] cap set 1: id 2, max-version 2, max-size 688
[    0.846341] [drm] Initialized virtio_gpu 0.1.0 0 for virtio0 on minor 0
[    0.848777] virtio_gpu virtio0: fb0: virtio_gpudrmfb frame buffer device
[    2.095162] systemd[1]: Condition check resulted in Load Kernel Module drm being skipped.

还有正在工作的 Fedora 客人:

dmesg | grep drm
[    2.164964] [drm] pci: virtio-vga detected at 0000:00:01.0
[    2.177043] [drm] features: +virgl +edid
[    2.177652] [drm] number of scanouts: 1
[    2.177658] [drm] number of cap sets: 2
[    2.193509] [drm] cap set 0: id 1, max-version 1, max-size 308
[    2.193596] [drm] cap set 1: id 2, max-version 2, max-size 688
[    2.193840] [drm] Initialized virtio_gpu 0.1.0 0 for virtio0 on minor 0
[    2.217427] virtio_gpu virtio0: [drm] fb0: virtio_gpudrmfb frame buffer device
[    3.552834] systemd[1]: Condition check resulted in Load Kernel Module drm being skipped.

在主机上(工作虚拟机具有相同的输出,但可以工作):

qemu-system-x86_64 \
-drive if=pflash,format=raw,readonly,file=/usr/share/edk2/ovmf/OVMF_CODE.fd \
-drive if=pflash,format=raw,readonly,file=/path/to/qemu/nvram/manjaro_VARS.fd \
-drive file=/path/to/manjaro.qcow2 \
-m 8192 -enable-kvm -M q35 -cpu host -smp 16,sockets=1,cores=16,threads=1 \
-vga virtio -display gtk,gl=on \
-usb -device usb-tablet \
-net user,hostfwd=tcp::10022-:22 -net nic

gl_version 46 - core profile enabled
vrend_renderer_fill_caps: Entering with stale GL error: 1280
GLSL feature level 430

答案1

问题是 Xfwm 的内置合成器和 virgl 不能很好地协同工作。

解决方法:使用 virgl=off(在视频设备上)或 gl=off(在显示器上)启动 VM,在 VM 中运行 xfwm4-tweaks-settings,选择“合成器”选项卡,然后取消选中“启用显示合成” ”。然后关闭虚拟机并重新启用 virgl。

picom 与 Xfwm 配合使用,似乎没有相同的问题,因此如果您想要合成器,请在 VM 中安装/使用 picom,而不是使用 Xfwm 的内置合成器:https://wiki.archlinux.org/index.php/Picom

答案2

笔记:这只是一个概述它的作用是什么以及效果如何- 我不知道自动取款机为什么会这样。

Manjaro 来宾可以使用 virgl,但 XFCE 似乎遇到了问题。例如 Wayland 上的 Gnome 或 X 作品。

我确实在 Manjaro 来宾上安装spice-gtk了。 qemu-guest-agent(我还没有检查他们是否负责使其正常工作。)

然而,尽管图形 vt 具有响应能力,但当切换到控制台 tty 时,它的响应速度极慢(对于 Fedora 也是如此)。

相关内容