** Description changed:

  [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.
+  * 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.
+  * 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.
+  * 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]
  
-  * TBD: I need to convert my notes into something someone can follow
- more easily
+  * 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\nvfio-iommu-type1\nvfio-mdev" | sudo tee 
/etc/initramfs-tools/modules
+    # in /etc/default/grub add kernel opts
+        i915.enable_gvt=1 intel_iommu=on drm.debug=0
+    # 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/pci/devices/0000:00:02.0/i915-GVTg_V4_4/
+    # 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-ec08-11e8-b838-4bc3356865b6 | sudo tee create
+    $ echo 4dd511f6-ec08-11e8-b839-2f163ddee3b3 | sudo tee create
+    # you should then see soemthing like:
+    $ ls -laF /sys/bus/mdev/devices/
+ lrwxrwxrwx 1 root root 0 Nov 19 15:38 4dd50f26-ec08-11e8-b838-4bc3356865b6 -> 
../../../devices/pci0000:00/0000:00:02.0/4dd50f26-ec08-11e8-b838-4bc3356865b6/
+ lrwxrwxrwx 1 root root 0 Nov 19 15:38 4dd511f6-ec08-11e8-b839-2f163ddee3b3 -> 
../../../devices/pci0000:00/0000:00:02.0/4dd511f6-ec08-11e8-b839-2f163ddee3b3/
+ 
+  * 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/bin/qemu-system-x86_64 \
+    -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,sysfsdev=/sys/bus/pci/devices/0000:00:02.0/4dd511f6-ec08-11e8-b839-2f163ddee3b3,display=on,rombar=0
 \
+    -hda /var/lib/uvtool/libvirt/images/bionic-vgpu.qcow
+ 
+   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.
+  * 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
+ 
+  * This is NOT virgl based vGPUs as in bug 1657409
+  * Some related links for the MDEV-GPU topic in general:
+    https://bugzilla.redhat.com/show_bug.cgi?id=1460804
+    https://bugzilla.redhat.com/show_bug.cgi?id=1337290
+    
https://docs.nvidia.com/grid/latest/grid-vgpu-release-notes-red-hat-el-kvm/index.html
+    
http://on-demand.gputechconf.com/gtc/2017/presentation/s7572-suneel-marthi-trevor-grant-extending-mahout-samsara.pdf
+    
https://www.kraxel.org/blog/2018/04/vgpu-display-support-finally-merged-upstream/
+    https://github.com/intel/gvt-linux/wiki/GVTg_Setup_Guide
+    
https://docs.nvidia.com/grid/latest/grid-vgpu-release-notes-red-hat-el-kvm/index.html
+    
https://www.linux-kvm.org/images/5/59/02x03-Neo_Jia_and_Kirti_Wankhede-vGPU_on_KVM-A_VFIO_based_Framework.pdf
+    
http://on-demand.gputechconf.com/gtc/2017/presentation/s7572-suneel-marthi-trevor-grant-extending-mahout-samsara.pdf
+ 
+ 
+ [1]: https://docs.nvidia.com/grid/latest/grid-vgpu-user-guide/index.html
+   
  
  ----
- 
  
  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.

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/1804766

Title:
  Please enable opengl for acceleration and vfio-MDEV support

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/qemu/+bug/1804766/+subscriptions

-- 
ubuntu-bugs mailing list
ubuntu-bugs@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to