[Intel-gfx] [RFC 06/10] drm/i915: Track runtime spent in closed GEM contexts
Tvrtko Ursulin
tvrtko.ursulin at linux.intel.com
Wed Mar 11 18:26:14 UTC 2020
From: Tvrtko Ursulin <tvrtko.ursulin at intel.com>
As GEM contexts are closed we want to have the DRM client 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 | 12 +++++++++++-
drivers/gpu/drm/i915/i915_drm_client.h | 7 +++++++
2 files changed, 18 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 c521155a6474..36dc577a23c4 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_context.c
+++ b/drivers/gpu/drm/i915/gem/i915_gem_context.c
@@ -316,8 +316,18 @@ static void i915_gem_context_free(struct i915_gem_context *ctx)
GEM_BUG_ON(!i915_gem_context_is_closed(ctx));
- if (client)
+ if (client) {
+ unsigned int i;
+
+ /* Transfer accumulated runtime to the parent drm client. */
+ BUILD_BUG_ON(ARRAY_SIZE(client->past_runtime) !=
+ ARRAY_SIZE(ctx->past_runtime));
+ for (i = 0; i < ARRAY_SIZE(client->past_runtime); i++)
+ atomic64_add(atomic64_read(&ctx->past_runtime[i]),
+ &client->past_runtime[i]);
+
i915_drm_client_put(client);
+ }
spin_lock(&ctx->i915->gem.contexts.lock);
list_del(&ctx->link);
diff --git a/drivers/gpu/drm/i915/i915_drm_client.h b/drivers/gpu/drm/i915/i915_drm_client.h
index b56a271737ff..72e66027e0f1 100644
--- a/drivers/gpu/drm/i915/i915_drm_client.h
+++ b/drivers/gpu/drm/i915/i915_drm_client.h
@@ -16,6 +16,8 @@
#include <linux/sched.h>
#include <linux/xarray.h>
+#include "gt/intel_engine_types.h"
+
struct i915_drm_clients {
struct xarray xarray;
u32 next_id;
@@ -42,6 +44,11 @@ struct i915_drm_client {
struct device_attribute pid;
struct device_attribute name;
} attr;
+
+ /**
+ * @past_runtime: Accumulation of pphwsp runtimes from closed contexts.
+ */
+ atomic64_t past_runtime[MAX_ENGINE_CLASS + 1];
};
void i915_drm_clients_init(struct i915_drm_clients *clients);
--
2.20.1
More information about the Intel-gfx
mailing list