All of lore.kernel.org
 help / color / mirror / Atom feed
From: Dietmar Eggemann <dietmar.eggemann@arm.com>
To: Peter Zijlstra <peterz@infradead.org>, Ingo Molnar <mingo@redhat.com>
Cc: Vincent Guittot <vincent.guittot@linaro.org>,
	Morten Rasmussen <morten.rasmussen@arm.com>,
	Patrick Bellasi <patrick.bellasi@arm.com>,
	Quentin Perret <quentin.perret@arm.com>,
	Joel Fernandes <joelaf@google.com>,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH v2] sched/fair: Remove setting task's se->runnable_weight during PELT update
Date: Mon, 10 Sep 2018 16:49:05 -0700	[thread overview]
Message-ID: <bf1ed7b3-e67f-fbf0-a32f-ad5d7dfa5731@arm.com> (raw)
In-Reply-To: <20180803140538.1178-1-dietmar.eggemann@arm.com>

Hi,

On 08/03/2018 07:05 AM, Dietmar Eggemann wrote:
> A CFS (SCHED_OTHER, SCHED_BATCH or SCHED_IDLE policy) task's
> se->runnable_weight must always be in sync with its se->load.weight.
> 
> se->runnable_weight is set to se->load.weight when the task is
> forked (init_entity_runnable_average()) or reniced (reweight_entity()).
> 
> There are two cases in set_load_weight() which since they currently only
> set se->load.weight could lead to a situation in which se->load.weight
> is different to se->runnable_weight for a CFS task:
> 
> (1) A task switches to SCHED_IDLE.
> 
> (2) A SCHED_FIFO, SCHED_RR or SCHED_DEADLINE task which has been reniced
>      (during which only its static priority gets set) switches to
>      SCHED_OTHER or SCHED_BATCH.
> 
> Set se->runnable_weight to se->load.weight in these two cases to prevent
> this. This eliminates the need to explicitly set it to se->load.weight
> during PELT updates in the CFS scheduler fastpath.
> 
> Signed-off-by: Dietmar Eggemann <dietmar.eggemann@arm.com>
> ---
> 
> Changes v1->v2:
> - Rebased on latest tip/sched/core
> 
> This patch has been tested w/ appropriate BUG_ON()'s in
> __update_load_avg_blocked_se() and __update_load_avg_se() on an Ubuntu
> 18.04 desktop.
> 
>   kernel/sched/core.c | 2 ++
>   kernel/sched/pelt.c | 6 ------
>   2 files changed, 2 insertions(+), 6 deletions(-)
> 
> diff --git a/kernel/sched/core.c b/kernel/sched/core.c
> index deafa9fe602b..2a08418db3d1 100644
> --- a/kernel/sched/core.c
> +++ b/kernel/sched/core.c
> @@ -701,6 +701,7 @@ static void set_load_weight(struct task_struct *p, bool update_load)
>   	if (idle_policy(p->policy)) {
>   		load->weight = scale_load(WEIGHT_IDLEPRIO);
>   		load->inv_weight = WMULT_IDLEPRIO;
> +		p->se.runnable_weight = load->weight;
>   		return;
>   	}
>   
> @@ -713,6 +714,7 @@ static void set_load_weight(struct task_struct *p, bool update_load)
>   	} else {
>   		load->weight = scale_load(sched_prio_to_weight[prio]);
>   		load->inv_weight = sched_prio_to_wmult[prio];
> +		p->se.runnable_weight = load->weight;
>   	}
>   }
>   
> diff --git a/kernel/sched/pelt.c b/kernel/sched/pelt.c
> index 35475c0c5419..d0016b16d23a 100644
> --- a/kernel/sched/pelt.c
> +++ b/kernel/sched/pelt.c
> @@ -269,9 +269,6 @@ ___update_load_avg(struct sched_avg *sa, unsigned long load, unsigned long runna
>   
>   int __update_load_avg_blocked_se(u64 now, int cpu, struct sched_entity *se)
>   {
> -	if (entity_is_task(se))
> -		se->runnable_weight = se->load.weight;
> -
>   	if (___update_load_sum(now, cpu, &se->avg, 0, 0, 0)) {
>   		___update_load_avg(&se->avg, se_weight(se), se_runnable(se));
>   		return 1;
> @@ -282,9 +279,6 @@ int __update_load_avg_blocked_se(u64 now, int cpu, struct sched_entity *se)
>   
>   int __update_load_avg_se(u64 now, int cpu, struct cfs_rq *cfs_rq, struct sched_entity *se)
>   {
> -	if (entity_is_task(se))
> -		se->runnable_weight = se->load.weight;
> -
>   	if (___update_load_sum(now, cpu, &se->avg, !!se->on_rq, !!se->on_rq,
>   				cfs_rq->curr == se)) {
>   
> 

Is there anything else I should do for this patch ?

Thanks,

-- Dietmar


  reply	other threads:[~2018-09-10 23:49 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-08-03 14:05 [PATCH v2] sched/fair: Remove setting task's se->runnable_weight during PELT update Dietmar Eggemann
2018-09-10 23:49 ` Dietmar Eggemann [this message]
2018-09-11 11:30   ` Peter Zijlstra
2018-10-02 10:07 ` [tip:sched/core] " tip-bot for Dietmar Eggemann

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=bf1ed7b3-e67f-fbf0-a32f-ad5d7dfa5731@arm.com \
    --to=dietmar.eggemann@arm.com \
    --cc=joelaf@google.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@redhat.com \
    --cc=morten.rasmussen@arm.com \
    --cc=patrick.bellasi@arm.com \
    --cc=peterz@infradead.org \
    --cc=quentin.perret@arm.com \
    --cc=vincent.guittot@linaro.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.