linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH -next] sched/deadline: Add start_new_instance helper
@ 2022-08-26  3:15 Shang XiaoJing
  2022-08-26  7:15 ` Daniel Bristot de Oliveira
  0 siblings, 1 reply; 5+ messages in thread
From: Shang XiaoJing @ 2022-08-26  3:15 UTC (permalink / raw)
  To: mingo, peterz, juri.lelli, vincent.guittot, dietmar.eggemann,
	rostedt, bsegall, mgorman, bristot, vschneid, linux-kernel
  Cc: shangxiaojing

Wrap repeated code in helper function start_new_instance, which set
the deadline and runtiem of input dl_se based on pi_of(dl_se). Note that
setup_new_dl_entity originally set the deadline and runtime base on
dl_se, which should equals to pi_of(dl_se) for non-boosted task.

Signed-off-by: Shang XiaoJing <shangxiaojing@huawei.com>
---
 kernel/sched/deadline.c | 22 ++++++++++++----------
 1 file changed, 12 insertions(+), 10 deletions(-)

diff --git a/kernel/sched/deadline.c b/kernel/sched/deadline.c
index 4a40a462717c..5e9c28847610 100644
--- a/kernel/sched/deadline.c
+++ b/kernel/sched/deadline.c
@@ -770,6 +770,13 @@ static void enqueue_task_dl(struct rq *rq, struct task_struct *p, int flags);
 static void __dequeue_task_dl(struct rq *rq, struct task_struct *p, int flags);
 static void check_preempt_curr_dl(struct rq *rq, struct task_struct *p, int flags);
 
+static inline void start_new_instance(struct sched_dl_entity *dl_se, struct rq *rq)
+{
+	/* for non-boosted task, pi_of(dl_se) == dl_se */
+	dl_se->deadline = rq_clock(rq) + pi_of(dl_se)->dl_deadline;
+	dl_se->runtime = pi_of(dl_se)->dl_runtime;
+}
+
 /*
  * We are being explicitly informed that a new instance is starting,
  * and this means that:
@@ -803,8 +810,7 @@ static inline void setup_new_dl_entity(struct sched_dl_entity *dl_se)
 	 * future; in fact, we must consider execution overheads (time
 	 * spent on hardirq context, etc.).
 	 */
-	dl_se->deadline = rq_clock(rq) + dl_se->dl_deadline;
-	dl_se->runtime = dl_se->dl_runtime;
+	start_new_instance(dl_se, rq);
 }
 
 /*
@@ -836,10 +842,8 @@ static void replenish_dl_entity(struct sched_dl_entity *dl_se)
 	 * This could be the case for a !-dl task that is boosted.
 	 * Just go with full inherited parameters.
 	 */
-	if (dl_se->dl_deadline == 0) {
-		dl_se->deadline = rq_clock(rq) + pi_of(dl_se)->dl_deadline;
-		dl_se->runtime = pi_of(dl_se)->dl_runtime;
-	}
+	if (dl_se->dl_deadline == 0)
+		start_new_instance(dl_se, rq);
 
 	if (dl_se->dl_yielded && dl_se->runtime > 0)
 		dl_se->runtime = 0;
@@ -866,8 +870,7 @@ static void replenish_dl_entity(struct sched_dl_entity *dl_se)
 	 */
 	if (dl_time_before(dl_se->deadline, rq_clock(rq))) {
 		printk_deferred_once("sched: DL replenish lagged too much\n");
-		dl_se->deadline = rq_clock(rq) + pi_of(dl_se)->dl_deadline;
-		dl_se->runtime = pi_of(dl_se)->dl_runtime;
+		start_new_instance(dl_se, rq);
 	}
 
 	if (dl_se->dl_yielded)
@@ -1024,8 +1027,7 @@ static void update_dl_entity(struct sched_dl_entity *dl_se)
 			return;
 		}
 
-		dl_se->deadline = rq_clock(rq) + pi_of(dl_se)->dl_deadline;
-		dl_se->runtime = pi_of(dl_se)->dl_runtime;
+		start_new_instance(dl_se, rq);
 	}
 }
 
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH -next] sched/deadline: Add start_new_instance helper
  2022-08-26  3:15 [PATCH -next] sched/deadline: Add start_new_instance helper Shang XiaoJing
@ 2022-08-26  7:15 ` Daniel Bristot de Oliveira
  2022-08-26  7:40   ` shangxiaojing
  0 siblings, 1 reply; 5+ messages in thread
From: Daniel Bristot de Oliveira @ 2022-08-26  7:15 UTC (permalink / raw)
  To: Shang XiaoJing
  Cc: mingo, peterz, juri.lelli, vincent.guittot, dietmar.eggemann,
	rostedt, bsegall, mgorman, vschneid, linux-kernel

On 8/26/22 05:15, Shang XiaoJing wrote:
> Wrap repeated code in helper function start_new_instance, which set
> the deadline and runtiem of input dl_se based on pi_of(dl_se). Note that
                      ^ runtime
> setup_new_dl_entity originally set the deadline and runtime base on
> dl_se, which should equals to pi_of(dl_se) for non-boosted task.
> 
> Signed-off-by: Shang XiaoJing <shangxiaojing@huawei.com>
> ---
>  kernel/sched/deadline.c | 22 ++++++++++++----------
>  1 file changed, 12 insertions(+), 10 deletions(-)
> 
> diff --git a/kernel/sched/deadline.c b/kernel/sched/deadline.c
> index 4a40a462717c..5e9c28847610 100644
> --- a/kernel/sched/deadline.c
> +++ b/kernel/sched/deadline.c
> @@ -770,6 +770,13 @@ static void enqueue_task_dl(struct rq *rq, struct task_struct *p, int flags);
>  static void __dequeue_task_dl(struct rq *rq, struct task_struct *p, int flags);
>  static void check_preempt_curr_dl(struct rq *rq, struct task_struct *p, int flags);

again, this is not a good function name. Maybe, dl_replenish_new_period() ?

> +static inline void start_new_instance(struct sched_dl_entity *dl_se, struct rq *rq)
> +{
> +	/* for non-boosted task, pi_of(dl_se) == dl_se */
> +	dl_se->deadline = rq_clock(rq) + pi_of(dl_se)->dl_deadline;
> +	dl_se->runtime = pi_of(dl_se)->dl_runtime;
> +}
> +

-- Daniel


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH -next] sched/deadline: Add start_new_instance helper
  2022-08-26  7:15 ` Daniel Bristot de Oliveira
