[Intel-gfx] [RFC 00/17] Per-context and per-client engine busyness

Tvrtko Ursulin tursulin at ursulin.net
Wed Oct 25 15:36:15 UTC 2017


From: Tvrtko Ursulin <tvrtko.ursulin at intel.com>

Lightly tested (apart from patch 13) series to start the discussion early.

Please skip patches 1-9, and probably 10-11 as well, those ones are the current
PMU effort which is yet unmerged but needed as a basis for patches 12-17.

Customer ask is to allow clients to query how much GPU engine time they are
using per context.

In patch 12 I add this, and then patch 13 I expose it via the context get param.
(It feels like a slight misuse of get param though.)

Patches 14-17 are not a customer ask as far as I know, but something I thought
would be pretty cool. Basically bringing the ability to write a CPU top-like
utility for GPU tasks.

I've prototyped a quick demo of intel-client-top which produces output like:

    neverball[  6011]:  rcs0:  41.01%  bcs0:   0.00%  vcs0:   0.00%  vecs0:   0.00%
         Xorg[  5664]:  rcs0:  31.16%  bcs0:   0.00%  vcs0:   0.00%  vecs0:   0.00%
        xfwm4[  5727]:  rcs0:   0.00%  bcs0:   0.00%  vcs0:   0.00%  vecs0:   0.00%

As I say in the commit we could also extend this to show the overall engine
busyness (via PMU), and also average load as queue-depth (also PMU), in the top
header.

Another potential use for the per-client infrastructure is tieing it up with
perf PMU. At the moment our perf PMU are global counters only. With the per-
client infrastructure it should be possible to make it work in the task mode as
well and so enable GPU busyness profiling of single tasks.

But this last part is not in this series, at least not yet.

Tvrtko Ursulin (17):
  drm/i915: Extract intel_get_cagf
  drm/i915/pmu: Expose a PMU interface for perf queries
  drm/i915/pmu: Suspend sampling when GPU is idle
  drm/i915: Wrap context schedule notification
  drm/i915: Engine busy time tracking
  drm/i915/pmu: Wire up engine busy stats to PMU
  drm/i915/pmu: Add interrupt count metric
  drm/i915: Convert intel_rc6_residency_us to ns
  drm/i915/pmu: Add RC6 residency metrics
  drm/i915: Keep a count of requests waiting for a slot on GPU
  drm/i915/pmu: Add queued counter
  drm/i915: Track per-context engine busyness
  drm/i915: Allow clients to query own per-engine busyness
  drm/i915: Expose list of clients in sysfs
  drm/i915: Update client name on context create
  drm/i915: Expose per-engine client busyness
  drm/i915: Add sysfs toggle to enable per-client engine stats

 drivers/gpu/drm/i915/Makefile           |   1 +
 drivers/gpu/drm/i915/i915_debugfs.c     |   9 +-
 drivers/gpu/drm/i915/i915_drv.c         |   3 +
 drivers/gpu/drm/i915/i915_drv.h         |  39 +-
 drivers/gpu/drm/i915/i915_gem.c         | 178 ++++++-
 drivers/gpu/drm/i915/i915_gem_context.c |  49 +-
 drivers/gpu/drm/i915/i915_gem_context.h |   5 +
 drivers/gpu/drm/i915/i915_gem_request.c |   6 +
 drivers/gpu/drm/i915/i915_pmu.c         | 904 ++++++++++++++++++++++++++++++++
 drivers/gpu/drm/i915/i915_pmu.h         | 112 ++++
 drivers/gpu/drm/i915/i915_reg.h         |   3 +
 drivers/gpu/drm/i915/i915_sysfs.c       |  99 +++-
 drivers/gpu/drm/i915/intel_engine_cs.c  | 128 ++++-
 drivers/gpu/drm/i915/intel_lrc.c        |  25 +-
 drivers/gpu/drm/i915/intel_pm.c         |  41 +-
 drivers/gpu/drm/i915/intel_ringbuffer.h | 167 ++++++
 include/uapi/drm/i915_drm.h             |  69 ++-
 17 files changed, 1788 insertions(+), 50 deletions(-)
 create mode 100644 drivers/gpu/drm/i915/i915_pmu.c
 create mode 100644 drivers/gpu/drm/i915/i915_pmu.h

-- 
2.9.5



More information about the Intel-gfx mailing list