[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v6 10/10] docs/system: virtio-gpu: Document host/guest requir
From: |
Akihiko Odaki |
Subject: |
Re: [PATCH v6 10/10] docs/system: virtio-gpu: Document host/guest requirements |
Date: |
Mon, 27 Jan 2025 15:28:10 +0900 |
User-agent: |
Mozilla Thunderbird |
On 2025/01/27 5:11, Dmitry Osipenko wrote:
From: Alex Bennée <alex.bennee@linaro.org>
This attempts to tidy up the VirtIO GPU documentation to make the list
of requirements clearer. There are still a lot of moving parts and the
distros have some catching up to do before this is all handled
automatically.
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Cc: Sergio Lopez Pascual <slp@redhat.com>
Signed-off-by: Dmitry Osipenko <dmitry.osipenko@collabora.com>
[dmitry.osipenko@collabora.com: Extended and corrected doc]
---
docs/system/devices/virtio-gpu.rst | 107 ++++++++++++++++++++++++++++-
1 file changed, 106 insertions(+), 1 deletion(-)
diff --git a/docs/system/devices/virtio-gpu.rst
b/docs/system/devices/virtio-gpu.rst
index ea3eb052df3c..b3db984ff2d3 100644
--- a/docs/system/devices/virtio-gpu.rst
+++ b/docs/system/devices/virtio-gpu.rst
@@ -5,7 +5,9 @@ virtio-gpu
==========
This document explains the setup and usage of the virtio-gpu device.
-The virtio-gpu device paravirtualizes the GPU and display controller.
+The virtio-gpu device provides a GPU and display controller
+paravirtualized using VirtIO. It supports a number of different modes
+from simple 2D displays to fully accelerated 3D graphics.
Linux kernel support
--------------------
@@ -13,6 +15,24 @@ Linux kernel support
virtio-gpu requires a guest Linux kernel built with the
``CONFIG_DRM_VIRTIO_GPU`` option.
+Dependencies
+............
+
+.. note::
+ GPU virtualisation is still an evolving field. Depending on the mode
+ you are running you may need to override distribution supplied
+ libraries with more recent versions or enable build options.
s/virtualisation/virtualization/ for consistency with other documentations.
+
+ Depending on the mode there are a number of requirements the host must
+ meet to be able to be able to support guests. For 3D acceleration QEMU
+ must be able to access the hosts GPU and for the best performance be
+ able to reliably share GPU memory with the guest.
+
+ Virtio-gpu requires a guest Linux kernel built with the
+ ``CONFIG_DRM_VIRTIO_GPU`` option. For 3D accelerations you
+ will need support from guest Mesa configured for whichever encapsulation
+ you need.
This section is part of the "Linux kernel support" chapter, which used
to describe the guest Linux kernel requirement, but this section
discusses a broader topic that includes the host requirements and guest
Mesa. This section needs to be re-structured.
It says "GPU virtualisation is still an evolving field", but I believe
the main evolving field is 3D acceleration. The later parts also
repetitively mention 3D acceleration. Instead of repeating the same
phrase, let the reader know that this section talks about 3D
acceleration at the beginning. It will make the section more concise and
allows readers to skip it when they do not care 3D acceleration.
The ``CONFIG_DRM_VIRTIO_GPU`` option is already described earlier so its
description is redundant.
+
QEMU virtio-gpu variants
------------------------
@@ -56,6 +76,16 @@ on typical modern Linux distributions.
.. _Mesa: https://www.mesa3d.org/
.. _SwiftShader: https://github.com/google/swiftshader
+.. list-table:: Host Requirements
+ :header-rows: 1
+
+ * - Mode
+ - Kernel
+ - Userspace
+ * - virtio-gpu
+ - Framebuffer enabled
It is not clear what "framebuffer enabled" means, and it is also
inconsistent with the host requirements tables in later sections that
describes the Linux kernel version. Also be aware that virtio-gpu works
effectively anywhere, not just Linux.
+ - GTK or SDL display
It is also inconsistent with later section that describes acceleration
backends instead of the display. virtio-gpu also works with any display
and is not restricted to GTK or SDL.
+
virtio-gpu virglrenderer
------------------------
@@ -94,6 +124,61 @@ of virtio-gpu host memory window. This is typically between 256M and 8G.
.. _drm: https://gitlab.freedesktop.org/virgl/virglrenderer/-/tree/main/src/drm
+.. list-table:: Host Requirements
+ :header-rows: 1
+
+ * - Mode
+ - Kernel
+ - Userspace
+ * - virtio-gpu-gl (OpenGL pass-through)
It's already in the "virtio-gpu virglrenderer" setion so you don't have
to mention "virtio-gpu-gl" again here.
+ - GPU enabled> + - libvirglrenderer (virgl support)> + * - virtio-gpu-gl (Vulkan
pass-through)
+ - Linux 6.13+
+ - libvirglrenderer (>= 1.0.0, venus support)
"venus support" is a vague wording. I can guess it means it requires a
build flag, but it's not clear for a novice.
Perhaps you may write the build flag as you did for Mesa.
+ * - virtio-gpu-gl (vDRM native context/AMD)
The later part of documentation calls it "DRM native context", not "vDRM
native context"; let's keep them consistent. "vDRM native context" seems
rarely used; I could only find one example of existing literature:
https://www.collabora.com/news-and-blog/blog/2025/01/15/the-state-of-gfx-virtualization-using-virglrenderer/
Mesa has a directory named vdrm but it is mentioned in no user-facing
documentation.
+ - Linux 6.13+
+ - libvirglrenderer (>= 1.1.0, DRM renderer support)
+ * - virtio-gpu-gl (vDRM native context/Freedreno)
+ - Linux 6.4+
+ - libvirglrenderer (>= 1.0.0, DRM renderer support)
+ * - virtio-gpu-gl (vDRM native context/Intel i915)
+ - Linux 6.13+
+ - libvirglrenderer (`mr1384`_, DRM renderer support)
+ * - virtio-gpu-gl (vDRM native context/Asahi)
+ - Linux 6.13+
+ - libvirglrenderer (`mr1274`_, DRM renderer support)
+
+.. _mr1384:
https://gitlab.freedesktop.org/virgl/virglrenderer/-/merge_requests/1384
+.. _mr1274:
https://gitlab.freedesktop.org/virgl/virglrenderer/-/merge_requests/1274
> +> +.. list-table:: Guest Requirements
+ :header-rows: 1
+
+ * - Mode
+ - Mesa Version
+ - Mesa build flags
+ * - virtio-gpu-gl (OpenGL pass-through)
+ - 20.3.0+
+ - -Dgallium-drivers=virgl
+ * - virtio-gpu-gl (Vulkan pass-through)
+ - 24.2.0+
+ - -Dvulkan-drivers=virtio
+ * - virtio-gpu-gl (vDRM native context/AMD)
+ - 25.0.0+
+ - -Dgallium-drivers=radeonsi -Dvulkan-drivers=amd -Damdgpu-virtio=true
+ * - virtio-gpu-gl (vDRM native context/Freedreno)
+ - 23.1.0+
+ - -Dgallium-drivers=freedreno -Dvulkan-drivers=freedreno
+ * - virtio-gpu-gl (vDRM native context/Intel i915)
+ - `mr29870`_
+ - -Dgallium-drivers=iris -Dvulkan-drivers=intel
-Dintel-virtio-experimental=true
+ * - virtio-gpu-gl (vDRM native context/Asahi)
+ - 24.2.0+
+ - -Dgallium-drivers=asahi -Dvulkan-drivers=asahi
+
+.. _mr29870: https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/29870
+
virtio-gpu rutabaga
-------------------
@@ -133,3 +218,23 @@ Surfaceless is the default if ``wsi`` is not specified.
.. _Wayland display passthrough: https://www.youtube.com/watch?v=OZJiHMtIQ2M
.. _gfxstream-enabled rutabaga:
https://crosvm.dev/book/appendix/rutabaga_gfx.html
.. _guest Wayland proxy: https://crosvm.dev/book/devices/wayland.html
+
+.. list-table:: Host Requirements
+ :header-rows: 1
+
+ * - Mode
+ - Kernel
+ - Userspace
+ * - virtio-gpu-gl (rutabaga/gfxstream)
+ - GPU enabled
+ - aemu/rutabaga_gfx_ffi or vhost-user client with support
Let's omit the mention of aemu. It is a dependency of rutabaga_gfx_ffi
and referring to dependencies of our dependencies will make the
documentation too cluttered. Users should also see rutabaga_gfx_ffi
needs aemu anyway in its build guide; the reference of aemu here is
effectively redundant.
I don't see the vhost-user support in Rutabaga. Does it really exist?
+
+.. list-table:: Guest Requirements
+ :header-rows: 1
+
+ * - Mode
+ - Mesa Version
+ - Mesa build flags
+ * - virtio-gpu-gl (rutabaga/gfxstream)
+ - 24.3.0+
+ - -Dvulkan-drivers=gfxstream
- [PATCH v6 02/10] ui/sdl2: Implement dpy dmabuf functions, (continued)
- [PATCH v6 02/10] ui/sdl2: Implement dpy dmabuf functions, Dmitry Osipenko, 2025/01/26
- [PATCH v6 03/10] virtio-gpu: Handle virgl fence creation errors, Dmitry Osipenko, 2025/01/26
- [PATCH v6 04/10] virtio-gpu: Support asynchronous fencing, Dmitry Osipenko, 2025/01/26
- [PATCH v6 05/10] virtio-gpu: Support DRM native context, Dmitry Osipenko, 2025/01/26
- [PATCH v6 06/10] ui/sdl2: Don't disable scanout when display is refreshed, Dmitry Osipenko, 2025/01/26
- [PATCH v6 07/10] ui/gtk: Don't disable scanout when display is refreshed, Dmitry Osipenko, 2025/01/26
- [PATCH v6 08/10] docs/system: virtio-gpu: Add link to Mesa VirGL doc, Dmitry Osipenko, 2025/01/26
- [PATCH v6 09/10] docs/system: virtio-gpu: Update Venus link, Dmitry Osipenko, 2025/01/26
- [PATCH v6 10/10] docs/system: virtio-gpu: Document host/guest requirements, Dmitry Osipenko, 2025/01/26
- Re: [PATCH v6 10/10] docs/system: virtio-gpu: Document host/guest requirements,
Akihiko Odaki <=
- Re: [PATCH v6 10/10] docs/system: virtio-gpu: Document host/guest requirements, Gurchetan Singh, 2025/01/28
- Re: [PATCH v6 00/10] Support virtio-gpu DRM native context, Alex Bennée, 2025/01/27