Messages in this thread Patch in this message | | | From | Vaidyanathan Srinivasan <> | Subject | [RFC PATCH v2 7/7] sched: activate active load balancing in new idle cpus | Date | Mon, 08 Sep 2008 18:53:54 +0530 |
| |
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;
| |