[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <19cae09c-c169-42da-8011-a8f85936e7b7@kernel.org>
Date: Wed, 8 Nov 2023 15:52:20 +0100
From: Daniel Bristot de Oliveira <bristot@...nel.org>
To: Peter Zijlstra <peterz@...radead.org>
Cc: Daniel Bristot de Oliveira <bristot@...hat.com>,
Steven Rostedt <rostedt@...dmis.org>,
Joel Fernandes <joel@...lfernandes.org>,
Ingo Molnar <mingo@...hat.com>,
Juri Lelli <juri.lelli@...hat.com>,
Vincent Guittot <vincent.guittot@...aro.org>,
Dietmar Eggemann <dietmar.eggemann@....com>,
Ben Segall <bsegall@...gle.com>, Mel Gorman <mgorman@...e.de>,
Valentin Schneider <vschneid@...hat.com>,
linux-kernel@...r.kernel.org,
Luca Abeni <luca.abeni@...tannapisa.it>,
Tommaso Cucinotta <tommaso.cucinotta@...tannapisa.it>,
Thomas Gleixner <tglx@...utronix.de>,
Vineeth Pillai <vineeth@...byteword.org>,
Shuah Khan <skhan@...uxfoundation.org>,
Phil Auld <pauld@...hat.com>
Subject: Re: [PATCH v5 6/7] sched/deadline: Deferrable dl server
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.
Powered by blists - more mailing lists