[Intel-gfx] [PATCH 4/9] drm/i915: Track runtime spent in unreachable intel_contexts

Mika Kuoppala mika.kuoppala at linux.intel.com
Mon Sep 14 15:04:03 UTC 2020


Tvrtko Ursulin <tvrtko.ursulin at linux.intel.com> writes:

> From: Tvrtko Ursulin <tvrtko.ursulin at intel.com>
>
> As contexts are abandoned we want to remember how much GPU time they used
> (per class) so later we can used it for smarter purposes.
>
> Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin at intel.com>
> ---
>  drivers/gpu/drm/i915/gem/i915_gem_context.c       | 13 ++++++++++++-
>  drivers/gpu/drm/i915/gem/i915_gem_context_types.h |  5 +++++
>  2 files changed, 17 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/i915/gem/i915_gem_context.c b/drivers/gpu/drm/i915/gem/i915_gem_context.c
> index df5488998d53..a12e926444e1 100644
> --- a/drivers/gpu/drm/i915/gem/i915_gem_context.c
> +++ b/drivers/gpu/drm/i915/gem/i915_gem_context.c
> @@ -253,7 +253,19 @@ static void free_engines_rcu(struct rcu_head *rcu)
>  {
>  	struct i915_gem_engines *engines =
>  		container_of(rcu, struct i915_gem_engines, rcu);
> +	struct i915_gem_context *ctx = engines->ctx;
> +	struct i915_gem_engines_iter it;
> +	struct intel_context *ce;
> +
> +	/* Transfer accumulated runtime to the parent GEM context. */
> +	for_each_gem_engine(ce, engines, it) {
> +		unsigned int class = ce->engine->uabi_class;
>  
> +		GEM_BUG_ON(class >= ARRAY_SIZE(ctx->past_runtime));
> +		atomic64_add(ce->runtime.total, &ctx->past_runtime[class]);
> +	}
> +
> +	i915_gem_context_put(ctx);
>  	i915_sw_fence_fini(&engines->fence);
>  	free_engines(engines);
>  }
> @@ -274,7 +286,6 @@ engines_notify(struct i915_sw_fence *fence, enum i915_sw_fence_notify state)
>  			list_del(&engines->link);
>  			spin_unlock_irqrestore(&ctx->stale.lock, flags);
>  		}
> -		i915_gem_context_put(engines->ctx);
>  		break;
>  
>  	case FENCE_FREE:
> diff --git a/drivers/gpu/drm/i915/gem/i915_gem_context_types.h b/drivers/gpu/drm/i915/gem/i915_gem_context_types.h
> index 31a6a30f7ea8..e473984b52c8 100644
> --- a/drivers/gpu/drm/i915/gem/i915_gem_context_types.h
> +++ b/drivers/gpu/drm/i915/gem/i915_gem_context_types.h
> @@ -178,6 +178,11 @@ struct i915_gem_context {
>  		spinlock_t lock;
>  		struct list_head engines;
>  	} stale;
> +
> +	/**
> +	 * @past_runtime: Accumulation of freed intel_context pphwsp runtimes.

We are tracking runtime in per engine hw context, which pphwsp is just
part of (first page of it).

If this is also in par with the documentation, good enough.

Reviewed-by: Mika Kuoppala <mika.kuoppala at linux.intel.com>

> +	 */
> +	atomic64_t past_runtime[MAX_ENGINE_CLASS + 1];
>  };
>  
>  #endif /* __I915_GEM_CONTEXT_TYPES_H__ */
> -- 
> 2.25.1
>
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx


More information about the Intel-gfx mailing list