drm/i915/pmu: Skip busyness sampling when and where not needed

Submitted by Tvrtko Ursulin on Sept. 11, 2019, 4:07 p.m.

Details

Message ID 20190911160730.22687-1-tvrtko.ursulin@linux.intel.com
State Accepted
Commit 54fc577d90d01a28dbfccd277aa3de4d4abaf1ff
Headers show
Series "drm/i915/pmu: Skip busyness sampling when and where not needed" ( rev: 1 ) in Intel GFX

Not browsing as part of any series.

Commit Message

Tvrtko Ursulin Sept. 11, 2019, 4:07 p.m.
From: Tvrtko Ursulin <tvrtko.ursulin@intel.com>

Since d0aa694b9239 ("drm/i915/pmu: Always sample an active ringbuffer")
the cost of sampling the engine state on execlists platforms became a
little bit higher when both engine busyness and one of the wait states are
being monitored. (Previously the busyness sampling on legacy platforms was
done via seqno comparison so there was no cost of mmio read.)

We can avoid that by skipping busyness sampling when engine supports
software busy stats and so avoid the cost of potential mmio read and
sample accumulation.

Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Cc: Chris Wilson <chris@chris-wilson.co.uk>
---
 drivers/gpu/drm/i915/i915_pmu.c | 4 ++++
 1 file changed, 4 insertions(+)

Patch hide | download patch | download mbox

diff --git a/drivers/gpu/drm/i915/i915_pmu.c b/drivers/gpu/drm/i915/i915_pmu.c
index 8e251e719390..623ad32303a1 100644
--- a/drivers/gpu/drm/i915/i915_pmu.c
+++ b/drivers/gpu/drm/i915/i915_pmu.c
@@ -194,6 +194,10 @@  engines_sample(struct intel_gt *gt, unsigned int period_ns)
 		if (val & RING_WAIT_SEMAPHORE)
 			add_sample(&pmu->sample[I915_SAMPLE_SEMA], period_ns);
 
+		/* No need to sample when busy stats are supported. */
+		if (intel_engine_supports_stats(engine))
+			goto skip;
+
 		/*
 		 * While waiting on a semaphore or event, MI_MODE reports the
 		 * ring as idle. However, previously using the seqno, and with

Comments

Quoting Tvrtko Ursulin (2019-09-11 17:07:30)
> From: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
> 
> Since d0aa694b9239 ("drm/i915/pmu: Always sample an active ringbuffer")
> the cost of sampling the engine state on execlists platforms became a
> little bit higher when both engine busyness and one of the wait states are
> being monitored. (Previously the busyness sampling on legacy platforms was
> done via seqno comparison so there was no cost of mmio read.)
> 
> We can avoid that by skipping busyness sampling when engine supports
> software busy stats and so avoid the cost of potential mmio read and
> sample accumulation.
> 
> Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
> Cc: Chris Wilson <chris@chris-wilson.co.uk>
> ---
>  drivers/gpu/drm/i915/i915_pmu.c | 4 ++++
>  1 file changed, 4 insertions(+)
> 
> diff --git a/drivers/gpu/drm/i915/i915_pmu.c b/drivers/gpu/drm/i915/i915_pmu.c
> index 8e251e719390..623ad32303a1 100644
> --- a/drivers/gpu/drm/i915/i915_pmu.c
> +++ b/drivers/gpu/drm/i915/i915_pmu.c
> @@ -194,6 +194,10 @@ engines_sample(struct intel_gt *gt, unsigned int period_ns)
>                 if (val & RING_WAIT_SEMAPHORE)
>                         add_sample(&pmu->sample[I915_SAMPLE_SEMA], period_ns);
>  
> +               /* No need to sample when busy stats are supported. */
> +               if (intel_engine_supports_stats(engine))
> +                       goto skip;
> +

Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk>

I was worried we were double accounting, but later on we
have

if (intel_engine_supports_stats())
	val = ktime_to_ns(intel_engine_get_busy_time());
else
	val = engine->pmu.sample[sample].cur;

