aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/user.c
diff options
context:
space:
mode:
authorPeter Williams <pwil3058@bigpond.net.au>2006-06-27 02:54:36 -0700
committerLinus Torvalds <torvalds@g5.osdl.org>2006-06-27 17:32:44 -0700
commit50ddd96917e4548b3813bfb5dd6f97f052b652bd (patch)
treef8e62672b35ebdefee048e042a54e8ceaeab0cf0 /kernel/user.c
parent2dd73a4f09beacadde827a032cf15fd8b1fa3d48 (diff)
downloadkernel_samsung_crespo-50ddd96917e4548b3813bfb5dd6f97f052b652bd.zip
kernel_samsung_crespo-50ddd96917e4548b3813bfb5dd6f97f052b652bd.tar.gz
kernel_samsung_crespo-50ddd96917e4548b3813bfb5dd6f97f052b652bd.tar.bz2
[PATCH] sched: modify move_tasks() to improve load balancing outcomes
Problem: The move_tasks() function is designed to move UP TO the amount of load it is asked to move and in doing this it skips over tasks looking for ones whose load weights are less than or equal to the remaining load to be moved. This is (in general) a good thing but it has the unfortunate result of breaking one of the original load balancer's good points: namely, that (within the limits imposed by the active/expired array model and the fact the expired is processed first) it moves high priority tasks before low priority ones and this means there's a good chance (see active/expired problem for why it's only a chance) that the highest priority task on the queue but not actually on the CPU will be moved to the other CPU where (as a high priority task) it may preempt the current task. Solution: Modify move_tasks() so that high priority tasks are not skipped when moving them will make them the highest priority task on their new run queue. Signed-off-by: Peter Williams <pwil3058@bigpond.com.au> Cc: Ingo Molnar <mingo@elte.hu> Cc: "Siddha, Suresh B" <suresh.b.siddha@intel.com> Cc: "Chen, Kenneth W" <kenneth.w.chen@intel.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'kernel/user.c')
0 files changed, 0 insertions, 0 deletions