Intel-GFX Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com>
To: Jason Ekstrand <jason@jlekstrand.net>,
	Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Cc: Intel GFX <intel-gfx@lists.freedesktop.org>,
	Maling list - DRI developers <dri-devel@lists.freedesktop.org>
Subject: Re: [Intel-gfx] [PATCH] drm/i915: Implement SINGLE_TIMELINE with a syncobj (v2)
Date: Thu, 25 Mar 2021 09:48:54 +0000	[thread overview]
Message-ID: <d0d48583-43eb-f91a-c928-543598e97d5e@linux.intel.com> (raw)
In-Reply-To: <CAOFGe95AjxvkrAHcY_2CQxzEB+9ndmiP7mijyEWoPFHjZi+OMA@mail.gmail.com>


On 24/03/2021 17:18, Jason Ekstrand wrote:
> On Wed, Mar 24, 2021 at 6:36 AM Tvrtko Ursulin
> <tvrtko.ursulin@linux.intel.com> wrote:
>>
>>
>> On 24/03/2021 09:52, Daniel Vetter wrote:
>>> On Wed, Mar 24, 2021 at 09:28:58AM +0000, Tvrtko Ursulin wrote:
>>>>
>>>> On 23/03/2021 17:51, Jason Ekstrand wrote:
>>>>> This API is entirely unnecessary and I'd love to get rid of it.  If
>>>>> userspace wants a single timeline across multiple contexts, they can
>>>>> either use implicit synchronization or a syncobj, both of which existed
>>>>> at the time this feature landed.  The justification given at the time
>>>>> was that it would help GL drivers which are inherently single-timeline.
>>>>> However, neither of our GL drivers actually wanted the feature.  i965
>>>>> was already in maintenance mode at the time and iris uses syncobj for
>>>>> everything.
>>>>>
>>>>> Unfortunately, as much as I'd love to get rid of it, it is used by the
>>>>> media driver so we can't do that.  We can, however, do the next-best
>>>>> thing which is to embed a syncobj in the context and do exactly what
>>>>> we'd expect from userspace internally.  This isn't an entirely identical
>>>>> implementation because it's no longer atomic if userspace races with
>>>>> itself by calling execbuffer2 twice simultaneously from different
>>>>> threads.  It won't crash in that case; it just doesn't guarantee any
>>>>> ordering between those two submits.
>>>>>
>>>>> Moving SINGLE_TIMELINE to a syncobj emulation has a couple of technical
>>>>> advantages beyond mere annoyance.  One is that intel_timeline is no
>>>>> longer an api-visible object and can remain entirely an implementation
>>>>> detail.  This may be advantageous as we make scheduler changes going
>>>>> forward.  Second is that, together with deleting the CLONE_CONTEXT API,
>>>>> we should now have a 1:1 mapping between intel_context and
>>>>> intel_timeline which may help us reduce locking.
>>>>
>>>> Much, much better commit message although I still fail to understand where
>>>> do you see implementation details leaking out. So for me this is still
>>>> something I'd like to get to the bottom of.
> 
> I didn't say "leaking".  I said it's no longer API-visible.  That's
> just true.  It used to be a kernel object that userspace was unaware
> of, then we added SINGLE_TIMELINE and userspace now has some influence
> over the object.  With this patch, it's hidden again.  I don't get why
> that's confusing.

I am definitely glad we moved on from leaking to less dramatic wording, 
but it is still not API "visible" in so much struct file_operations * is 
not user visible in any negative way when you do open(2), being just 
implementation detail. But I give up.

>>>> I would also mention the difference regarding fence context change.
> 
> There are no fence context changes.  The fence that we stuff in the
> syncobj is an i915 fence and the fence we pull back out is an i915
> fence.  A syncobj is just a fancy wrapper for a dma_buf pointer.

Change is in the dma_fence->context.

Current code single timeline is one fence context. With this patch that 
is no longer the case.

Not sure that it has any practical implications for the internal 
dma_fence code like is_later checks , haven't analysed it.

And sync fence info ioctl exposes this value to userspace which probably 
has no practical implications. Unless some indirect effect when merging 
fences.

Main point is that I think these are the things which need to be 
discussed in the commit message.

>>>> And in general I would maintain this patch as part of a series which ends up
>>>> demonstrating the "mays" and "shoulds".
>>>
>>> I disagree. The past few years we've merged way too much patches and
>>> features without carefully answering the high level questions of
>>> - do we really need to solve this problem
>>> - and if so, are we really solving this problem in the right place
>>>
>>> Now we're quite in a hole, and we're not going to get out of this hole if
>>> we keep applying the same standards that got us here. Anything that does
>>> not clearly and without reservation the above two questions with "yes"
>>> needs to be removed or walled off, just so we can eventually see which
>>> complexity we really need, and what is actually superflous.
>>
>> I understand your general point but when I apply it to this specific
>> patch, even if it is simple, it is neither removing the uapi or walling
>> it off. So I see it as the usual review standard to ask to see what
>> "mays" and "shoulds" actually get us in concrete terms.
> 
> Instead of focusing on the term "leak", let's focus on this line of
> the commit message instead:
> 
>>   Second is that, together with deleting the CLONE_CONTEXT API,
>> we should now have a 1:1 mapping between intel_context and
>> intel_timeline which may help us reduce locking.
> 
> Now, I've not written any patches yet which actually reduce the
> locking.  I can try to look into that today.  I CC'd Maarten on the
> first send of this because I was hoping he would have good intuition
> about this.  It may be that this object will always have to require
> some amount of locking if the scheduler has to touch them in parallel
> with other stuff.  What I can say concretely, however, is that this
> does reduce the sharing of an internal object even if it doesn't get
> rid of it completely.  The one thing that is shared all over the place
> with this patch is a syncobj which is explicitly designed for exactly
> this sort of case and can be used and abused by as many threads as
> you'd like.  That seems like it's going in the right direction.
> 
> I can further weasel-word the commit message to make the above more
> prominent if you'd like.

