[RFC v3 0/9] Waitboost drm syncobj waits
Daniel Vetter
daniel at ffwll.ch
Thu Feb 16 11:19:24 UTC 2023
On Thu, Feb 16, 2023 at 10:59:12AM +0000, Tvrtko Ursulin wrote:
> From: Tvrtko Ursulin <tvrtko.ursulin at intel.com>
>
> In i915 we have this concept of "wait boosting" where we give a priority boost
> for instance to fences which are actively waited upon from userspace. This has
> it's pros and cons and can certainly be discussed at lenght. However fact is
> some workloads really like it.
>
> Problem is that with the arrival of drm syncobj and a new userspace waiting
> entry point it added, the waitboost mechanism was bypassed. AFAIU this mostly
> happens with all Vulkan based userspaces. Hence I cooked up this mini series to
> see if discussion about restoring the waitboost can be had.
>
> The series adds a concept of "wait count" to dma fence which is intended to
> represent explicit userspace waits. It is therefore incremented for every
> explicit dma_fence_enable_sw_signaling and dma_fence_add_wait_callback (like
> dma_fence_add_callback but from explicit/userspace wait paths). Individual
> drivers can then inspect this via dma_fence_wait_count() and decide to wait
> boost the waits on such fences.
>
> Patch has been slightly tested for performance impact by Google using some clvk
> workloads and shows a good improvement (frame time improved from 16ms to 13ms).
>
> It is also important to mention that benefits of waitboosting are not only about
> workloads related to frame presentation time, but also for serialized
> computations which constantly move between the CPU and GPU.
I think this should be integrated with https://lore.kernel.org/all/20210903184806.1680887-1-robdclark@gmail.com/
so that we have one overall approach here that works for all drivers.
Obviously should include support for all interested parties.
-Daniel
>
> *)
> https://gitlab.freedesktop.org/drm/intel/-/issues/8014
>
> v2:
> * Small fixups based on CI feedback:
> * Handle decrement correctly for already signalled case while adding callback.
> * Remove i915 assert which was making sure struct i915_request does not grow.
> * Split out the i915 patch into three separate functional changes.
>
> v3:
> * Handle drivers which open-code callback additions.
>
> Tvrtko Ursulin (9):
> dma-fence: Move i915 helpers into common
> dma-fence: Add callback initialization helper
> drm/i915: Use fence callback initialization helper
> drm/vmwgfx: Use fence callback initialization helper
> dma-fence: Track explicit waiters
> drm/syncobj: Mark syncobj waits as external waiters
> drm/i915: Waitboost external waits
> drm/i915: Mark waits as explicit
> drm/i915: Wait boost requests waited upon by others
>
> drivers/dma-buf/dma-fence.c | 137 ++++++++++++++------
> drivers/gpu/drm/drm_syncobj.c | 6 +-
> drivers/gpu/drm/i915/gt/intel_breadcrumbs.c | 22 ----
> drivers/gpu/drm/i915/gt/intel_engine_pm.c | 1 -
> drivers/gpu/drm/i915/i915_active.c | 2 +-
> drivers/gpu/drm/i915/i915_active.h | 2 +-
> drivers/gpu/drm/i915/i915_request.c | 13 +-
> drivers/gpu/drm/vmwgfx/vmwgfx_fence.c | 2 +-
> include/linux/dma-fence.h | 26 ++++
> 9 files changed, 141 insertions(+), 70 deletions(-)
>
> --
> 2.34.1
>
--
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
More information about the dri-devel
mailing list