[Intel-gfx] [RFC 00/38] Preemption support for GPU scheduler

John.C.Harrison at Intel.com John.C.Harrison at Intel.com
Fri Dec 11 06:50:58 PST 2015


From: John Harrison <John.C.Harrison at Intel.com>

Added pre-emption support to the i915 GPU scheduler.

Note that this patch series was written by David Gordon. I have simply
ported it onto a more recent set of scheduler patches and am uploading
it as part of that work so that everything can be viewed at once. Also
because David is on extended vacation at the moment. Not that the
series is being sent as an RFC as there are still some things to be
tidied up. Most notably the commit messages are missing in a few
places. I am leaving those to be filled in by David when he returns.

Also, the series includes a few general fix up and improvement patches
that are not directly related to pre-emption. E.g. for improving the
error capture state. However, the pre-emption code is built upon them
so right now it is much simpler to just send the whole lot out as a
single series. It can be broken up into separate patch sets if/when
people decide it is all good stuff to be doing.

Re the pre-emption itself. It is functional and working but with the
caveat that it requires the GuC. Hence it is only operation on SKL or
later hardware. If the GuC is not available then the pre-emption
support is simply disabled in the scheduler.

v2: Updated for changes to scheduler - use locally cached request
pointer.

Re-worked the 'pre-emption in progress' logic inside the notify code
to simplify it.

Implemented support for mid-batch pre-emption. This must be treated
differently to bettween-batch pre-emption.

Fixed a couple of trace point issues.

[Patches against drm-intel-nightly tree fetched 17/11/2015 with struct fence
conversion and GPU scheduler patches applied]

Dave Gordon (37):
  drm/i915: update ring space correctly
  drm/i915: recalculate ring space after reset
  drm/i915: hangcheck=idle should wake_up_all every time, not just once
  drm/i915/error: capture execlist state on error
  drm/i915/error: capture ringbuffer pointed to by START
  drm/i915/error: report ctx id & desc for each request in the queue
  drm/i915/error: improve CSB reporting
  drm/i915/error: report size in pages for each object dumped
  drm/i915/error: track, capture & print ringbuffer submission activity
  drm/i915/guc: Tidy up GuC proc/ctx descriptor setup
  drm/i915/guc: Add a second client, to be used for preemption
  drm/i915/guc: implement submission via REQUEST_PREEMPTION action
  drm/i915/guc: Improve action error reporting, add preemption debug
  drm/i915/guc: Expose GuC-maintained statistics
  drm/i915: add i915_wait_request() call after i915_add_request_no_flush()
  drm/i915/guc: Expose (intel)_lr_context_size()
  drm/i915/guc: Add support for GuC ADS (Addition Data Structure)
  drm/i915/guc: Fill in (part of?) the ADS whitelist
  drm/i915/error: capture errored context based on request context-id
  drm/i915/error: enhanced error capture of requests
  drm/i915/error: add GuC state error capture & decode
  drm/i915: track relative-constants-mode per-context not per-device
  drm/i915: set request 'head' on allocation not in add_request()
  drm/i915/sched: set request 'head' on at start of ring submission
  drm/i915/sched: include scheduler state in error capture
  drm/i915/preempt: preemption-related definitions and statistics
  drm/i915/preempt: scheduler logic for queueing preemptive requests
  drm/i915/preempt: scheduler logic for selecting preemptive requests
  drm/i915/preempt: scheduler logic for preventing recursive preemption
  drm/i915/preempt: don't allow nonbatch ctx init when the scheduler is
    busy
  drm/i915/preempt: scheduler logic for landing preemptive requests
  drm/i915/preempt: add hook to catch 'unexpected' ring submissions
  drm/i915/preempt: Refactor intel_lr_context_reset()
  drm/i915/preempt: scheduler logic for postprocessing preemptive
    requests
  drm/i915/preempt: Implement mid-batch preemption support
  drm/i915/preempt: update (LRC) ringbuffer-filling code to create
    preemptive requests
  drm/i915/preempt: update scheduler parameters to enable preemption

John Harrison (1):
  drm/i915: Added preemption info to various trace points

 drivers/gpu/drm/i915/i915_debugfs.c        |  50 ++-
 drivers/gpu/drm/i915/i915_drv.h            |  34 +-
 drivers/gpu/drm/i915/i915_gem.c            | 122 +++++++-
 drivers/gpu/drm/i915/i915_gem_context.c    |   5 +-
 drivers/gpu/drm/i915/i915_gem_execbuffer.c |   9 +-
 drivers/gpu/drm/i915/i915_gpu_error.c      | 307 ++++++++++++++++--
 drivers/gpu/drm/i915/i915_guc_reg.h        |   1 +
 drivers/gpu/drm/i915/i915_guc_submission.c | 243 +++++++++++---
 drivers/gpu/drm/i915/i915_irq.c            |  23 +-
 drivers/gpu/drm/i915/i915_scheduler.c      | 487 ++++++++++++++++++++++++++---
 drivers/gpu/drm/i915/i915_scheduler.h      |  49 ++-
 drivers/gpu/drm/i915/i915_trace.h          |  30 +-
 drivers/gpu/drm/i915/intel_guc.h           |  31 +-
 drivers/gpu/drm/i915/intel_guc_fwif.h      |  93 +++++-
 drivers/gpu/drm/i915/intel_guc_loader.c    |  14 +-
 drivers/gpu/drm/i915/intel_lrc.c           | 333 ++++++++++++++++----
 drivers/gpu/drm/i915/intel_lrc.h           |   8 +-
 drivers/gpu/drm/i915/intel_ringbuffer.c    |   2 +-
 drivers/gpu/drm/i915/intel_ringbuffer.h    |  15 +
 19 files changed, 1595 insertions(+), 261 deletions(-)

-- 
1.9.1



More information about the Intel-gfx mailing list