[RFC PATCH v2 7/7] sched: activate active load balancing in new idle cpus

Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
From: Vaidyanathan Srinivasan
Date: Monday, September 8, 2008 - 6:23 am

Active load balancing is a process by which migration thread
is woken up on the target CPU in order to pull current
running task on another package into this newly idle
package.

This method is already in use with normal load_balance(),
this patch introduces this method to new idle cpus when
sched_mc is set to POWERSAVINGS_BALANCE_WAKEUP.

This logic provides effective consolidation of short running
daemon jobs in a almost idle system

The side effect of this patch may be ping-ponging of tasks
if the system is moderately utilised. May need to adjust the
iterations before triggering.

Signed-off-by: Vaidyanathan Srinivasan <svaidy@linux.vnet.ibm.com>
---

 kernel/sched.c |   30 ++++++++++++++++++++++++++++++
 1 files changed, 30 insertions(+), 0 deletions(-)

diff --git a/kernel/sched.c b/kernel/sched.c
index 4ae79f5..e47e8e8 100644
--- a/kernel/sched.c
+++ b/kernel/sched.c
@@ -3656,10 +3656,40 @@ redo:
 	}
 
 	if (!ld_moved) {
+		int active_balance;
+		unsigned long flags;
+
 		schedstat_inc(sd, lb_failed[CPU_NEWLY_IDLE]);
 		if (!sd_idle && sd->flags & SD_SHARE_CPUPOWER &&
 		    !test_sd_parent(sd, SD_POWERSAVINGS_BALANCE))
 			return -1;
+
+		if (sched_mc_power_savings < POWERSAVINGS_BALANCE_WAKEUP)
+			return -1;
+
+		if (sd->nr_balance_failed++ < 1)
+			return -1;
+
+		spin_lock_irqsave(&busiest->lock, flags);
+
+		/* don't kick the migration_thread, if the curr
+		 * task on busiest cpu can't be moved to this_cpu
+		 */
+		if (!cpu_isset(this_cpu, busiest->curr->cpus_allowed)) {
+			spin_unlock_irqrestore(&busiest->lock, flags);
+			all_pinned = 1;
+			return ld_moved;
+		}
+
+		if (!busiest->active_balance) {
+			busiest->active_balance = 1;
+			busiest->push_cpu = this_cpu;
+			active_balance = 1;
+		}
+		spin_unlock_irqrestore(&busiest->lock, flags);
+		if (active_balance)
+			wake_up_process(busiest->migration_thread);
+
 	} else
 		sd->nr_balance_failed = 0;
 

--
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
[RFC PATCH v2 0/7] Tunable sched_mc_power_savings=n, Vaidyanathan Srinivasan, (Mon Sep 8, 6:14 am)
[RFC PATCH v2 1/7] sched: arch_reinit_sched_domains() must ..., Vaidyanathan Srinivasan, (Mon Sep 8, 6:16 am)
[RFC PATCH v2 2/7] sched: Fix __load_balance_iterator() fo ..., Vaidyanathan Srinivasan, (Mon Sep 8, 6:17 am)
[RFC PATCH v2 3/7] sched: Framework for sched_mc/smt_power ..., Vaidyanathan Srinivasan, (Mon Sep 8, 6:18 am)
[RFC PATCH v2 4/7] sched: favour lower logical cpu number ..., Vaidyanathan Srinivasan, (Mon Sep 8, 6:20 am)
[RFC PATCH v2 5/7] sched: nominate preferred wakeup cpu, Vaidyanathan Srinivasan, (Mon Sep 8, 6:21 am)
[RFC PATCH v2 6/7] sched: bias task wakeups to preferred s ..., Vaidyanathan Srinivasan, (Mon Sep 8, 6:22 am)
[RFC PATCH v2 7/7] sched: activate active load balancing i ..., Vaidyanathan Srinivasan, (Mon Sep 8, 6:23 am)
Re: [RFC PATCH v2 0/7] Tunable sched_mc_power_savings=n, Peter Zijlstra, (Mon Sep 8, 6:25 am)
Re: [RFC PATCH v2 5/7] sched: nominate preferred wakeup cpu, Vaidyanathan Srinivasan, (Mon Sep 8, 6:43 am)
Re: [RFC PATCH v2 0/7] Tunable sched_mc_power_savings=n, Vaidyanathan Srinivasan, (Mon Sep 8, 6:48 am)
Re: [RFC PATCH v2 0/7] Tunable sched_mc_power_savings=n, Peter Zijlstra, (Mon Sep 8, 6:56 am)
Re: [RFC PATCH v2 0/7] Tunable sched_mc_power_savings=n, Suresh Siddha, (Mon Sep 8, 6:20 pm)
Re: [RFC PATCH v2 0/7] Tunable sched_mc_power_savings=n, Peter Zijlstra, (Mon Sep 8, 11:18 pm)
Re: [RFC PATCH v2 0/7] Tunable sched_mc_power_savings=n, Peter Zijlstra, (Mon Sep 8, 11:54 pm)
Re: [RFC PATCH v2 0/7] Tunable sched_mc_power_savings=n, Peter Zijlstra, (Tue Sep 9, 1:25 am)
Re: [RFC PATCH v2 0/7] Tunable sched_mc_power_savings=n, Vaidyanathan Srinivasan, (Wed Sep 10, 6:45 am)