so indeed, this is just wasted effort.
-Chris
On 11/09/2019 17:50, Patchwork wrote:
> == Series Details ==
> 
> Series: drm/i915/pmu: Skip busyness sampling when and where not needed
> URL   : https://patchwork.freedesktop.org/series/66541/
> State : success
> 
> == Summary ==
> 
> CI Bug Log - changes from CI_DRM_6872 -> Patchwork_14363
> ====================================================
> 
> Summary
> -------
> 
>    **SUCCESS**
> 
>    No regressions found.
> 
>    External URL: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14363/
> 
> Known issues
> ------------
> 
>    Here are the changes found in Patchwork_14363 that come from known issues:
> 
> ### IGT changes ###
> 
> #### Issues hit ####
> 
>    * igt@i915_module_load@reload:
>      - fi-icl-u3:          [PASS][1] -> [DMESG-WARN][2] ([fdo#107724] / [fdo#111214])
>     [1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6872/fi-icl-u3/igt@i915_module_load@reload.html
>     [2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14363/fi-icl-u3/igt@i915_module_load@reload.html
> 
>    * igt@i915_selftest@live_gem_contexts:
>      - fi-cfl-8700k:       [PASS][3] -> [INCOMPLETE][4] ([fdo#111514])
>     [3]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6872/fi-cfl-8700k/igt@i915_selftest@live_gem_contexts.html
>     [4]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14363/fi-cfl-8700k/igt@i915_selftest@live_gem_contexts.html
> 
>    * igt@kms_addfb_basic@invalid-set-prop-any:
>      - fi-icl-u3:          [PASS][5] -> [DMESG-WARN][6] ([fdo#107724])
>     [5]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6872/fi-icl-u3/igt@kms_addfb_basic@invalid-set-prop-any.html
>     [6]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14363/fi-icl-u3/igt@kms_addfb_basic@invalid-set-prop-any.html
> 
>    
> #### Possible fixes ####
> 
>    * igt@gem_mmap_gtt@basic-write-gtt:
>      - fi-icl-u3:          [DMESG-WARN][7] ([fdo#107724]) -> [PASS][8]
>     [7]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6872/fi-icl-u3/igt@gem_mmap_gtt@basic-write-gtt.html
>     [8]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14363/fi-icl-u3/igt@gem_mmap_gtt@basic-write-gtt.html
> 
>    * igt@i915_selftest@live_hangcheck:
>      - fi-icl-u3:          [INCOMPLETE][9] ([fdo#107713] / [fdo#108569]) -> [PASS][10]
>     [9]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6872/fi-icl-u3/igt@i915_selftest@live_hangcheck.html
>     [10]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14363/fi-icl-u3/igt@i915_selftest@live_hangcheck.html
> 
>    * igt@kms_chamelium@hdmi-hpd-fast:
>      - fi-kbl-7500u:       [FAIL][11] ([fdo#111407]) -> [PASS][12]
>     [11]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6872/fi-kbl-7500u/igt@kms_chamelium@hdmi-hpd-fast.html
>     [12]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14363/fi-kbl-7500u/igt@kms_chamelium@hdmi-hpd-fast.html
> 
>    
>    {name}: This element is suppressed. This means it is ignored when computing
>            the status of the difference (SUCCESS, WARNING, or FAILURE).
> 
>    [fdo#103167]: https://bugs.freedesktop.org/show_bug.cgi?id=103167
>    [fdo#107713]: https://bugs.freedesktop.org/show_bug.cgi?id=107713
>    [fdo#107724]: https://bugs.freedesktop.org/show_bug.cgi?id=107724
>    [fdo#108569]: https://bugs.freedesktop.org/show_bug.cgi?id=108569
>    [fdo#111214]: https://bugs.freedesktop.org/show_bug.cgi?id=111214
>    [fdo#111407]: https://bugs.freedesktop.org/show_bug.cgi?id=111407
>    [fdo#111514]: https://bugs.freedesktop.org/show_bug.cgi?id=111514
> 
> 
> Participating hosts (54 -> 47)
> ------------------------------
> 
>    Missing    (7): fi-ilk-m540 fi-hsw-4200u fi-byt-squawks fi-bsw-cyan fi-icl-y fi-byt-clapper fi-bdw-samus
> 
> 
> Build changes
> -------------
> 
>    * CI: CI-20190529 -> None
>    * Linux: CI_DRM_6872 -> Patchwork_14363
> 
>    CI-20190529: 20190529
>    CI_DRM_6872: b27acd37b7dedf49557d6e41a3ee046c3f5d99ba @ git://anongit.freedesktop.org/gfx-ci/linux
>    IGT_5178: efb4539494d94f03374874d3b61bd04ef3802aaa @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools
>    Patchwork_14363: 48733870bba853158fe3f7c529866078838f6198 @ git://anongit.freedesktop.org/gfx-ci/linux
> 
> 
> == Linux commits ==
> 
> 48733870bba8 drm/i915/pmu: Skip busyness sampling when and where not needed

Pushed, thanks for the review!

Regards,

Tvrtko

> 
> == Logs ==
> 
> For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_14363/
>