@ 2022-08-26  7:40   ` shangxiaojing
  2022-08-26  8:57     ` Daniel Bristot de Oliveira
  0 siblings, 1 reply; 5+ messages in thread
From: shangxiaojing @ 2022-08-26  7:40 UTC (permalink / raw)
  To: Daniel Bristot de Oliveira
  Cc: mingo, peterz, juri.lelli, vincent.guittot, dietmar.eggemann,
	rostedt, bsegall, mgorman, vschneid, linux-kernel


On 2022/8/26 15:15, Daniel Bristot de Oliveira wrote:
> On 8/26/22 05:15, Shang XiaoJing wrote:
>> Wrap repeated code in helper function start_new_instance, which set
>> the deadline and runtiem of input dl_se based on pi_of(dl_se). Note that
>                        ^ runtime
oops
>> setup_new_dl_entity originally set the deadline and runtime base on
>> dl_se, which should equals to pi_of(dl_se) for non-boosted task.
>>
>> Signed-off-by: Shang XiaoJing <shangxiaojing@huawei.com>
>> ---
>>   kernel/sched/deadline.c | 22 ++++++++++++----------
>>   1 file changed, 12 insertions(+), 10 deletions(-)
>>
>> diff --git a/kernel/sched/deadline.c b/kernel/sched/deadline.c
>> index 4a40a462717c..5e9c28847610 100644
>> --- a/kernel/sched/deadline.c
>> +++ b/kernel/sched/deadline.c
>> @@ -770,6 +770,13 @@ static void enqueue_task_dl(struct rq *rq, struct task_struct *p, int flags);
>>   static void __dequeue_task_dl(struct rq *rq, struct task_struct *p, int flags);
>>   static void check_preempt_curr_dl(struct rq *rq, struct task_struct *p, int flags);
> again, this is not a good function name. Maybe, dl_replenish_new_period() ?

right, i have thought like replenish_new_instance, but when i'm making 
patch,  i was worried that "replenish" is only for ENQUEUE_REPLENISH.

what about dl_start_new_period? which means a new deadline will be set, 
rather than

     dl_se->deadline += pi_of(dl_se)->dl_period;

in replenish_dl_entity.

