Dmitry Osipenko <dmitry.osipe...@collabora.com> writes:

> This patchset adds DRM native context support to VirtIO-GPU on Qemu.
>
> Contarary to Virgl and Venus contexts that mediates high level GFX APIs,
> DRM native context [1] mediates lower level kernel driver UAPI, which
> reflects in a less CPU overhead and less/simpler code needed to support it.
> DRM context consists of a host and guest parts that have to be implemented
> for each GPU driver. On a guest side, DRM context presents a virtual GPU as
> a real/native host GPU device for GL/VK applications.
>
<snip>

So first the good news. I can now get this up and running (x86/kvm guest
with Intel graphics) and as far as I can tell the native context mode is
working. With Dongwon Kim's patch the mirroring/corruption I was seeing
is gone.

I can successfully run glmark2-wayland (although see bellow) but vkmark
completely fails to start reporting:

  MESA: info: virtgpu backend not enabling VIRTGPU_PARAM_CREATE_FENCE_PASSING
  MESA: info: virtgpu backend not enabling VIRTGPU_PARAM_CREATE_GUEST_HANDLE
  MESA: error: DRM_IOCTL_VIRTGPU_GET_CAPS failed with Invalid argument
  MESA: error: DRM_IOCTL_VIRTGPU_CONTEXT_INIT failed with Invalid argument, 
continuing without context...
  MESA: error: DRM_VIRTGPU_RESOURCE_CREATE_BLOB failed with No space left on 
device
  MESA: error: Failed to create virtgpu AddressSpaceStream
  MESA: error: vulkan: Failed to get host connection
  MESA: error: DRM_VIRTGPU_RESOURCE_CREATE_BLOB failed with No space left on 
device
  MESA: error: Failed to create virtgpu AddressSpaceStream
  MESA: error: vulkan: Failed to get host connection
  MESA: error: DRM_VIRTGPU_RESOURCE_CREATE_BLOB failed with No space left on 
device
  MESA: error: Failed to create virtgpu AddressSpaceStream
  MESA: error: vulkan: Failed to get host connection
  MESA: warning: ../src/gfxstream/guest/vulkan/gfxstream_vk_device.cpp:681: 
VK_ERROR_DEVICE_LOST
  MESA: error: DRM_VIRTGPU_RESOURCE_CREATE_BLOB failed with No space left on 
device
  MESA: error: Failed to create virtgpu AddressSpaceStream
  MESA: error: vulkan: Failed to get host connection
  MESA: warning: ../src/gfxstream/guest/vulkan/gfxstream_vk_device.cpp:332: 
VK_ERROR_DEVICE_LOST
  === Physical Device 0 ===
      Vendor ID:      0x8086
      Device ID:      0xA780
      Device Name:    Intel(R) Graphics (RPL-S)
      Driver Version: 101068899
      Device UUID:    b39e1cf39b101489e3c6039406f78d6c

I was booting with 4G of shared memory.

Later versions of vkmark (2025.01) fail due to missing the
VK_KHR_display extension required as of
https://github.com/vkmark/vkmark/commit/7c3189c6482cb84c3c0e69d6dabb9d80e0c0092a

> # Note about known performance problem in Qemu:
>
> DRM contexts are mapping host blobs extensively and these mapping
> operations work slowly in Qemu. Exact reason is unknown. Mappings work
> fast on Crosvm For DRM contexts this problem is more visible than for
> Venus/Virgl.

And how!

With drm_native I get a lot of stutter while running and barely 100FPS
(compared to ~8000 on pure venus). IMHO we need to figure out why there
is such a discrepancy before merging because currently it makes more
sense to use Venus. 

<snip>

I'll do some more testing with my AMD/Aarch64 rig next week.

-- 
Alex Bennée
Virtualisation Tech Lead @ Linaro

Reply via email to