On Thu, Apr 07, 2022 at 04:16:27PM +0100, Tvrtko Ursulin wrote: > From: Tvrtko Ursulin <tvrtko.ursulin@xxxxxxxxx> > > Inherit submitter nice at point of request submission to account for long > running processes getting either externally or self re-niced. > > This accounts for the current processing landscape where computational > pipelines are composed of CPU and GPU parts working in tandem. > > Nice value will only apply to requests which originate from user contexts > and have default context priority. This is to avoid disturbing any > application made choices of low and high (batch processing and latency > sensitive compositing). In this case nice value adjusts the effective > priority in the narrow band of -19 to +20 around > I915_CONTEXT_DEFAULT_PRIORITY. > > This means that userspace using the context priority uapi directly has a > wider range of possible adjustments (in practice that only applies to > execlists platforms - with GuC there are only three priority buckets), but > in all cases nice adjustment has the expected effect: positive nice > lowering the scheduling priority and negative nice raising it. > > Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@xxxxxxxxx> I don't think adding any more fancy features to i915-scheduler makes sense, at least not before we've cut over to drm/sched. -Daniel > --- > drivers/gpu/drm/i915/i915_request.c | 11 ++++++++++- > 1 file changed, 10 insertions(+), 1 deletion(-) > > diff --git a/drivers/gpu/drm/i915/i915_request.c b/drivers/gpu/drm/i915/i915_request.c > index 582770360ad1..e5cfa073d8f0 100644 > --- a/drivers/gpu/drm/i915/i915_request.c > +++ b/drivers/gpu/drm/i915/i915_request.c > @@ -1811,8 +1811,17 @@ void i915_request_add(struct i915_request *rq) > /* XXX placeholder for selftests */ > rcu_read_lock(); > ctx = rcu_dereference(rq->context->gem_context); > - if (ctx) > + if (ctx) { > attr = ctx->sched; > + /* > + * Inherit process nice when scheduling user contexts but only > + * if context has the default priority to avoid touching > + * contexts where GEM uapi has been used to explicitly lower > + * or elevate it. > + */ > + if (attr.priority == I915_CONTEXT_DEFAULT_PRIORITY) > + attr.priority = -task_nice(current); > + } > rcu_read_unlock(); > > __i915_request_queue(rq, &attr); > -- > 2.32.0 > -- Daniel Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch