[Intel-gfx] [PATCH i-g-t 3/3] i915/gem_exec_fence: Avoid long preempt-off sleeps

Chris Wilson chris at chris-wilson.co.uk
Wed Nov 13 11:06:52 UTC 2019


Quoting Tvrtko Ursulin (2019-11-13 10:54:58)
> 
> On 08/11/2019 14:22, Chris Wilson wrote:
> > The kernel is now enforcing that clients are not allowed to block higher
> > priority contexts from accessing the GPU; one is no longer allowed to
> > sleep for a second hogging the GPU. Reduce the sleep down to 50ms, short
> > enough not to anger the preempt-off checks while long enough for any
> > ordinary GPU work to complete.
> > 
> > Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
> > ---
> >   tests/i915/gem_exec_fence.c | 3 ++-
> >   1 file changed, 2 insertions(+), 1 deletion(-)
> > 
> > diff --git a/tests/i915/gem_exec_fence.c b/tests/i915/gem_exec_fence.c
> > index 4e8bdd7b3..002120bf3 100644
> > --- a/tests/i915/gem_exec_fence.c
> > +++ b/tests/i915/gem_exec_fence.c
> > @@ -348,7 +348,8 @@ static void test_fence_await(int fd, unsigned ring, unsigned flags)
> >               i++;
> >       }
> >   
> > -     sleep(1);
> > +     /* Long, but not too long to anger preemption disable checks */
> > +     usleep(50 * 1000); /* 50 ms, typical preempt reset is 150+ms */
> 
> Was the point of this sleep two-fold: 1) allow spinner to start (use 
> polling spinner?) and allow forked children to submit (use pipe sync?)?

It was 3: wait long enough so we could be reasonably sure that the
children were indeed waiting and given the opportunity would not run
ahead of the parent.

This is a very loose, runs anywhere test. Revised variants are in
gem_exec_scheduler, which I like to think are a bit more precise.
Although I think the general test concept of "encouraging the children to
run first" could do with a little more exploration, as therein are where
the bugs lie.
-Chris


More information about the Intel-gfx mailing list