Re: [RFC PATCH 4/5] sched: consider runnable load average in wake_affineand move_tasks

From: Alex Shi
Date: Sun Nov 18 2012 - 04:36:29 EST


On 11/18/2012 02:09 AM, Preeti U Murthy wrote:
> Hi Alex,
>
> On 11/17/2012 06:34 PM, Alex Shi wrote:
>> Except using runnable load average in background, wake_affine and
>> move_tasks is also the key functions in load balance. We need consider
>> the runnable load average in them in order to the apple to apple load
>> comparison in load balance.
>>
>> Signed-off-by: Alex Shi <alex.shi@xxxxxxxxx>
>> ---
>> kernel/sched/fair.c | 16 ++++++++++------
>> 1 files changed, 10 insertions(+), 6 deletions(-)
>>
>> @@ -4229,7 +4233,7 @@ static int move_tasks(struct lb_env *env)
>> if (throttled_lb_pair(task_group(p), env->src_cpu, env->dst_cpu))
>> goto next;
>>
>> - load = task_h_load(p);
>> + load = task_h_load(p) * p->se.avg.load_avg_contrib;
> Shouldn't the above be just load = p->se.avg.load_avg_contrib? This
> metric already has considered p->se.load.weight.task_h_load(p) returns
> the same.

Thanks for catching this bug!
but task_h_load(p) is clearly not same as p->se.load.weight when tg using.
So, it could be changed as:
+ load = task_h_load(p) * p->se.avg.runnable_avg_sum
+ / (p->se.avg.runnable_avg_period + 1);

a fixed patch is here:

----------