All of lore.kernel.org
 help / color / mirror / Atom feed
From: Kei Tokunaga <tokunaga.keiich@jp.fujitsu.com>
To: Ingo Molnar <mingo@elte.hu>, Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: linux-kernel@vger.kernel.org,
	Dhaval Giani <dhaval@linux.vnet.ibm.com>,
	vatsa <vatsa@linux.vnet.ibm.com>,
	Kei Tokunaga <ktokunag@redhat.com>,
	Kei Tokunaga <tokunaga.keiich@jp.fujitsu.com>
Subject: Re: A strange behavior of sched_fair
Date: Fri, 29 Feb 2008 15:21:01 -0500	[thread overview]
Message-ID: <47C8692D.1030701@jp.fujitsu.com> (raw)
In-Reply-To: <20080229194213.GA21249@elte.hu>

Ingo Molnar wrote, (2008/02/29 14:42):
> * Peter Zijlstra <a.p.zijlstra@chello.nl> wrote:
> 
>>> Seems the vruntime doesn't get re-set if you move tasks between 
>>> groups. sched_move_task() should call place_entity() in the context 
>>> of the new cfs_rq.
>> This should do I guess - uncompiled, untested
> 
> if someone tests it and if it solves the problem i'll apply it to the 
> scheduler tree.

Hi Ingo, Peter,

Thanks for the patch, Peter.  I modified it a bit to compile and
confirmed the issue did not occur on my ia64 box.  I am attaching
the revised patch below.

Thanks,
Kei


Subject: sched: fair-group: fixup tasks on group move

Tasks would retain their old vruntime when moved between groups, this
can cause funny lags. Re-set the vruntime on group move to fit within
the new tree.

Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>


---

  linux-2.6.25-rc3-cgroup-kei/include/linux/sched.h |    4 ++++
  linux-2.6.25-rc3-cgroup-kei/kernel/sched.c        |    3 +++
  linux-2.6.25-rc3-cgroup-kei/kernel/sched_fair.c   |   14 ++++++++++++++
  3 files changed, 21 insertions(+)

diff -puN include/linux/sched.h~sched_fair include/linux/sched.h
--- linux-2.6.25-rc3-cgroup/include/linux/sched.h~sched_fair	2008-02-29 12:26:47.000000000 -0500
+++ linux-2.6.25-rc3-cgroup-kei/include/linux/sched.h	2008-02-29 12:26:47.000000000 -0500
@@ -898,6 +898,10 @@ struct sched_class {
  			     int running);
  	void (*prio_changed) (struct rq *this_rq, struct task_struct *task,
  			     int oldprio, int running);
+
+#ifdef CONFIG_FAIR_GROUP_SCHED
+	void (*moved_group) (struct task_struct *p);
+#endif
  };

  struct load_weight {
diff -puN kernel/sched.c~sched_fair kernel/sched.c
--- linux-2.6.25-rc3-cgroup/kernel/sched.c~sched_fair	2008-02-29 12:26:47.000000000 -0500
+++ linux-2.6.25-rc3-cgroup-kei/kernel/sched.c	2008-02-29 12:26:47.000000000 -0500
@@ -7825,6 +7825,9 @@ void sched_move_task(struct task_struct

  	set_task_rq(tsk, task_cpu(tsk));

+	if (tsk->sched_class->moved_group)
+		tsk->sched_class->moved_group(tsk);
+
  	if (on_rq) {
  		if (unlikely(running))
  			tsk->sched_class->set_curr_task(rq);
diff -puN kernel/sched_fair.c~sched_fair kernel/sched_fair.c
--- linux-2.6.25-rc3-cgroup/kernel/sched_fair.c~sched_fair	2008-02-29 12:26:47.000000000 -0500
+++ linux-2.6.25-rc3-cgroup-kei/kernel/sched_fair.c	2008-02-29 13:49:15.000000000 -0500
@@ -1403,6 +1403,16 @@ static void set_curr_task_fair(struct rq
  		set_next_entity(cfs_rq_of(se), se);
  }

+#ifdef CONFIG_FAIR_GROUP_SCHED
+static void moved_group_fair(struct task_struct *p)
+{
+	struct cfs_rq *cfs_rq = task_cfs_rq(p);
+
+	update_curr(cfs_rq);
+	place_entity(cfs_rq, &p->se, 1);
+}
+#endif
+
  /*
   * All the scheduling class methods:
   */
@@ -1431,6 +1441,10 @@ static const struct sched_class fair_sch

  	.prio_changed		= prio_changed_fair,
  	.switched_to		= switched_to_fair,
+
+#ifdef CONFIG_FAIR_GROUP_SCHED
+	.moved_group		= moved_group_fair,
+#endif
  };

  #ifdef CONFIG_SCHED_DEBUG

_




  reply	other threads:[~2008-02-29 20:23 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-02-27 22:51 A strange behavior of sched_fair Kei Tokunaga
     [not found] ` <47C5E977.2010401-+CUm20s59erQFUHtdCDX3A@public.gmane.org>
2008-02-29  7:08   ` Andrew Morton
2008-02-29  7:08     ` Andrew Morton
2008-02-29  9:34 ` Peter Zijlstra
2008-02-29 10:11   ` Peter Zijlstra
2008-02-29 19:42     ` Ingo Molnar
2008-02-29 20:21       ` Kei Tokunaga [this message]
2008-02-29 20:32         ` Ingo Molnar
2008-02-29 22:46           ` Kei Tokunaga

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=47C8692D.1030701@jp.fujitsu.com \
    --to=tokunaga.keiich@jp.fujitsu.com \
    --cc=a.p.zijlstra@chello.nl \
    --cc=dhaval@linux.vnet.ibm.com \
    --cc=ktokunag@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@elte.hu \
    --cc=vatsa@linux.vnet.ibm.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.