5-45 second lag in display updates, using virtio-vga, while in text modes
I freely admit I don't know what package this bug is in. Because this only happens when I'm running gl through spice rather than QEMU's own window, I'm leaning toward this being a spice bug.
The display lags behind 5-45 seconds, when I use remote-viewer in text mode through a spice socket with gl=on
to a VM with a virtio-vga with virgl=on
.
For a guest that by default uses text mode, and the user can optionally startx
, this is a nightmare. For a guest that uses an X login, this still prohibits seeing the boot process, and any errors.
One example is putting the Fedora Workstation Live 28-1.1 ISO on my NVMe, and booting it through a QEMU VM. When in graphical mode (GNOME) its fine. When in text mode (ISO boot menu, during systemd before GNOME, or if I CTRL+ALT+F2 out of GNOME) then the display in remote-viewer lags behind the system for 5-45 seconds. When it changes to a different text resolution (first turning on, and shortly after "Switch Root" when it goes from 80x25 {720x400}to 128x48 {1024x768}) the display is completely garbled until it catches up. (Changing resolutions in GNOME causes no lag!)
Screenshot of the garble: https://i.imgur.com/TVQz0EK.png
Here's my commands:
$ qemu-system-x86_64 -machine q35 -cpu host -accel kvm -m 4096M \
-blockdev raw,node-name=install_iso,read-only=on,file.driver=file,file.filename=Fedora-Workstation-Live-x86_64-28-1.1.iso \
-device ide-cd,drive=install_iso,bus=ide.0 \
-device ioh3420,id=pcie.1,bus=pcie.0,slot=0 \
-device virtio-vga,bus=pcie.1,addr=0,virgl=on \
-display none \
-spice unix,addr=/tmp/virtio.sock,disable-ticketing,gl=on
gl_version 45 - core profile enabled
Elsewhere:
$ remote-viewer --debug spice+unix:///tmp/virtio.sock
(remote-viewer:8707): virt-viewer-DEBUG: 02:54:26.318: Opening display to spice+unix:///tmp/virtio.sock
(remote-viewer:8707): virt-viewer-DEBUG: 02:54:26.318: Guest (null) has a spice display
(remote-viewer:8707): virt-viewer-DEBUG: 02:54:26.326: After open connection callback fd=-1
(remote-viewer:8707): virt-viewer-DEBUG: 02:54:26.326: Opening connection to display at spice+unix:///tmp/virtio.sock
(remote-viewer:8707): virt-viewer-DEBUG: 02:54:26.328: New spice channel 0x55612bd7e420 SpiceMainChannel 0
(remote-viewer:8707): virt-viewer-DEBUG: 02:54:26.328: notebook show status 0x55612bbd6220
(remote-viewer:8707): virt-viewer-DEBUG: 02:54:26.375: main channel: opened
(remote-viewer:8707): virt-viewer-DEBUG: 02:54:26.375: notebook show status 0x55612bbd6220
(remote-viewer:8707): virt-viewer-DEBUG: 02:54:26.376: app is not in full screen
(remote-viewer:8707): virt-viewer-DEBUG: 02:54:26.376: app is not in full screen
(remote-viewer:8707): virt-viewer-DEBUG: 02:54:26.376: New spice channel 0x55612bdd6240 SpiceDisplayChannel 0
(remote-viewer:8707): virt-viewer-DEBUG: 02:54:26.376: New spice channel 0x55612bdd8280 SpiceCursorChannel 0
(remote-viewer:8707): virt-viewer-DEBUG: 02:54:26.377: New spice channel 0x55612bdd84a0 SpiceInputsChannel 0
(remote-viewer:8707): virt-viewer-DEBUG: 02:54:26.377: new inputs channel
(remote-viewer:8707): virt-viewer-DEBUG: 02:54:26.487: creating spice display (#:0)
(remote-viewer:8707): virt-viewer-DEBUG: 02:54:26.487: Insert display 0 0x55612bd54f20
(remote-viewer:8707): virt-viewer-DEBUG: 02:54:26.492: Found a window without a display, reusing for display #0
(remote-viewer:8707): virt-viewer-DEBUG: 02:54:26.492: notebook show display 0x55612bbd6220
(remote-viewer:8707): GSpice-WARNING **: 02:54:26.493: Warning no automount-inhibiting implementation available
(remote-viewer:8707): virt-viewer-DEBUG: 02:54:26.651: Allocated 720x400
(remote-viewer:8707): virt-viewer-DEBUG: 02:54:26.651: Child allocate 720x400
(remote-viewer:8707): virt-viewer-DEBUG: 02:54:55.404: Allocated 1024x768
(remote-viewer:8707): virt-viewer-DEBUG: 02:54:55.404: Child allocate 1024x768
The remote-viewer debug output shows a timestamp on an allocation when the text mode changes. Starting at those timestamps is where the lag happens. When the display starts actually updating, nothing new shows on the debug output.
/tmp/spicec.log does not exist