Re: [RFC] Implicit vs explicit user fence sync

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Daniel,

Am 04.05.21 um 16:15 schrieb Daniel Vetter:
Hi Christian,

On Tue, May 04, 2021 at 03:27:17PM +0200, Christian König wrote:
Hi guys,

with this patch set I want to look into how much more additional work it
would be to support implicit sync compared to only explicit sync.

Turned out that this is much simpler than expected since the only
addition is that before a command submission or flip the kernel and
classic drivers would need to wait for the user fence to signal before
taking any locks.
It's a lot more I think
- sync_file/drm_syncobj still need to be supported somehow

You need that with explicit fences as well.

I'm just concentrating on what extra burden implicit sync would get us.

- we need userspace to handle the stall in a submit thread at least
- there's nothing here that sets the sync object
- implicit sync isn't just execbuf, it's everything. E.g. the various
   wait_bo ioctl also need to keep working, including timeout and
   everything

Good point, but that should be relatively easily to add as well.

- we can't stall in atomic kms where you're currently stalling, that's for
   sure. The uapi says "we're not stalling for fences in there", and you're
   breaking that.

Again as far as I can see we run into the same problem with explicit sync.

So the question is where could we block for atomic modeset for user fences in general?

- ... at this point I stopped pondering but there's definitely more

Imo the only way we'll even get the complete is if we do the following:
1. roll out implicit sync with userspace fences on a driver-by-driver basis
    1a. including all the winsys/modeset stuff

Completely agree, that's why I've split that up into individual patches.

I'm also fine if drivers can just opt out of user fence based synchronization and we return an error from dma_buf_dynamic_attach() if some driver says it can't handle that.

2. roll out support for userspace fences to drm_syncobj timeline for
    interop, both across process/userspace and across drivers
    2a. including all the winsys/modeset stuff, but hopefully that's
        largely solved with 1. already.

Correct, but again we need this for explicit fencing as well.

3. only then try to figure out how to retroshoehorn this into implicit
    sync, and whether that even makes sense.

Because doing 3 before we've done 1&2 for at least 2 drivers (2 because
interop fun across drivers) is just praying that this time around we're
not collectively idiots and can correctly predict the future. That never
worked :-)

For this prototype this patch set doesn't implement any user fence
synchronization at all, but just assumes that faulting user pages is
sufficient to make sure that we can wait for user space to finish
submitting the work. If necessary this can be made even more strict, the
only use case I could find which blocks this is the radeon driver and
that should be handle able.

This of course doesn't give you the same semantic as the classic
implicit sync to guarantee that you have exclusive access to a buffers,
but this is also not necessary.

So I think the conclusion should be that we don't need to concentrate on
implicit vs. explicit sync, but rather how to get the synchronization
and timeout signalling figured out in general.
I'm not sure what exactly you're proving here aside from "it's possible to
roll out a function with ill-defined semantics to all drivers". This
really is a lot harder than just this one function and just this one patch
set.

No it isn't. The hard part is getting the user sync stuff up in general.

Adding implicit synchronization on top of that is then rather trivial.

Christian.

-Daniel

_______________________________________________
dri-devel mailing list
dri-devel@xxxxxxxxxxxxxxxxxxxxx
https://lists.freedesktop.org/mailman/listinfo/dri-devel




[Index of Archives]     [Linux DRI Users]     [Linux Intel Graphics]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux