Re: [PATCH v5 6/7] sched/deadline: Deferrable dl server

From: Daniel Bristot de Oliveira
Date: Wed Nov 08 2023 - 09:52:29 EST


On 11/8/23 13:50, Peter Zijlstra wrote:
>> ---
>> diff --git a/kernel/sched/deadline.c b/kernel/sched/deadline.c
>> index 58b542bf2893..1453a2cd0680 100644
>> --- a/kernel/sched/deadline.c
>> +++ b/kernel/sched/deadline.c
>> @@ -829,10 +829,12 @@ static inline void setup_new_dl_entity(struct sched_dl_entity *dl_se)
>> */
>> static void replenish_dl_entity(struct sched_dl_entity *dl_se)>> {

assuming starting rt, 3/10 params:

it arrives here with:

runtime = 3
laxity = 10 - 7 = 3
u = 1

>> + struct sched_dl_entity *pi_se = pi_of(dl_se);
>> struct dl_rq *dl_rq = dl_rq_of_se(dl_se);
>> struct rq *rq = rq_of_dl_rq(dl_rq);
>> + u64 dl_runtime = pi_se->dl_runtime;
>>
>> - WARN_ON_ONCE(pi_of(dl_se)->dl_runtime <= 0);
>> + WARN_ON_ONCE(dl_runtime <= 0);
>>
>> /*
>> * This could be the case for a !-dl task that is boosted.
>> @@ -851,10 +853,13 @@ static void replenish_dl_entity(struct sched_dl_entity *dl_se)
>> * arbitrary large.
>> */

skip the while because runtime = 3 > 0

>> while (dl_se->runtime <= 0) {
>> - dl_se->deadline += pi_of(dl_se)->dl_period;
>> - dl_se->runtime += pi_of(dl_se)->dl_runtime;
>> + dl_se->deadline += pi_se->dl_period;
>> + dl_se->runtime += dl_runtime;
>> }

runtime is already = dl_runtime...

>> + if (dl_se->zerolax && dl_se->runtime > dl_runtime)
>> + dl_se->runtime = dl_runtime;
>> +

There is a way to cap it: it is doing the revised wakeup rule...
the runtime will become 1. That is not what we want...

and we would have to keep arming the server... while shifting the
(internal) period puts the scheduler in the regular case :-)

Externally, e.g., the user with the mouse his laptop, sees the
"zerolax" timeline... :-)

i.e., after at most 7, they get 3, before 10.

it is simpler...

and breaking the U thing is breaking GRUB, admission control.. and so on...
by default - not in a overload DL overload scenario... it is by default :-/.

> This should ofcourse go in the if (dl_se->dl_zerolax_armed) branch a
> little down from here.