[Intel-gfx] [RFC PATCH 134/162] drm/i915/dg1: Measure swap in/out timing stats
Matthew Auld
matthew.auld at intel.com
Fri Nov 27 12:06:50 UTC 2020
From: Sudeep Dutt <sudeep.dutt at intel.com>
Signed-off-by: Sudeep Dutt <sudeep.dutt at intel.com>
---
drivers/gpu/drm/i915/gem/i915_gem_region.c | 16 ++++++++++++++--
drivers/gpu/drm/i915/i915_debugfs.c | 3 +++
drivers/gpu/drm/i915/i915_drv.h | 2 ++
3 files changed, 19 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/i915/gem/i915_gem_region.c b/drivers/gpu/drm/i915/gem/i915_gem_region.c
index ed108dbcb34e..4fab9f6b4bee 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_region.c
+++ b/drivers/gpu/drm/i915/gem/i915_gem_region.c
@@ -15,6 +15,7 @@ i915_gem_object_swapout_pages(struct drm_i915_gem_object *obj,
{
struct drm_i915_private *i915 = to_i915(obj->base.dev);
struct drm_i915_gem_object *dst, *src;
+ unsigned long start, diff, msec;
int err;
GEM_BUG_ON(obj->swapto);
@@ -24,6 +25,7 @@ i915_gem_object_swapout_pages(struct drm_i915_gem_object *obj,
GEM_BUG_ON(!i915->params.enable_eviction);
assert_object_held(obj);
+ start = jiffies;
/* create a shadow object on smem region */
dst = i915_gem_object_create_shmem(i915, obj->base.size);
@@ -64,8 +66,12 @@ i915_gem_object_swapout_pages(struct drm_i915_gem_object *obj,
else
i915_gem_object_put(dst);
- if (!err)
+ if (!err) {
+ diff = jiffies - start;
+ msec = diff * 1000 / HZ;
+ atomic_long_add(msec, &i915->time_swap_out_ms);
atomic_long_add(sizes, &i915->num_bytes_swapped_out);
+ }
return err;
}
@@ -76,6 +82,7 @@ i915_gem_object_swapin_pages(struct drm_i915_gem_object *obj,
{
struct drm_i915_private *i915 = to_i915(obj->base.dev);
struct drm_i915_gem_object *dst, *src;
+ unsigned long start, diff, msec;
int err;
GEM_BUG_ON(!obj->swapto);
@@ -85,6 +92,7 @@ i915_gem_object_swapin_pages(struct drm_i915_gem_object *obj,
GEM_BUG_ON(!i915->params.enable_eviction);
assert_object_held(obj);
+ start = jiffies;
src = obj->swapto;
@@ -121,8 +129,12 @@ i915_gem_object_swapin_pages(struct drm_i915_gem_object *obj,
i915_gem_object_put(src);
}
- if (!err)
+ if (!err) {
+ diff = jiffies - start;
+ msec = diff * 1000 / HZ;
+ atomic_long_add(msec, &i915->time_swap_in_ms);
atomic_long_add(sizes, &i915->num_bytes_swapped_in);
+ }
return err;
}
diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c
index 1b7e9b6ab660..2bf51dd9de7c 100644
--- a/drivers/gpu/drm/i915/i915_debugfs.c
+++ b/drivers/gpu/drm/i915/i915_debugfs.c
@@ -375,6 +375,9 @@ static int i915_gem_object_info(struct seq_file *m, void *data)
seq_printf(m, "num_bytes_swapped_out %ld num_bytes_swapped_in %ld\n",
atomic_long_read(&i915->num_bytes_swapped_out),
atomic_long_read(&i915->num_bytes_swapped_in));
+ seq_printf(m, "time_swap_out_msec %ld time_swap_in_msec %ld\n",
+ atomic_long_read(&i915->time_swap_out_ms),
+ atomic_long_read(&i915->time_swap_in_ms));
seq_putc(m, '\n');
print_context_stats(m, i915);
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 7b1e95d494e6..10823abab224 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -1217,6 +1217,8 @@ struct drm_i915_private {
atomic_long_t num_bytes_swapped_out;
atomic_long_t num_bytes_swapped_in;
+ atomic_long_t time_swap_out_ms;
+ atomic_long_t time_swap_in_ms;
};
static inline struct drm_i915_private *to_i915(const struct drm_device *dev)
--
2.26.2
More information about the Intel-gfx
mailing list