All of lore.kernel.org
 help / color / mirror / Atom feed
* [Intel-gfx] [PATCH 0/5] Per client engine busyness
@ 2019-12-16 12:06 Tvrtko Ursulin
  2019-12-16 12:07 ` [Intel-gfx] [PATCH 1/5] drm/i915: Track per-context " Tvrtko Ursulin
                   ` (7 more replies)
  0 siblings, 8 replies; 26+ messages in thread
From: Tvrtko Ursulin @ 2019-12-16 12:06 UTC (permalink / raw)
  To: Intel-gfx

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

Another re-spin of the per-client engine busyness series.

Review feedback from last round has been addressed* and the tracking simplified.

(*Apart from re-using the ctx->idr_lock for the global toggle, I kept using
struct mutext for that.)

Internally we track time spent on engines for each struct intel_context. This
can serve as a building block for several features from the want list:
smarter scheduler decisions, getrusage(2)-like per-GEM-context functionality
wanted by some customers, cgroups controller, dynamic SSEU tuning,...

Externally, in sysfs, we expose time spent on GPU per client and per engine
class.

There is also a global toggle to enable this extra tracking although it is open
whether it is warranted and we should not just always track.

Sysfs interface enables us to implement a "top-like" tool for GPU tasks. Or with
a "screenshot":
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
intel-gpu-top -  906/ 955 MHz;    0% RC6;  5.30 Watts;      933 irqs/s

      IMC reads:     4414 MiB/s
     IMC writes:     3805 MiB/s

          ENGINE      BUSY                                      MI_SEMA MI_WAIT
     Render/3D/0   93.46% |████████████████████████████████▋  |      0%      0%
       Blitter/0    0.00% |                                   |      0%      0%
         Video/0    0.00% |                                   |      0%      0%
  VideoEnhance/0    0.00% |                                   |      0%      0%

  PID            NAME  Render/3D      Blitter        Video      VideoEnhance
 2733       neverball |██████▌     ||            ||            ||            |
 2047            Xorg |███▊        ||            ||            ||            |
 2737        glxgears |█▍          ||            ||            ||            |
 2128           xfwm4 |            ||            ||            ||            |
 2047            Xorg |            ||            ||            ||            |
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Implementation wise we add a a bunch of files in sysfs like:

	# cd /sys/class/drm/card0/clients/
	# tree
	.
	├── 7
	│   ├── busy
	│   │   ├── 0
	│   │   ├── 1
	│   │   ├── 2
	│   │   └── 3
	│   ├── name
	│   └── pid
	├── 8
	│   ├── busy
	│   │   ├── 0
	│   │   ├── 1
	│   │   ├── 2
	│   │   └── 3
	│   ├── name
	│   └── pid
	├── 9
	│   ├── busy
	│   │   ├── 0
	│   │   ├── 1
	│   │   ├── 2
	│   │   └── 3
	│   ├── name
	│   └── pid
	└── enable_stats

Files in 'busy' directories are numbered using the engine class ABI values and
they contain accumulated nanoseconds each client spent on engines of a
respective class.

I will post the corresponding patch to intel_gpu_top for reference as well.

Tvrtko Ursulin (5):
  drm/i915: Track per-context 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/gem/i915_gem_context.c   |  24 +-
 drivers/gpu/drm/i915/gt/intel_context.c       |  20 ++
 drivers/gpu/drm/i915/gt/intel_context.h       |  11 +
 drivers/gpu/drm/i915/gt/intel_context_types.h |   9 +
 drivers/gpu/drm/i915/gt/intel_engine_cs.c     |  16 +-
 drivers/gpu/drm/i915/gt/intel_lrc.c           |  47 +++-
 drivers/gpu/drm/i915/i915_drv.h               |  41 +++
 drivers/gpu/drm/i915/i915_gem.c               | 234 +++++++++++++++++-
 drivers/gpu/drm/i915/i915_sysfs.c             |  84 +++++++
 9 files changed, 465 insertions(+), 21 deletions(-)

-- 
2.20.1

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 26+ messages in thread

end of thread, other threads:[~2020-01-30 21:42 UTC | newest]

Thread overview: 26+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-12-16 12:06 [Intel-gfx] [PATCH 0/5] Per client engine busyness Tvrtko Ursulin
2019-12-16 12:07 ` [Intel-gfx] [PATCH 1/5] drm/i915: Track per-context " Tvrtko Ursulin
2019-12-16 12:40   ` Chris Wilson
2019-12-16 13:09     ` Tvrtko Ursulin
2020-01-30 18:05       ` Tvrtko Ursulin
2020-01-30 21:42         ` Chris Wilson
2019-12-16 12:07 ` [Intel-gfx] [PATCH 2/5] drm/i915: Expose list of clients in sysfs Tvrtko Ursulin
2019-12-16 12:51   ` Chris Wilson
2019-12-16 18:34     ` Tvrtko Ursulin
2019-12-16 12:53   ` Chris Wilson
2019-12-16 13:13     ` Tvrtko Ursulin
2019-12-17 17:21     ` Tvrtko Ursulin
2019-12-17 17:26       ` Chris Wilson
2019-12-16 12:55   ` Chris Wilson
2019-12-16 13:16     ` Tvrtko Ursulin
2019-12-16 13:17   ` Chris Wilson
2019-12-16 13:28     ` Tvrtko Ursulin
2019-12-16 13:41       ` Chris Wilson
2019-12-16 12:07 ` [Intel-gfx] [PATCH 3/5] drm/i915: Update client name on context create Tvrtko Ursulin
2019-12-16 12:57   ` Chris Wilson
2019-12-16 12:07 ` [Intel-gfx] [PATCH 4/5] drm/i915: Expose per-engine client busyness Tvrtko Ursulin
2019-12-16 12:07 ` [Intel-gfx] [PATCH 5/5] drm/i915: Add sysfs toggle to enable per-client engine stats Tvrtko Ursulin
2019-12-16 13:09 ` [Intel-gfx] [PATCH 0/5] Per client engine busyness Chris Wilson
2019-12-16 13:20   ` Tvrtko Ursulin
2019-12-16 17:45 ` [Intel-gfx] ✗ Fi.CI.CHECKPATCH: warning for " Patchwork
2019-12-16 17:58 ` [Intel-gfx] ✗ Fi.CI.BAT: failure " Patchwork

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.