Please enable opengl for acceleration and vfio-MDEV support
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
libvirt (Ubuntu) |
Fix Released
|
High
|
Unassigned | ||
Bionic |
Won't Fix
|
Wishlist
|
Unassigned | ||
Cosmic |
Won't Fix
|
Wishlist
|
Unassigned | ||
qemu (Ubuntu) |
Fix Released
|
Undecided
|
Unassigned | ||
Bionic |
Won't Fix
|
Wishlist
|
Unassigned | ||
Cosmic |
Won't Fix
|
Wishlist
|
Unassigned |
Bug Description
[Impact]
* Newer GPU hardware of Nvidia (4.15) and Intel (4.16) can be split into
virtual GPUs by their host device driver. It is customers demand to be
able to utilize that sooner than waiting for 20.04 to happen. While the
usability prior to very recent libvirt versions (not backporting all of
that as it is not SRUable) isn't perfect it works well enough as-is.
* The fix is enabling a build option and some build depends, the code is
already there.
* This applies to the safe SRU exception of "For Long Term Support
releases we sometimes want to introduce new features. They must not
change the behaviour on existing installations ..." due to the fact
that gl is disabled by default. So users need to opt-in to use it after
the change here.
[Test Case]
* There are various ways to test this but they all depend on certain HW
to be available as the feature starts with the Hosts GPU device driver
breaking the card into shareable mediated devices.
* In theory some Nvidia GPU cards [1] can work as well, but I didn't have
one of those to test and most others verifying this might not have one
either. Therefore I'll outline the use of the much more widespread
Intel i915 chips. Note in Bionic i915 vGPU needs the HWE kernel to
work.
* Prepare Host to be able to split the GPU
# loading modules
$ printf "kvmgt\
# in /etc/default/grub add kernel opts
# Refresh boot config and reboot
$ sudo update-initramfs -u
$ sudo update-grub
* Create vGPUs in the host, the PCI path depends on your system.
# Check lspci if you have a different slot than 0000:00:02.0
$ cd /sys/bus/
# you need new UUIDs, you can e.g. run
$ uuid -n 2
# and then take these UUIDs into the driver to create the vGPUs
$ echo 4dd50f26-
$ echo 4dd511f6-
# you should then see soemthing like:
$ ls -laF /sys/bus/
lrwxrwxrwx 1 root root 0 Nov 19 15:38 4dd50f26-
lrwxrwxrwx 1 root root 0 Nov 19 15:38 4dd511f6-
* you can start qemu "as usual" with the tweak of adding
- gl=on to the display statement
- a vfio-pci device referencing the MDEV uuid path
# Example qemu:
/usr/
-m 2048 \
-nodefaults \
-enable-kvm \
-M graphics=off \
-serial stdio \
-cpu host \
-display gtk,gl=on \
-usb -usbdevice tablet \
-net nic -net user \
-device vfio-pci,
-hda /var/lib/
This qemu will boot (you could as well use a Ubuntu ISO, I used a image
I created with uvtool in this case) and when you log in you will see in
the guest the Intel HD graphics card in e.g. lspci.
[Regression Potential]
* by being default off the regressions to current users should be near
zero. We are not changing actual code, but "only" enable a config.
If the config would enable code that runs in cases that are default
enabled (like by an ifdef in C code that makes code outside of gl=on
run the extra code) there could be a regression that we don't see yet.
[Other Info]
* This is NOT virgl based vGPUs as in bug 1657409
* Some related links for the MDEV-GPU topic in general:
https:/
https:/
https:/
http://
https:/
https:/
https:/
https:/
http://
[1]: https:/
----
Hi,
for quite a while we had thought enabling opengl to go along the MIR for virglrenderer (bug 1657409), but missed that it is a prereq for using MDEVs as well.
This now become much more important as newer drivers (recent nvidia drivers, as well as kernel >4.16 for intel) made this much more available to users - and it would work just fine if qemu had opengl enabled.
Other than for virgl we don't need additional libraries to be promoted to MAIN.
Those we need for "just" opengl are already in MAIN for Ubuntu Desktop support.
So the change is as easy as adding a few build-deps and setting a config option.
The code is already in place, qemu 2.11 (Bionic) has all it needs for nvidia and 2.12 >=Cosmic has the code for Intel.
That said flipping this build option (no other change) would allow:
- >= 18.10 use vfio MDEVs for gpu's of nvidia and intel
- 18.04 use vfio MDEVs for gpu's of nvidia
- 18.04 + HWE kernel + later Cloud-Archive with qemu >2.12 use vfio MDEVs for intel gpus
I did a bunch of tests and found no related regressions.
And in terms of SRU terms this falls clearly under "enabling new HW/Feature in LTS" exception as the use of vfio-MDEV for gpus just wasn't as clear back then but becomes more and more important now.
CVE References
Changed in qemu (Ubuntu): | |
status: | New → In Progress |
description: | updated |
description: | updated |
tags: | added: libvirt-19.04 qemu-19.04 |
Next steps:
- extra testing
- getting it into Disco
- considering SRUs from there