[Intel-gfx] [PATCH] drm/i915: Avoid keeping waitboost active for signaling threads
Chris Wilson
chris at chris-wilson.co.uk
Fri Jun 23 10:48:33 UTC 2017
Quoting Michał Winiarski (2017-06-23 11:35:06)
> On Thu, Jun 22, 2017 at 11:55:51AM +0100, Chris Wilson wrote:
> > Once a client has requested a waitboost, we keep that waitboost active
> > until all clients are no longer waiting. This is because we don't
> > distinguish which waiter deserves the boost. However, with the advent of
> > fence signaling, the signaler threads appear as waiters to the RPS
> > interrupt handler. So instead of using a single boolean to track when to
> > keep the waitboost active, use a counter of all outstanding waitboosted
> > requests.
> >
> > At this point, I have removed all vestiges of the rate limiting on
> > clients. Whilst this means that compositors should remain more fluid,
> > it also means that boosts are more prevalent.
> >
> > A drawback of this implementation is that it requires constant request
> > submission to keep the waitboost trimmed (as it is now cancelled when the
> > request is completed). This will be fine for a busy system, but near
> > idle the boosts may be kept for longer than desired (effectively tens of
> > vblanks worstcase) and there is a reliance on rc6 instead.
>
> In other words, now we're disabling boost when all requests that required boost
> are retired.
> We may need to tweak igt pm_rps boost scenarios to account for that extra time.
It should be less time boosted than before, if the requests are retired
promptly. But that's a big if.
> > Reported-by: Michał Winiarski <michal.winiarski at intel.com>
> > Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
> > Cc: Michał Winiarski <michal.winiarski at intel.com>
>
> [SNIP]
>
> > @@ -2347,11 +2349,10 @@ static int i915_rps_boost_info(struct seq_file *m, void *data)
> >
> > rcu_read_lock();
> > task = pid_task(file->pid, PIDTYPE_PID);
> > - seq_printf(m, "%s [%d]: %d boosts%s\n",
> > + seq_printf(m, "%s [%d]: %d boosts\n",
> > task ? task->comm : "<unknown>",
> > task ? task->pid : -1,
> > - file_priv->rps.boosts,
> > - list_empty(&file_priv->rps.link) ? "" : ", active");
> > + atomic_read(&file_priv->rps.boosts));
> > rcu_read_unlock();
> > }
> > seq_printf(m, "Kernel (anonymous) boosts: %d\n", dev_priv->rps.boosts);
>
> dev_priv->rps.boosts seems to be unused at this point, could you remove it while
> you're here?
Oh, I should just hook up the other side of
> > + if (rps != NULL)
> > + atomic_inc(&rps->boosts);
else
atomic_inc(&dev_priv->rps.boosts);
The only user is dead-code atm, but it may come in useful again for
atomic modesetting.
-Chris
More information about the Intel-gfx
mailing list