diff mbox series

[RFC,134/162] drm/i915/dg1: Measure swap in/out timing stats

Message ID 20201127120718.454037-135-matthew.auld@intel.com (mailing list archive)
State New, archived
Headers show
Series DG1 + LMEM enabling | expand

Commit Message

Matthew Auld Nov. 27, 2020, 12:06 p.m. UTC
From: Sudeep Dutt <sudeep.dutt@intel.com>

Signed-off-by: Sudeep Dutt <sudeep.dutt@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(-)

Comments

Chris Wilson Nov. 27, 2020, 2:11 p.m. UTC | #1
Quoting Matthew Auld (2020-11-27 12:06:50)
> From: Sudeep Dutt <sudeep.dutt@intel.com>
> 
> Signed-off-by: Sudeep Dutt <sudeep.dutt@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);
> +       }

This can be done using a kprobe, and with prettier statistics as builtin
functionality.
-Chris
diff mbox series

Patch

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)