drm/i915/pmu: Skip busyness sampling when and where not needed
authorTvrtko Ursulin <tvrtko.ursulin@intel.com>
Wed, 11 Sep 2019 16:07:30 +0000 (17:07 +0100)
committerTvrtko Ursulin <tvrtko.ursulin@intel.com>
Thu, 12 Sep 2019 12:33:05 +0000 (13:33 +0100)
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>
Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk>
Link: https://patchwork.freedesktop.org/patch/msgid/20190911160730.22687-1-tvrtko.ursulin@linux.intel.com
drivers/gpu/drm/i915/i915_pmu.c

index 8e251e719390fc7209931108373ce421a6d4bcc6..623ad32303a179757d1ef61aeee49a6328adef60 100644 (file)
@@ -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