Re: [Question] load balance move tasks not suitable ?

From: weiqi (C)
Date: Mon Jul 30 2018 - 09:42:47 EST


in latest linux kernel version, load-balance's detach_tasks() keeps "load/2" behavior:

"""

if (( load / 2 ) > env->imbalance)
goto next;
"""

It means a task "p", which load is 1.5 times than "env->imbalance" can move from "src_rq" to "dst_rq".
after this move, imbalance between "src_rq" and "dst_rq" may larger than before.
but if use "load*2" here, It means we can pick a task "p" , which load is half of "env->imbalance"ï and after moveï
"src_rq" and "dst_rq" is balanced.

Am I right?


å 2018/7/30 20:56, Peter Zijlstra åé:
On Mon, Jul 30, 2018 at 08:08:55PM +0800, weiqi (C) wrote:
Hi Peter,

After Commits 5d6523ebd(sched: Fix load-balance wreckage)ï
That's a _6_ year old patch... and I can barely remember last week.

The jugement whether imbalance reached changed from twice to one-half.

from

(1) if((load * 2)> rem_load_move)
goto next;

to

(2) if((load / 2)> env-> load_move)
goto next;

I'm confused about this change.

"load*2" may be more appropriate, because if a task whose load more than
env->imbalance is moved from high load cpu to low load cpu,

will make more imbalance.
It basically goes back to what it was before (see 367456c), in that
patch I (inadvertently) replaced (load.weight >> 1) with (load * 2)
instead of (load / 2).

I'm not entirely sure I can explain that logic at this time. Doing
software archeology on it might clarify where it came from.
.