public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Christoph Lameter <clameter@sgi.com>
To: akpm@osdl.org
Cc: Peter Williams <pwil3058@bigpond.net.au>,
	linux-kernel@vger.kernel.org,
	Nick Piggin <nickpiggin@yahoo.com.au>,
	Christoph Lameter <clameter@sgi.com>,
	KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>,
	Dave Chinner <dgc@sgi.com>, Ingo Molnar <mingo@elte.hu>,
	"Siddha, Suresh B" <suresh.b.siddha@intel.com>
Subject: [PATCH 5/5] Only call rebalance_domains when needed from scheduler_tick
Date: Tue, 24 Oct 2006 11:31:30 -0700 (PDT)	[thread overview]
Message-ID: <20061024183130.4530.83162.sendpatchset@schroedinger.engr.sgi.com> (raw)
In-Reply-To: <20061024183104.4530.29183.sendpatchset@schroedinger.engr.sgi.com>

Only call rebalance_domains when needed from scheduler_tick.

Call rebalance_domains from a tasklet with interrupt enabled.
Only call it when one of the sched domains is to be rebalanced.
The jiffies when the next balancing action is to take place is
kept in a per cpu variable next_balance.

Signed-off-by: Christoph Lameter <clameter@sgi.com>

Index: linux-2.6.19-rc2-mm2/kernel/sched.c
===================================================================
--- linux-2.6.19-rc2-mm2.orig/kernel/sched.c	2006-10-24 10:40:32.000000000 -0500
+++ linux-2.6.19-rc2-mm2/kernel/sched.c	2006-10-24 10:42:02.135978934 -0500
@@ -2841,8 +2841,11 @@ static void update_load(struct rq *this_
 	}
 }
 
+static DEFINE_PER_CPU(unsigned long, next_balance);
+
 /*
- * rebalance_domains is called from the scheduler_tick.
+ * rebalance_domains is triggered when needed via a tasklet from the
+ * scheduler_tick.
  *
  * It checks each scheduling domain to see if it is due to be balanced,
  * and initiates a balancing operation if so.
@@ -2858,6 +2861,8 @@ static void rebalance_domains(unsigned l
 	/* Idle means on the idle queue without a runnable task */
 	enum idle_type idle = (this_rq->idle && !this_rq->nr_running) ?
 				SCHED_IDLE : NOT_IDLE;
+	/* Maximum time between calls to rebalance_domains */
+	unsigned long next_balance = jiffies + 60*HZ;
 
 	for_each_domain(this_cpu, sd) {
 		if (!(sd->flags & SD_LOAD_BALANCE))
@@ -2883,8 +2888,12 @@ static void rebalance_domains(unsigned l
 			}
 			sd->next_balance += interval;
 		}
+		next_balance = min(next_balance, sd->next_balance);
 	}
+      	__get_cpu_var(next_balance) = next_balance;
 }
+
+DECLARE_TASKLET(rebalance, &rebalance_domains, 0L);
 #else
 /*
  * on UP we do not need to balance between CPUs:
@@ -3137,7 +3146,8 @@ void scheduler_tick(void)
 	}
 #ifdef CONFIG_SMP
 	update_load(rq);
-	rebalance_domains(0L);
+	if (jiffies >= __get_cpu_var(next_balance))
+		tasklet_schedule(&rebalance);
 #endif
 }
 

  parent reply	other threads:[~2006-10-24 18:32 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-10-24 18:31 [PATCH 0/5] On demand sched_domain balancing in tasklet Christoph Lameter
2006-10-24 18:31 ` [PATCH 1/5] Disable interrupts for locking in load_balance() Christoph Lameter
2006-10-24 18:31 ` [PATCH 2/5] Extract load calculation from rebalance_tick Christoph Lameter
2006-10-26 12:03   ` Nick Piggin
2006-10-26 16:12     ` Christoph Lameter
2006-10-24 18:31 ` [PATCH 3/5] Use next_balance instead of last_balance Christoph Lameter
2006-10-26 12:13   ` Nick Piggin
2006-10-26 12:32     ` Nick Piggin
2006-10-26 16:44       ` Christoph Lameter
2006-10-26 17:13         ` Nick Piggin
2006-10-26 18:17           ` Christoph Lameter
2006-10-24 18:31 ` [PATCH 4/5] Create rebalance_domains from rebalance_tick Christoph Lameter
2006-10-26 12:19   ` Nick Piggin
2006-10-26 16:19     ` Christoph Lameter
2006-10-24 18:31 ` Christoph Lameter [this message]
2006-10-26 12:26   ` [PATCH 5/5] Only call rebalance_domains when needed from scheduler_tick Nick Piggin
2006-10-26 16:24     ` Christoph Lameter
2006-10-26 17:12       ` Nick Piggin
2006-10-26 18:13         ` Christoph Lameter

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=20061024183130.4530.83162.sendpatchset@schroedinger.engr.sgi.com \
    --to=clameter@sgi.com \
    --cc=akpm@osdl.org \
    --cc=dgc@sgi.com \
    --cc=kamezawa.hiroyu@jp.fujitsu.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@elte.hu \
    --cc=nickpiggin@yahoo.com.au \
    --cc=pwil3058@bigpond.net.au \
    --cc=suresh.b.siddha@intel.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox