dri-devel Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
To: dri-devel <dri-devel@lists.freedesktop.org>,
	"Koenig, Christian" <Christian.Koenig@amd.com>,
	"Zhou, David(ChunMing)" <David1.Zhou@amd.com>,
	Jason Ekstrand <jason@jlekstrand.net>
Subject: Threaded submission & semaphore sharing
Date: Thu, 1 Aug 2019 23:52:23 +0300	[thread overview]
Message-ID: <e8063826-a38b-e1d3-fe8b-63202b8bd264@intel.com> (raw)

Hi Christian, David,

Sorry to report this so late in the process, but I think we found an 
issue not directly related to syncobj timelines themselves but with a 
side effect of the threaded submissions.

Essentially we're failing a test in crucible : 
func.sync.semaphore-fd.opaque-fd
This test create a single binary semaphore, shares it between 2 
VkDevice/VkQueue.
Then in a loop it proceeds to submit workload alternating between the 2 
VkQueue with one submit depending on the other.
It does so by waiting on the VkSemaphore signaled in the previous 
iteration and resignaling it.

The problem for us is that once things are dispatched to the submission 
thread, the ordering of the submission is lost.
Because we have 2 devices and they both have their own submission thread.

Jason suggested that we reestablish the ordering by having 
semaphores/syncobjs carry an additional uint64_t payload.
This 64bit integer would represent be an identifier that submission 
threads will WAIT_FOR_AVAILABLE on.

The scenario would look like this :
     - vkQueueSubmit(queueA, signal on semA);
         - in the caller thread, this would increment the syncobj 
additional u64 payload and return it to userspace.
         - at some point the submission thread of queueA submits the 
workload and signal the syncobj of semA with value returned in the 
caller thread of vkQueueSubmit().
     - vkQueueSubmit(queueB, wait on semA);
         - in the caller thread, this would read the syncobj additional 
u64 payload
         - at some point the submission thread of queueB will try to 
submit the work, but first it will WAIT_FOR_AVAILABLE the u64 value 
returned in the step above

Because we want the binary semaphores to be shared across processes and 
would like this to remain a single FD, the simplest location to store 
this additional u64 payload would be the DRM syncobj.
It would need an additional ioctl to read & increment the value.

What do you think?

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

             reply	other threads:[~2019-08-01 20:52 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-08-01 20:52 Lionel Landwerlin [this message]
2019-08-02  3:18 ` Threaded submission & semaphore sharing Zhou, David(ChunMing)
2019-08-02  4:28   ` Lionel Landwerlin
2019-08-02  4:33     ` Koenig, Christian
2019-08-02  4:55       ` Lionel Landwerlin
2019-08-02  5:08         ` Koenig, Christian
2019-08-02  5:16           ` Lionel Landwerlin
  -- strict thread matches above, loose matches on Subject: below --
2019-08-02  5:21 Koenig, Christian
2019-08-02  6:10 Koenig, Christian
2019-08-02  6:27 ` Lionel Landwerlin
2019-08-02  9:11   ` zhoucm1
2019-08-02  9:41     ` Lionel Landwerlin
2019-08-02 10:01       ` zhoucm1
2019-08-02 12:12         ` Lionel Landwerlin

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=e8063826-a38b-e1d3-fe8b-63202b8bd264@intel.com \
    --to=lionel.g.landwerlin@intel.com \
    --cc=Christian.Koenig@amd.com \
    --cc=David1.Zhou@amd.com \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=jason@jlekstrand.net \
    /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