[Intel-gfx] [PATCH v2 0/2] drm/i915: timeline semaphore support
Lionel Landwerlin
lionel.g.landwerlin at intel.com
Thu Jun 27 11:05:39 UTC 2019
On 27/06/2019 13:43, Chris Wilson wrote:
> Quoting Lionel Landwerlin (2019-06-27 11:39:24)
>> On 27/06/2019 13:21, Chris Wilson wrote:
>>> Quoting Lionel Landwerlin (2019-06-27 09:03:37)
>>>> Hi,
>>>>
>>>> This revision gets rid of the synchronous wait. We now implement the
>>>> synchronous wait as part of the userspace driver. A thread is spawned
>>>> for each engine and waits for availability of the syncobjs before
>>>> calling into execbuffer.
>>> Why would you do that? It's not like the kernel already has the ability
>>> to serialises execution asynchronously...
>>> -Chris
>>>
>> Maybe I didn't express myself well.
>>
>> There is a requirement from the Vulkan spec that we should be able to
>> queue a workload depending on fences that haven't materialized yet.
>>
>>
>> The last revision implemented that in the i915 by blocking in the
>> execbuffer until the input fences had all materialized.
> My point was that the syncobj seqno itself could be expressed as a proxy
> fence that was replaced with the real fence later. (And that we
> previously had code to do exactly that :( i915 would listen to the
> proxy fence for its scheduling and so be signaled by the right fence
> when it was known. That will be a few orders of magnitude lower latency,
> more if we can optimise away the irq by knowing the proxy fence ahead of
> time.
> -Chris
>
Agreed, but there is a problem here with the dma_fence_chain implementation.
With timeline semaphores, you could be waiting on for point 6 and nobody
is ever going to signal that point.
Instead point 8 is going to be signaled and we need to signal point 6
when that happens.
I don't think the current dma_fence_chain implementation allows to do
that at the moment.
It would need to be more complex with likely more locking.
I have thought a little bit about what you're proposing and found some
issues with other features we need to support (like import/export).
You could end up building a arbitrary long chain of proxy fences firing
one another in cascade and blowing up the stack in a kernel task
signaling one of them.
-Lionel
More information about the Intel-gfx
mailing list