What are differences between VBoxVGA, VMSVGA and VBoxSVGA in VirtualBox?

141

41

VirtualBox 6.0 provides a new setting called Graphics Controller. There are four options to choose from:

  • None
  • VBoxVGA
  • VMSVGA
  • VBoxSVGA

In the user manual I have found this information:

Graphics Controller: Specifies the graphics adapter type used by the guest VM. Note that you must install the Guest Additions on the guest VM to specify the VBoxSVGA or VMSVGA graphics controller. The following options are available:
– VBoxSVGA: The default graphics controller for new VMs that use Linux or Windows 7 or later. This graphics controller improves performance and 3D support when compared to the legacy VBoxVGA option.
– VBoxVGA: Use this graphics controller for legacy guest OSes. This is the default graphics controller for Windows versions before Windows 7.
– VMSVGA: Use this graphics controller to emulate a VMware SVGA graphics device.
– None: Does not emulate a graphics adapter type.

But still it does not describe which of them and why should I prefer.
When should I choose None?
Is VMSVGA better than VBoxSVGA?
What is wrong with VBoxVGA?

I have tested booting of archlinux-2019.02.01-x86_64.iso with virtualbox 6.0.4 in efi and legacy modes:

┌──────────┬─────────────────────────────────┬─────────────┐
│ Adapter  │            EFI mode             │ Legacy mode │
├──────────┼─────────────────────────────────┼─────────────┤
│ VBoxVGA  │ ok                              │ ok          │
│ VMSVGA   │ ok in systemd-boot menu,        │ ok          │
│          │ then black screen for some time │             │
│          │ when booting, then becomes ok   │             │
│ VBoxSVGA │ black screen                    │ ok          │
└──────────┴─────────────────────────────────┴─────────────┘

Also I have noticed that with VMSVGA and VBoxSVGA passing video=XRESxYRES parameter is ignored:

+----------+----------------+--------------+
| Adapter  |    EFI mode    | Legacy mode  |
+----------+----------------+--------------+
| VBoxVGA  | works          | works        |
| VMSVGA   | doesn't work   | doesn't work |
| VBoxSVGA | could not test | doesn't work |
+----------+----------------+--------------+

But it is still possible to set some of that ignored resolutions after boot with fbset.

Ashark

Posted 2019-02-07T13:26:59.687

Reputation: 1 682

I would not recommend using EFI in a virtual machine unless you absolutely need to. It is useless overhead. – Bachsau – 2019-03-28T00:52:29.047

I tested all three of them on my CentOS 7 vm with the i3 window manager running on it using a 4k monitor. VBoxSVGA seems to slightly win over VMSVGA. VBoxVGA was terrible. None of the three work well on my 2018 MacBook Pro's retina display. There is so much lag that is almost unusable. – Shadoninja – 2020-02-21T20:09:01.760

Answers

118

Based on what I've found in the source code:

VBoxVGA

This emulates a graphics adapter specific to VirtualBox, the same as in previous versions (<6.0.0).

  • This is the default for images created for previous versions of VirtualBox (<6.0.0) and for Windows guests before Windows 7.
  • It has some form of 3D passthrough, but – if I remember correctly – uses an insecure approach that just lets the guest dump any and all commands to the host GPU.
  • Using it on a Linux guest requires installing the guest additions because this adapter is not (yet) supported by the mainline Linux kernel.
  • Only supports OpenGL 1.1 on 64bit Windows 10 and all Linux guests.

This option likely exists just to provide continuity – after upgrading to 6.0, all old VMs have this mode selected automatically so there's no unexpected change in behavior; you don't lose whatever acceleration you previously had.

VMSVGA

This emulates the VMware Workstation graphics adapter with the "VMware SVGA 3D" acceleration method.

  • Contrary to what the manual says, this is currently the default for Linux guests.
  • It is supposed to provide better performance and security than the old method.
  • This is supported by the mainline Linux kernel using the SVGA driver.
  • Supports OpenGL 2.1 on all Windows and Linux guests.
  • It might also have the advantage of supporting old operating systems which had VMware guest additions available but not VirtualBox guest additions. (I plan to test this with Windows 9x, which is otherwise a massive pain to get even VESA graphics working with VirtualBox)

VBoxSVGA

This provides a hybrid device that works like VMSVGA (including its new 3D acceleration capabilities), but reports the same old PCI VID:PID as VBoxVGA.

  • This is the default for Windows guests.
  • The advantage of this mode is that you can upgrade existing VMs (which previously used VBoxVGA and had the VirtualBox Video driver installed) and they don't lose their graphics in the process – they still see the same device, until you upgrade the "guest additions" at any later time to enable 3D acceleration.
  • Also, because it's still VMware SVGA emulated by VirtualBox, choosing this option and using the VirtualBox driver may still have advantages over the VMware one, e.g. allow to make use of VirtualBox-specific additional features.

"None"

This is, obviously, no emulated graphics at all. Only use it if you provide a real GPU via PCI passthrough, or if your system absolutely doesn't need a GPU.

Sources

user1686

Posted 2019-02-07T13:26:59.687

Reputation: 283 655

