Re: [PATCH 4/9] drm/i915: Track runtime spent in unreachable intel_contexts

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Tvrtko Ursulin <tvrtko.ursulin@xxxxxxxxxxxxxxx> writes:

> From: Tvrtko Ursulin <tvrtko.ursulin@xxxxxxxxx>
>
> 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@xxxxxxxxx>
> ---
>  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@xxxxxxxxxxxxxxx>

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



[Index of Archives]     [AMD Graphics]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux