Re: [PATCH] Load balancing problem in 2.6.2-mm1

Nick Piggin
2004-02-06T22:40:44Z

Rick Lindsley wrote:

> We also shouldn't need load_diff, because if (avg_load <= this_load)
> then imbalance will be zero, so I'll fix that up.
>
>Are we sure imbalance will be zero? I think we still need that. We can
>turn it into a single C statement if we want to be clever but what you
>save in temporary variable we'd better replace in comments to make the
>cleverness plain. We need there to be no "negative" numbers in the
>min() statement in case max-avg is non-zero but avg-this is "negative".
>
>Imagine loads of
>
> cpu0 0
> cpu1 0
> cpu2 3
> cpu3 2
> cpu4 0
>
>and we're running on cpu3.
>
> max_load=3
> avg_load=1
> this_load=2
>
>min(max-avg, avg-this) will be min(3-1,1-2) or two, and we'll choose to
>try to pull two to cpu3 instead of just leaving it alone which is the
>right thing to do.
>
>

No you definitely still need the test... this is what I mean:

if (avg_load > this_load)
*imbalance = min(max_load - avg_load, avg_load - this_load);
else
*imbalance = 0;