2https://www.virtualbox.org/browser/vbox/trunk/src/VBox/Devices/Graphics/DevVGA.cpp; note how both VBoxSVGA and VMSVGA result in VMSVGAEnabled=true and VMSVGA3dEnabled=${3DEnabled}, with the only difference between them being VMSVGAPciId. – user1686 – 2019-02-08T05:40:18.773

2@galgaesh VBoxVGA is supported by drivers/staging/vboxvideo as of approximately Linux 4.14. – user1686 – 2019-02-15T15:12:19.173

In other words, VBoxVGA is better for running hardware GPU accelerated non-graphics operations also? oclvanitygen? "approach that just lets the guest dump any and all commands to the host GPU." – Willtech – 2019-03-18T09:22:11.503

2@Willtech: Apparently no; it still has a translator of some sort. I was previously under the impression that it didn't, but it couldn't actually be that way, since it'd just corrupt the host screen contents as soon as it tried to draw anything. – user1686 – 2019-03-18T10:20:24.390

1I don't know if it's specific to my OS (BionicPup 6.0) but I find that I run into problems with elements not being drawn when using VMSVGA mode, as well as no drawing at all when in text mode. (I had thought it might be useful for faster rendering, since the Guest Additions won't install the VBoxVGA graphics driver, even when everything compiles correctly.) And apps that previously would work no longer can start. – trlkly – 2019-07-25T07:26:01.830

It might be that VirtualBox's VMSVGA emulation is just not completely bug-free yet. – user1686 – 2019-07-25T07:44:20.623

@grawity. That's what I was wondering. Have you tested with a Linux guest running the vmware driver for the VMSVGA mode? – trlkly – 2019-07-25T11:34:18.603

Are you sure that VMSVGA is being "emulated"? Comments for this article on phoronix suggest VirtualBox is actually using the vmware driver: https://www.phoronix.com/forums/forum/software/desktop-linux/1068120-virtualbox-6-0-3d-opengl-performance-with-vmsvga-adapter

– JSamir – 2019-09-10T09:58:47.267

It's stupid: VBox warns against using VBoxVGA, yet VMSVGA still needs some serious improvement. – TJJ – 2019-11-17T18:44:51.440

@JSamir: They're talking about the opposite side. The VMware SVGA driver can be used by the guest, but there is no code taken from VMware Workstation within VirtualBox itself. – user1686 – 2019-11-17T18:49:19.463

I did not get guest auto-resizing with VMSVGA and LUbuntu 18.04.4 LTS. Does anyone know how to do it? – Joshua Kan – 2020-02-21T06:21:00.657

25

But they do tell you quite explicitly when you should prefer them:

– VBoxSVGA: The default graphics controller for new VMs that use Linux or Windows 7 or later. This graphics controller improves performance and 3D support when compared to the legacy VBoxVGA option.

  • Linux or Windows >7
  • improves performance and 3D support

– VBoxVGA: Use this graphics controller for legacy guest OSes. This is the default graphics controller for Windows versions before Windows 7. 

  • (by inference) slightly lower performance but more compatibility with older OSes
  • Old OS or Windows < 7

– VMSVGA: Use this graphics controller to emulate a VMware SVGA graphics device. 

  • Emulates a VMWare device
  • probably best when your VM was originally set up on VMWare and has their tools installed
  • may not be as fast as VBox cards because it's trying to be compatible with something else.

– None: Does not emulate a graphics adapter type.

  • you don't want a graphics adapter
    i.e. you want to run the machine headless or over SSH and don't need the overhead of it emulating graphics.
  • could improve performance as it removes a layer or emulation

Mokubai

Posted 2019-02-07T13:26:59.687

Reputation: 64 434

6

Performance is one difference. Testing with glxgears, I get:

  • VBoxVGA: 60fps +/- 2 (very low, but moving a window around is not smooth so it seems plausible)
  • VMSVGA: 1570fps +/- 50 (after a reboot, I get 1300fps +/- 200?!)
  • VBoxSVGA: 970fps +/- 30 (in this mode, Cinnamon warns me that the desktop environment's graphics are running on CPU)

The guest additions were already updated from the Debian repositories before it spawned the VBoxVGA deprecation warning the first time, so I could just switch it without needing to update first. Check your version using dpkg -l | grep virtualbox.

Guest additions are version 6.0.4, mesa-utils (containing glxgears) 8.4.0-1+b1, base OS is Debian 10 (Buster) with Cinnamon.

VM has PAE/NX enabled, 3D acceleration but no 2D acceleration, 2 CPUs assigned (the host has 2 cores with 2 threads each), PV default, VT-x/AMD-V enabled, and nested paging.

Luc

Posted 2019-02-07T13:26:59.687

Reputation: 2 013

3

I was able to auto set the resolution of the guest with wayland compositor only using VBoxSVGA. virtualbox-guest-additions couldn't auto-resize guest display with wayland when using VMSVGA.

Necktwi

Posted 2019-02-07T13:26:59.687

Reputation: 291

I did not get guest auto-resizing with VMSVGA and xUbuntu 18.04 as well and VBoxSVGA works (but only after log in to xfce) – Konstantin Pelepelin – 2020-01-18T11:10:52.430