All of lore.kernel.org
 help / color / mirror / Atom feed
From: Peter Zijlstra <peterz@infradead.org>
To: Daniel Lezcano <daniel.lezcano@linaro.org>
Cc: rjw@rjwysocki.net, linux-kernel@vger.kernel.org,
	linux-pm@vger.kernel.org, nicolas.pitre@linaro.org,
	Ingo Molnar <mingo@redhat.com>
Subject: Re: [PATCH 3/3] sched: fair: Fix wrong idle timestamp usage
Date: Wed, 15 Apr 2015 14:18:31 +0200	[thread overview]
Message-ID: <20150415121831.GU5029@twins.programming.kicks-ass.net> (raw)
In-Reply-To: <1429092024-20498-3-git-send-email-daniel.lezcano@linaro.org>

On Wed, Apr 15, 2015 at 12:00:24PM +0200, Daniel Lezcano wrote:
> The find_idlest_cpu is assuming the rq->idle_stamp information reflects when
> the cpu entered the idle state. This is wrong as the cpu may exit and enter
> the idle state several times without the rq->idle_stamp being updated.

Sure, but you forgot to tell us why it matters.

> We have two informations here:
> 
>  * rq->idle_stamp gives when the idle task has been scheduled
>  * idle->idle_stamp gives when the cpu entered the idle state

I'm not a native speaker, but I'm pretty sure 'information' is a word
without a plural, a google search suggests it to be a non-countable
noun.

> The patch fixes that by using the latter information and fallbacks to
> the rq's timestamp when the idle state is not accessible
> 
> Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
> ---
>  kernel/sched/fair.c | 42 ++++++++++++++++++++++++++++--------------
>  1 file changed, 28 insertions(+), 14 deletions(-)
> 
> diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
> index 46855d0..b44f1ad 100644
> --- a/kernel/sched/fair.c
> +++ b/kernel/sched/fair.c
> @@ -4704,21 +4704,35 @@ find_idlest_cpu(struct sched_group *group, struct task_struct *p, int this_cpu)
>  		if (idle_cpu(i)) {
>  			struct rq *rq = cpu_rq(i);
>  			struct cpuidle_state *idle = idle_get_state(rq);
> +
> +			if (idle) {
> +				if (idle->exit_latency < min_exit_latency) {
> +					/*
> +					 * We give priority to a CPU
> +					 * whose idle state has the
> +					 * smallest exit latency
> +					 * irrespective of any idle
> +					 * timestamp.
> +					 */
> +					min_exit_latency = idle->exit_latency;
> +					latest_idle_timestamp = idle->idle_stamp;
> +					shallowest_idle_cpu = i;
> +				} else if (idle->exit_latency == min_exit_latency &&
> +					   idle->idle_stamp > latest_idle_timestamp) {
> +					/*
> +					 * If the CPU is in the same
> +					 * idle state, choose the more
> +					 * recent one as it might have
> +					 * a warmer cache
> +					 */
> +					latest_idle_timestamp = idle->idle_stamp;
> +					shallowest_idle_cpu = i;
> +				}
> +			} else if (rq->idle_stamp > latest_idle_timestamp) {
>  				/*
> +				 * If no active idle state, then the
> +				 * most recent idled CPU might have a
> +				 * warmer cache
>  				 */
>  				latest_idle_timestamp = rq->idle_stamp;
>  				shallowest_idle_cpu = i;

Urgh, you made horrid code more horrible.

And all without reason.

  reply	other threads:[~2015-04-15 12:18 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-04-15 10:00 [PATCH 1/3] cpuidle: Store the idle start time stamp Daniel Lezcano
2015-04-15 10:00 ` [PATCH 2/3] cpuidle: Add some comments in the cpuidle_enter function Daniel Lezcano
2015-04-15 13:46   ` Rafael J. Wysocki
2015-04-15 16:07     ` Daniel Lezcano
2015-04-15 10:00 ` [PATCH 3/3] sched: fair: Fix wrong idle timestamp usage Daniel Lezcano
2015-04-15 12:18   ` Peter Zijlstra [this message]
2015-04-15 15:43     ` Daniel Lezcano
2015-04-15 16:02       ` Peter Zijlstra
2015-05-07 15:31         ` Daniel Lezcano
2015-04-15 17:10       ` Morten Rasmussen
2015-04-16  8:46         ` Daniel Lezcano
2015-04-15 10:20 ` [PATCH 1/3] cpuidle: Store the idle start time stamp Peter Zijlstra
2015-04-15 12:29   ` Daniel Lezcano
2015-04-15 12:42     ` Peter Zijlstra
2015-04-15 12:50       ` Daniel Lezcano
2015-04-15 13:11         ` Peter Zijlstra
2015-04-15 10:25 ` Peter Zijlstra

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=20150415121831.GU5029@twins.programming.kicks-ass.net \
    --to=peterz@infradead.org \
    --cc=daniel.lezcano@linaro.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pm@vger.kernel.org \
    --cc=mingo@redhat.com \
    --cc=nicolas.pitre@linaro.org \
    --cc=rjw@rjwysocki.net \
    /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.