>> +static inline void start_new_instance(struct sched_dl_entity *dl_se, struct rq *rq)
>> +{
>> +	/* for non-boosted task, pi_of(dl_se) == dl_se */
>> +	dl_se->deadline = rq_clock(rq) + pi_of(dl_se)->dl_deadline;
>> +	dl_se->runtime = pi_of(dl_se)->dl_runtime;
>> +}
>> +
> -- Daniel

Thanks,

Shang XiaoJing


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH -next] sched/deadline: Add start_new_instance helper
  2022-08-26  7:40   ` shangxiaojing
@ 2022-08-26  8:57     ` Daniel Bristot de Oliveira
  2022-08-26  9:09       ` shangxiaojing
  0 siblings, 1 reply; 5+ messages in thread
From: Daniel Bristot de Oliveira @ 2022-08-26  8:57 UTC (permalink / raw)
  To: shangxiaojing
  Cc: mingo, peterz, juri.lelli, vincent.guittot, dietmar.eggemann,
	rostedt, bsegall, mgorman, vschneid, linux-kernel

On 8/26/22 09:40, shangxiaojing wrote:
>> again, this is not a good function name. Maybe, dl_replenish_new_period() ?
> 
> right, i have thought like replenish_new_instance, but when i'm making
> patch,  i was worried that "replenish" is only for ENQUEUE_REPLENISH.

I see, but that is a flag, not the action.

> what about dl_start_new_period? which means a new deadline will be set, rather than

The thing it is doing is replenishing... 

>     dl_se->deadline += pi_of(dl_se)->dl_period;
> 
> in replenish_dl_entity.

that is why I added "new_period"....  so replenish_dl_new_period() to keep the consistency.

>>> +static inline void start_new_instance(struct sched_dl_entity *dl_se, struct rq *rq)
>>>
>>> +{
>>> +    /* for non-boosted task, pi_of(dl_se) == dl_se */
>>> +    dl_se->deadline = rq_clock(rq) + pi_of(dl_se)->dl_deadline;
>>> +    dl_se->runtime = pi_of(dl_se)->dl_runtime;
>>> +}
>>> +
>> -- Daniel 

-- Daniel


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH -next] sched/deadline: Add start_new_instance helper
  2022-08-26  8:57     ` Daniel Bristot de Oliveira
@ 2022-08-26  9:09       ` shangxiaojing
  0 siblings, 0 replies; 5+ messages in thread
From: shangxiaojing @ 2022-08-26  9:09 UTC (permalink / raw)
  To: Daniel Bristot de Oliveira
  Cc: mingo, peterz, juri.lelli, vincent.guittot, dietmar.eggemann,
	rostedt, bsegall, mgorman, vschneid, linux-kernel


On 2022/8/26 16:57, Daniel Bristot de Oliveira wrote:
> On 8/26/22 09:40, shangxiaojing wrote:
>>> again, this is not a good function name. Maybe, dl_replenish_new_period() ?
>> right, i have thought like replenish_new_instance, but when i'm making
>> patch,  i was worried that "replenish" is only for ENQUEUE_REPLENISH.
> I see, but that is a flag, not the action.
>
>> what about dl_start_new_period? which means a new deadline will be set, rather than
> The thing it is doing is replenishing...
>
>>      dl_se->deadline += pi_of(dl_se)->dl_period;
>>
>> in replenish_dl_entity.
> that is why I added "new_period"....  so replenish_dl_new_period() to keep the consistency.

ok, i'll use replenish_dl_new_period in v2.

>>>> +static inline void start_new_instance(struct sched_dl_entity *dl_se, struct rq *rq)
>>>>
>>>> +{
>>>> +    /* for non-boosted task, pi_of(dl_se) == dl_se */
>>>> +    dl_se->deadline = rq_clock(rq) + pi_of(dl_se)->dl_deadline;
>>>> +    dl_se->runtime = pi_of(dl_se)->dl_runtime;
>>>> +}
>>>> +
>>> -- Daniel
> -- Daniel

Thanks,

Shang XiaoJing


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2022-08-26  9:10 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-08-26  3:15 [PATCH -next] sched/deadline: Add start_new_instance helper Shang XiaoJing
2022-08-26  7:15 ` Daniel Bristot de Oliveira
2022-08-26  7:40   ` shangxiaojing
2022-08-26  8:57     ` Daniel Bristot de Oliveira
2022-08-26  9:09       ` shangxiaojing

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).