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