scheduler fix
Linus,
Please pull the latest sched-fixes-for-linus git tree from:
git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip.git sched-fixes-for-linus
Thanks,
Ingo
------------------>
Peter Zijlstra (1):
sched: Clean up rebalance_domains() load-balance interval calculation
kernel/sched.c | 3 +++ kernel/sched_fair.c | 16 ++++++++++++---- 2 files changed, 15 insertions(+), 4 deletions(-)
kernel/sched.c +3 -0
@@ -6331,6 +6331,9 @@ migration_call(struct notifier_block *nfb, unsigned long action, void *hcpu)break ;#endif } + +update_max_interval (); +return NOTIFY_OK ; }
kernel/sched_fair.c +12 -4
@@ -3820,6 +3820,17 @@ void select_nohz_load_balancer(int stop_tick)static DEFINE_SPINLOCK (balancing); +static unsigned long __read_mostly max_load_balance_interval =HZ /10 ; + +/* +* Scale the max load_balance interval with the number of CPUs in the system. +* This trades load-balance latency on larger machines for less cross talk. +*/ +static void update_max_interval (void ) +{ + max_load_balance_interval =HZ *num_online_cpus ()/10 ; +} +/* * It checks each scheduling domain to see if it is due to be balanced, * and initiates a balancing operation if so.
@@ -3849,10 +3860,7 @@ static void rebalance_domains(int cpu, enum cpu_idle_type idle)/* scale ms to jiffies */ interval =msecs_to_jiffies (interval); -if (unlikely (!interval)) - interval =1 ; -if (interval >HZ *num_online_cpus ()/10 ) - interval =HZ *num_online_cpus ()/10 ; + interval =clamp (interval,1UL , max_load_balance_interval); need_serialize = sd->flags &SD_SERIALIZE ;