[Intel-gfx] [PATCH] drm/i915: Delegate our irq handler to a thread
Brian Welty
brian.welty at intel.com
Thu Sep 26 18:57:17 UTC 2019
On 9/26/2019 7:25 AM, Chris Wilson wrote:
> Moving our primary irq handler to a RT thread incurs an extra 1us delay
> in process interrupts. This is most notice in waking up client threads,
> where it adds about 20% of extra latency. It also imposes a delay in
> feeding the GPU, an extra 1us before signaling secondary engines and
> extra latency in resubmitting work to keep the GPU busy. The latter case
> is insignificant as the latency hidden by the active GPU, and
> preempt-to-busy ensures that no extra latency is incurred for
> preemption.
>
> The benefit is that we reduced the impact on the rest of the system, the
> cycletest shows a reduction from 5us mean latency to 2us, with the
> maximum observed latency (in a 2 minute window) reduced by over 160us.
Hi Chris,
I'm curious to understand this a little better.
If only benefit of this patch is improving overall system performance, then
can you say why i915 interrupt handling doesn't fit into what I thought was
the common usage of threaded interrupts...
Usually with request_threaded_irq(), I thought typically both handlers
are specified and so you'd only fallback to the threaded handler when the
interrupt context handler is overwhelmed?
Like so:
while (HW events need some action) {
.... do something ...
if (too overwhelmed) /* ie. reduce load on system */
return IRQ_WAKE_THREAD;
}
return IRQ_HANDLED;
Likely you considered something like above.
I'm just looking to understand why using only threaded interrupt handler is best in this case.
(Also maybe discuss this a little bit further in commit message...?)
Sorry if this was perhaps discussed in response to Tvrtko's question.
I didn't quite follow the fast/slow separation mentioned in that thread.
Thanks,
-Brian
>
> Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
> Cc: Joonas Lahtinen <joonas.lahtinen at linux.intel.com>
> Cc: Tvrtko Ursulin <tvrtko.ursulin at intel.com>
> Cc: Clark Williams <williams at redhat.com>
> Cc: Sebastian Andrzej Siewior <bigeasy at linutronix.de>
> ---
> Note this should need the fixes in
> 20190926105644.16703-2-bigeasy at linutronix.de, by itself this should be a
> test vehicle to exercise that patch!
> ---
> drivers/gpu/drm/i915/i915_irq.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
> index bc83f094065a..f3df7714a3f3 100644
> --- a/drivers/gpu/drm/i915/i915_irq.c
> +++ b/drivers/gpu/drm/i915/i915_irq.c
> @@ -4491,8 +4491,8 @@ int intel_irq_install(struct drm_i915_private *dev_priv)
>
> intel_irq_reset(dev_priv);
>
> - ret = request_irq(irq, intel_irq_handler(dev_priv),
> - IRQF_SHARED, DRIVER_NAME, dev_priv);
> + ret = request_threaded_irq(irq, NULL, intel_irq_handler(dev_priv),
> + IRQF_SHARED, DRIVER_NAME, dev_priv);
> if (ret < 0) {
> dev_priv->drm.irq_enabled = false;
> return ret;
>
More information about the Intel-gfx
mailing list