From mboxrd@z Thu Jan 1 00:00:00 1970 From: Peter Zijlstra Subject: Re: [PATCH 3/3] sched: terminate newidle balancing once at least one task has moved over Date: Tue, 24 Jun 2008 12:13:26 +0200 Message-ID: <1214302406.4351.23.camel@twins> References: <20080623225645.31515.36393.stgit@lsg.lsg.lab.novell.com> <20080623230450.31515.75112.stgit@lsg.lsg.lab.novell.com> Mime-Version: 1.0 Content-Type: text/plain Content-Transfer-Encoding: 7bit Cc: mingo@elte.hu, rostedt@goodmis.org, tglx@linutronix.de, linux-kernel@vger.kernel.org, linux-rt-users@vger.kernel.org, dbahi@novell.com To: Gregory Haskins Return-path: Received: from bombadil.infradead.org ([18.85.46.34]:41814 "EHLO bombadil.infradead.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1757722AbYFXKNn (ORCPT ); Tue, 24 Jun 2008 06:13:43 -0400 In-Reply-To: <20080623230450.31515.75112.stgit@lsg.lsg.lab.novell.com> Sender: linux-rt-users-owner@vger.kernel.org List-ID: On Mon, 2008-06-23 at 17:04 -0600, Gregory Haskins wrote: > Inspired by Peter Zijlstra. > > Signed-off-by: Gregory Haskins > --- > > kernel/sched.c | 4 ++++ > 1 files changed, 4 insertions(+), 0 deletions(-) > > diff --git a/kernel/sched.c b/kernel/sched.c > index 3efbbc5..c8e8520 100644 > --- a/kernel/sched.c > +++ b/kernel/sched.c > @@ -2775,6 +2775,10 @@ static int move_tasks(struct rq *this_rq, int this_cpu, struct rq *busiest, > max_load_move - total_load_moved, > sd, idle, all_pinned, &this_best_prio); > class = class->next; > + > + if (idle == CPU_NEWLY_IDLE && this_rq->nr_running) > + break; > + > } while (class && max_load_move > total_load_moved); > > return total_load_moved > 0; right,.. uhm, except that you forgot all the other fixes and generalizations I had,.. The LB_START/LB_COMPLETE stuff is needed to fix CFS load balancing. It now always iterates the first sysctl_sched_nr_migrate tasks, and if it doesn't find any there, just gives up - which isn't too big of a problem with it set to 32, but if you drop it to 2/4 stuff starts valing apart. And the break I had here, only checks classes above and equal to the current class. This again is needed when you have more classes.