Monthly Archives: October 2014

qemu: using cirrus considered harmful

Cirrus is a hardware design from the 90ies and simply can’t keep up with todays needs.

  • Want a Full HD display? No way with cirrus.
  • See funky glitches in your X11 display? Yep, that’s because cirrus uses 24 instead of 32 bits per pixel for truecolor. Modern video hardware stopped doing at least a decade ago, so these code paths in Xorg are largely unused and do bitrot.

And because the cirrus emulation must mimic the behaviour of the real hardware there is no way to fix this in qemu. For historic and compatibility reasons cirrus is the default vga in qemu, but luckily there are other choices.

Cirrus may have its valid use cases with guests which are from the 90ies too, such as Windows NT4. With modern guests you are much better off using stdvga (-vga std) or qxl (-vga qxl) instead.

If you are using spice the best choice is qxl. Install guest drivers for best performance, without guest drivers qxl offers no benefits over stdvga. Linux distros should have the qxl driver packaged up and possibly even installed by default, so that is easy. Windows drivers are here.

stdvga on linux: In version 3.14 the kernel finally got a kms driver for the qemu stdvga. If you have that: Make sure CONFIG_DRM_BOCHS is enabled (most likely your distro did that already for you), be happy. Xorg runs the stdvga with the modesetting driver. xrandr works as it should. If you are not happy with the predefined list of modes just add your own via xrandr --newmode or xorg.conf. If highres modes don’t work use more video memory: qemu -vga std -global VGA.vgamem_mb=32 doubles the default size.

With older linux kernels Xorg will use the vesa driver for stdvga. It is less comfortable to use than modesetting. You are limited to the modes exposed by vgabios, but you still get more modes than with cirrus. You have to create a xorg.conf snippet with monitor refresh rates to convince Xorg that it can use higher resolution without blowing the virtual monitor. Nevertheless it is still the easy way out if you suffer cirrus display glitches.

stdvga on windows: Windows XP (which just went out of support) is the last windows release shipping with cirrus drivers. With anything more recent there is zero benefit in preferring cirrus over stdvga. In both cases windows uses the vgabios (VBE 2.0) for modeswitching and a simple framebuffer without any acceleration support. But stdvga has more video memory and allows higher display resolutions.