[Intel-gfx] [PATCH 30/57] drm/i915: Move timeslicing flag to scheduler

Tvrtko Ursulin tvrtko.ursulin at linux.intel.com
Fri Feb 5 09:48:54 UTC 2021


On 04/02/2021 16:11, Chris Wilson wrote:
> Quoting Tvrtko Ursulin (2021-02-04 15:18:31)
>>
>> On 01/02/2021 08:56, Chris Wilson wrote:
>>> Whether a scheduler chooses to implement timeslicing is up to it, and
>>> not an underlying property of the HW engine. The scheduler does depend
>>> on the HW supporting preemption.
>>
>> Therefore, continuing on the comment I made in the previous patch, if we
>> had a helper with which engine would request scheduling (setting the
>> tasklet), if it passed in a pointer to itself, scheduler would then be
>> able to inspect if the engine supports preemption and so set its own
>> internal flag. Makes sense? It would require something like:
> 
> Actually not keen on pushing the inspection into the core scheduler and
> would rather have the backend turn it on for itself. Because it's not
> just about the engine supporting preemption, it's about whether or not
> the backend wants to bother implement timeslicing itself.
> 
> If we skip to the end, it looks like this for execlists:
> 
>          i915_sched_init(&el->sched, i915->drm.dev,
>                          engine->name, engine->mask,
>                          &execlists_ops, engine);
> 
>          if (IS_ACTIVE(CONFIG_DRM_I915_TIMESLICE_DURATION) &&
>              intel_engine_has_preemption(engine))
>                  __set_bit(I915_SCHED_TIMESLICE_BIT, &el->sched.flags);
> 
>          if (intel_engine_has_preemption(engine)) {
>                  __set_bit(I915_SCHED_BUSYWAIT_BIT, &el->sched.flags);
>                  __set_bit(I915_SCHED_PREEMPT_RESET_BIT, &el->sched.flags);
>          }
> 
> with the virtual scheduler:
> 
>          ve->base.sched =
>                  i915_sched_create(ve->base.i915->drm.dev,
>                                    ve->base.name,
>                                    ve->base.mask,
>                                    &virtual_ops, ve);
>          if (!ve->base.sched) {
>                  err = -ENOMEM;
>                  goto err_put;
>          }
> 
>          ve->base.sched->flags |= sched; /* override submission method */
> 
> I think the virtual scheduler suggests that we can't rely on the
> scheduler core to dtrt by itself. And if you are still awake by the time
> we get to this point, how to avoid ve->base.sched->flags |= sched are
> welcome.

Not at the moment. Since it is details lets finish first and then see is 
my thinking.

Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin at intel.com>

Regards,

Tvrtko


More information about the Intel-gfx mailing list