Commit 4211a9a2 authored by Christoph Lameter's avatar Christoph Lameter Committed by Linus Torvalds

[PATCH] sched: remove staggering of load balancing

Timer interrupts already are staggered.  We do not need an additional layer of
time staggering for short load balancing actions that take a reasonably small
portion of the time slice.

For load balancing on large sched_domains we will add a serialization later
that avoids concurrent load balance operations and thus has the same effect as
load staggering.
Signed-off-by: default avatarChristoph Lameter <clameter@sgi.com>
Cc: Peter Williams <pwil3058@bigpond.net.au>
Cc: Nick Piggin <nickpiggin@yahoo.com.au>
Cc: Christoph Lameter <clameter@sgi.com>
Cc: "Siddha, Suresh B" <suresh.b.siddha@intel.com>
Cc: "Chen, Kenneth W" <kenneth.w.chen@intel.com>
Acked-by: default avatarIngo Molnar <mingo@elte.hu>
Cc: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 571f6d2f
...@@ -2841,16 +2841,10 @@ static void active_load_balance(struct rq *busiest_rq, int busiest_cpu) ...@@ -2841,16 +2841,10 @@ static void active_load_balance(struct rq *busiest_rq, int busiest_cpu)
* Balancing parameters are set up in arch_init_sched_domains. * Balancing parameters are set up in arch_init_sched_domains.
*/ */
/* Don't have all balancing operations going off at once: */
static inline unsigned long cpu_offset(int cpu)
{
return jiffies + cpu * HZ / NR_CPUS;
}
static void static void
rebalance_tick(int this_cpu, struct rq *this_rq, enum idle_type idle) rebalance_tick(int this_cpu, struct rq *this_rq, enum idle_type idle)
{ {
unsigned long this_load, interval, j = cpu_offset(this_cpu); unsigned long this_load, interval;
struct sched_domain *sd; struct sched_domain *sd;
int i, scale; int i, scale;
...@@ -2885,7 +2879,7 @@ rebalance_tick(int this_cpu, struct rq *this_rq, enum idle_type idle) ...@@ -2885,7 +2879,7 @@ rebalance_tick(int this_cpu, struct rq *this_rq, enum idle_type idle)
if (unlikely(!interval)) if (unlikely(!interval))
interval = 1; interval = 1;
if (j - sd->last_balance >= interval) { if (jiffies - sd->last_balance >= interval) {
if (load_balance(this_cpu, this_rq, sd, idle)) { if (load_balance(this_cpu, this_rq, sd, idle)) {
/* /*
* We've pulled tasks over so either we're no * We've pulled tasks over so either we're no
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment