[Intel-gfx] [PATCH 5/9] drm/i915: Track runtime spent in closed GEM contexts
Tvrtko Ursulin
tvrtko.ursulin at linux.intel.com
Wed Mar 18 11:01:42 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 5edf79ed6247..912375fb8a3b 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_context.c
+++ b/drivers/gpu/drm/i915/gem/i915_gem_context.c
@@ -355,8 +355,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 11b48383881d..29b116606596 100644
--- a/drivers/gpu/drm/i915/i915_drm_client.h
+++ b/drivers/gpu/drm/i915/i915_drm_client.h
@@ -15,6 +15,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;
@@ -41,6 +43,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