[Intel-gfx] [PATCH] drm/i915/pmu: Skip busyness sampling when and where not needed

Chris Wilson chris at chris-wilson.co.uk
Wed Sep 11 16:22:35 UTC 2019


Quoting Tvrtko Ursulin (2019-09-11 17:07:30)
> From: Tvrtko Ursulin <tvrtko.ursulin at intel.com>
> 
> Since d0aa694b9239 ("drm/i915/pmu: Always sample an active ringbuffer")
> the cost of sampling the engine state on execlists platforms became a
> little bit higher when both engine busyness and one of the wait states are
> being monitored. (Previously the busyness sampling on legacy platforms was
> done via seqno comparison so there was no cost of mmio read.)
> 
> We can avoid that by skipping busyness sampling when engine supports
> software busy stats and so avoid the cost of potential mmio read and
> sample accumulation.
> 
> Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin at intel.com>
> Cc: Chris Wilson <chris at chris-wilson.co.uk>
> ---
>  drivers/gpu/drm/i915/i915_pmu.c | 4 ++++
>  1 file changed, 4 insertions(+)
> 
> diff --git a/drivers/gpu/drm/i915/i915_pmu.c b/drivers/gpu/drm/i915/i915_pmu.c
> index 8e251e719390..623ad32303a1 100644
> --- a/drivers/gpu/drm/i915/i915_pmu.c
> +++ b/drivers/gpu/drm/i915/i915_pmu.c
> @@ -194,6 +194,10 @@ engines_sample(struct intel_gt *gt, unsigned int period_ns)
>                 if (val & RING_WAIT_SEMAPHORE)
>                         add_sample(&pmu->sample[I915_SAMPLE_SEMA], period_ns);
>  
> +               /* No need to sample when busy stats are supported. */
> +               if (intel_engine_supports_stats(engine))
> +                       goto skip;
> +

Reviewed-by: Chris Wilson <chris at chris-wilson.co.uk>

I was worried we were double accounting, but later on we
have

if (intel_engine_supports_stats())
	val = ktime_to_ns(intel_engine_get_busy_time());
else
	val = engine->pmu.sample[sample].cur;

so indeed, this is just wasted effort.
-Chris


More information about the Intel-gfx mailing list