All of lore.kernel.org
 help / color / mirror / Atom feed
From: Peter Zijlstra <peterz@infradead.org>
To: zhdxzx@sina.com
Cc: linux-kernel <linux-kernel@vger.kernel.org>,
	Mike Galbraith <mgalbraith@suse.de>,
	Ingo Molnar <mingo@kernel.org>, dhillf <dhillf@gmail.com>,
	"hillf.zj" <hillf.zj@alibaba-inc.com>
Subject: Re: sched: how to pick runqueue when checking task hot?
Date: Fri, 6 Jun 2014 12:15:08 +0200	[thread overview]
Message-ID: <20140606101508.GP3213@twins.programming.kicks-ass.net> (raw)
In-Reply-To: <20140606065956.854A6718001@webmail.sinamail.sina.com.cn>

[-- Attachment #1: Type: text/plain, Size: 1799 bytes --]

On Fri, Jun 06, 2014 at 02:59:56PM +0800, zhdxzx@sina.com wrote:
> Hi all
> 
> When computing cache hot, question-1: should we check the number of running tasks
> against the migration target runqueue, as shown by the following diff?
> 
> It looks that we dont migrate task if it is buddy and the target cpu is not idle.
> 
> 
> --- a/kernel/sched/fair.c	Fri Jun  6 12:37:37 2014
> +++ b/kernel/sched/fair.c	Fri Jun  6 13:55:35 2014
> @@ -5051,7 +5050,7 @@ task_hot(struct task_struct *p, u64 now)
>  	/*
>  	 * Buddy candidates are cache hot:
>  	 */
> -	if (sched_feat(CACHE_HOT_BUDDY) && this_rq()->nr_running &&
> +	if (sched_feat(CACHE_HOT_BUDDY) && env->dst_rq->nr_running &&
>  			(&p->se == cfs_rq_of(&p->se)->next ||
>  			 &p->se == cfs_rq_of(&p->se)->last))
>  		return 1;


That is indeed the effective result for normal balancing, seeing how it
pulls to the dst rq, and this_rq would be dst.

This is of course false for a number of cases these days, most obviously
the nohz idle balancing.

> But based on the comment, question-2: should we check running tasks
> against the runqueue of the given task?

> --- a/kernel/sched/fair.c	Fri Jun  6 12:37:37 2014
> +++ b/kernel/sched/fair.c	Fri Jun  6 14:32:34 2014
> @@ -5051,7 +5051,7 @@ task_hot(struct task_struct *p, u64 now)
>  	/*
>  	 * Buddy candidates are cache hot:
>  	 */
> -	if (sched_feat(CACHE_HOT_BUDDY) && this_rq()->nr_running &&
> +	if (sched_feat(CACHE_HOT_BUDDY) && task_rq(p)->nr_running &&
>  			(&p->se == cfs_rq_of(&p->se)->next ||
>  			 &p->se == cfs_rq_of(&p->se)->last))
>  		return 1;

That does appear to make more sense indeed, seeing how buddies are pairs
of tasks, so protecting a lone task doesn't make sense.


Mike, how did you intend this code to work? 

[-- Attachment #2: Type: application/pgp-signature, Size: 836 bytes --]

       reply	other threads:[~2014-06-06 10:15 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20140606065956.854A6718001@webmail.sinamail.sina.com.cn>
2014-06-06 10:15 ` Peter Zijlstra [this message]
2014-06-06 11:16   ` sched: how to pick runqueue when checking task hot? Mike Galbraith
2014-06-06 11:34     ` Peter Zijlstra
2014-06-06 11:50       ` Mike Galbraith

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=20140606101508.GP3213@twins.programming.kicks-ass.net \
    --to=peterz@infradead.org \
    --cc=dhillf@gmail.com \
    --cc=hillf.zj@alibaba-inc.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mgalbraith@suse.de \
    --cc=mingo@kernel.org \
    --cc=zhdxzx@sina.com \
    /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.