All of lore.kernel.org
 help / color / mirror / Atom feed
From: Peter Zijlstra <peterz@infradead.org>
To: Xunlei Pang <pang.xunlei@linaro.org>
Cc: linux-kernel@vger.kernel.org, Juri Lelli <juri.lelli@gmail.com>,
	Steven Rostedt <rostedt@goodmis.org>
Subject: Re: [PATCH 5/5] sched/rt: Optimize find_lowest_rq() to select a cache hot cpu
Date: Tue, 27 Jan 2015 15:21:36 +0100	[thread overview]
Message-ID: <20150127142136.GE21418@twins.programming.kicks-ass.net> (raw)
In-Reply-To: <1421642980-10045-5-git-send-email-pang.xunlei@linaro.org>

On Mon, Jan 19, 2015 at 04:49:40AM +0000, Xunlei Pang wrote:
> In find_lowest_rq(), if we can't find a wake_affine cpu from
> sched_domain, then we can actually determine a cache hot cpu
> instead of simply calling "cpumask_any(lowest_mask)" which
> always returns the first cpu in the mask.
> 
> So, we can determine the cache hot cpu during the interation of
> sched_domain() in passing.

Steve, I'm not getting this. Why are we using WAKE_AFFINE here?



> Signed-off-by: Xunlei Pang <pang.xunlei@linaro.org>
> ---
>  kernel/sched/rt.c | 17 +++++++++++++----
>  1 file changed, 13 insertions(+), 4 deletions(-)
> 
> diff --git a/kernel/sched/rt.c b/kernel/sched/rt.c
> index d28cfa4..e6a42e6 100644
> --- a/kernel/sched/rt.c
> +++ b/kernel/sched/rt.c
> @@ -1535,6 +1535,7 @@ static int find_lowest_rq(struct task_struct *task)
>  	struct cpumask *lowest_mask = this_cpu_cpumask_var_ptr(local_cpu_mask);
>  	int this_cpu = smp_processor_id();
>  	int cpu      = task_cpu(task);
> +	int cachehot_cpu = nr_cpu_ids;
>  
>  	/* Make sure the mask is initialized first */
>  	if (unlikely(!lowest_mask))
> @@ -1566,8 +1567,12 @@ static int find_lowest_rq(struct task_struct *task)
>  
>  	rcu_read_lock();
>  	for_each_domain(cpu, sd) {
> +		if (cachehot_cpu >= nr_cpu_ids)
> +			cachehot_cpu = cpumask_first_and(lowest_mask,
> +						   sched_domain_span(sd));
> +
>  		if (sd->flags & SD_WAKE_AFFINE) {
> -			int best_cpu;
> +			int wakeaffine_cpu;
>  
>  			/*
>  			 * "this_cpu" is cheaper to preempt than a
> @@ -1579,16 +1584,20 @@ static int find_lowest_rq(struct task_struct *task)
>  				return this_cpu;
>  			}
>  
> -			best_cpu = cpumask_first_and(lowest_mask,
> +			wakeaffine_cpu = cpumask_first_and(lowest_mask,
>  						     sched_domain_span(sd));
> -			if (best_cpu < nr_cpu_ids) {
> +			if (wakeaffine_cpu < nr_cpu_ids) {
>  				rcu_read_unlock();
> -				return best_cpu;
> +				return wakeaffine_cpu;
>  			}
>  		}
>  	}
>  	rcu_read_unlock();
>  
> +	/* most likely cache-hot */
> +	if (cachehot_cpu < nr_cpu_ids)
> +		return cachehot_cpu;
> +
>  	/*
>  	 * And finally, if there were no matches within the domains
>  	 * just give the caller *something* to work with from the compatible
> -- 
> 1.9.1
> 

  reply	other threads:[~2015-01-27 14:21 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-01-19  4:49 [PATCH 1/5] sched/deadline: Modify cpudl::free_cpus to reflect rd->online Xunlei Pang
2015-01-19  4:49 ` [PATCH 2/5] sched/deadline: Remove cpu_active_mask from cpudl_find() Xunlei Pang
2015-01-27 15:04   ` Peter Zijlstra
2015-02-04 14:36   ` [tip:sched/core] " tip-bot for Xunlei Pang
2015-01-19  4:49 ` [PATCH 3/5] sched/deadline: Fix wrong cpudl_find() in check_preempt_equal_dl() Xunlei Pang
2015-01-27 12:48   ` Peter Zijlstra
2015-01-27 14:15     ` Peter Zijlstra
2015-01-27 16:47   ` Peter Zijlstra
2015-01-28 15:18     ` Xunlei Pang
2015-01-19  4:49 ` [PATCH 4/5] sched/rt: Consider deadline tasks in cpupri_find() Xunlei Pang
2015-01-27 12:58   ` Peter Zijlstra
2015-01-27 14:18     ` Peter Zijlstra
2015-01-27 23:04     ` Steven Rostedt
2015-01-28 15:21       ` Xunlei Pang
2015-01-19  4:49 ` [PATCH 5/5] sched/rt: Optimize find_lowest_rq() to select a cache hot cpu Xunlei Pang
2015-01-27 14:21   ` Peter Zijlstra [this message]
2015-01-27 14:56     ` Steven Rostedt
2015-01-27 16:28       ` Peter Zijlstra
2015-01-29 16:42       ` Xunlei Pang
2015-01-29 17:17         ` Steven Rostedt
2015-01-29 19:23         ` Peter Zijlstra
2015-02-04 13:07           ` Xunlei Pang
2015-01-23 18:09 ` [PATCH 1/5] sched/deadline: Modify cpudl::free_cpus to reflect rd->online Xunlei Pang
2015-02-01 17:53 ` [tip:sched/core] sched/deadline: Modify cpudl:: free_cpus " tip-bot for Xunlei Pang

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=20150127142136.GE21418@twins.programming.kicks-ass.net \
    --to=peterz@infradead.org \
    --cc=juri.lelli@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=pang.xunlei@linaro.org \
    --cc=rostedt@goodmis.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.