I am not interested in making you weasel-word anything but reaching a 
consensus and what is actually true and accurate.

Regards,

Tvrtko
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

  reply	other threads:[~2021-03-25  9:49 UTC|newest]

Thread overview: 46+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-03-19 22:38 [Intel-gfx] [PATCH 0/4] drm/i915: uAPI clean-ups part 2 Jason Ekstrand
2021-03-19 22:38 ` [Intel-gfx] [PATCH 1/4] drm/i915: Drop I915_CONTEXT_PARAM_RINGSIZE Jason Ekstrand
2021-03-20 14:48   ` Jason Ekstrand
2021-03-22 10:52     ` Matthew Auld
2021-03-22 16:00       ` Jason Ekstrand
2021-03-22 12:01     ` Jani Nikula
2021-03-22 16:01       ` Jason Ekstrand
2021-03-22 16:26         ` Daniel Vetter
2021-03-19 22:38 ` [Intel-gfx] [PATCH 2/4] drm/i915: Drop I915_CONTEXT_PARAM_NO_ZEROMAP Jason Ekstrand
2021-03-22 13:00   ` [Intel-gfx] [drm/i915] 014c1518e8: assertion_failure kernel test robot
2021-03-19 22:38 ` [Intel-gfx] [PATCH 3/4] drm/i915: Drop the CONTEXT_CLONE API Jason Ekstrand
2021-03-22 11:22   ` Tvrtko Ursulin
2021-03-22 14:09     ` Daniel Vetter
2021-03-22 14:32       ` Tvrtko Ursulin
2021-03-22 14:57         ` Daniel Vetter
2021-03-22 15:31           ` Tvrtko Ursulin
2021-03-22 16:24             ` Jason Ekstrand
2021-03-23  9:46               ` Tvrtko Ursulin
2021-03-22 16:43             ` Daniel Vetter
2021-03-23  9:14               ` Tvrtko Ursulin
2021-03-23 13:23                 ` Daniel Vetter
2021-03-23 16:23                   ` Tvrtko Ursulin
2021-03-23 17:50                     ` Jason Ekstrand
2021-03-19 22:38 ` [Intel-gfx] [PATCH 4/4] drm/i915: Implement SINGLE_TIMELINE with a syncobj Jason Ekstrand
2021-03-22 12:28   ` Tvrtko Ursulin
2021-03-22 16:10     ` Jason Ekstrand
2021-03-23  9:35       ` Tvrtko Ursulin
2021-03-23 17:44         ` Jason Ekstrand
2021-03-22 16:59   ` Daniel Vetter
2021-03-22 19:12     ` Jason Ekstrand
2021-03-23 17:51   ` [Intel-gfx] [PATCH] drm/i915: Implement SINGLE_TIMELINE with a syncobj (v2) Jason Ekstrand
2021-03-24  9:28     ` Tvrtko Ursulin
2021-03-24  9:52       ` Daniel Vetter
2021-03-24 11:36         ` Tvrtko Ursulin
2021-03-24 17:18           ` Jason Ekstrand
2021-03-25  9:48             ` Tvrtko Ursulin [this message]
2021-03-25  9:54               ` Daniel Vetter
2021-03-24  9:46     ` Daniel Vetter
2021-03-25 21:13     ` Matthew Brost
2021-03-25 22:19       ` Jason Ekstrand
2021-03-25 22:21     ` [Intel-gfx] [PATCH 4/4] drm/i915: Implement SINGLE_TIMELINE with a syncobj (v3) Jason Ekstrand
2021-03-19 23:14 ` [Intel-gfx] ✗ Fi.CI.BUILD: failure for drm/i915: uAPI clean-ups part 2 Patchwork
2021-03-22 11:55   ` Jani Nikula
2021-03-22 16:11     ` Jason Ekstrand
2021-03-23 21:32 ` [Intel-gfx] ✗ Fi.CI.BUILD: failure for drm/i915: uAPI clean-ups part 2 (rev2) Patchwork
2021-03-26  3:01 ` [Intel-gfx] ✗ Fi.CI.BUILD: failure for drm/i915: uAPI clean-ups part 2 (rev3) Patchwork

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=d0d48583-43eb-f91a-c928-543598e97d5e@linux.intel.com \
    --to=tvrtko.ursulin@linux.intel.com \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=jason@jlekstrand.net \
    --cc=maarten.lankhorst@linux.intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox