Re: [patch v5 14/15] sched: power aware load balance

Preeti U Murthy
2013-03-22T05:16:00Z

Hi,

On 03/22/2013 07:00 AM, Alex Shi wrote:
> On 03/21/2013 06:27 PM, Preeti U Murthy wrote:
>>>> did you close all of background system services?
>>>> In theory the rq->avg.runnable_avg_sum should be zero if there is no
>>>> task a bit long, otherwise there are some bugs in kernel.
>> Could you explain why rq->avg.runnable_avg_sum should be zero? What if
>> some kernel thread ran on this run queue and is now finished? Its
>> utilisation would be say x.How would that ever drop to 0,even if nothing
>> ran on it later?
>
> the value get from decay_load():
> sa->runnable_avg_sum = decay_load(sa->runnable_avg_sum,
> in decay_load it is possible to be set zero.

Yes you are right, it is possible to be set to 0, but after a very long
time, to be more precise, nearly 2 seconds. If you look at decay_load(),
if the period between last update and now has crossed (32*63),only then
will the runnable_avg_sum become 0, else it will simply decay.

This means that for nearly 2seconds,consolidation of loads may not be
possible even after the runqueues have finished executing tasks running
on them.

The exact experiment that I performed was running ebizzy, with just two
threads. My setup was 2 socket,2 cores each,4 threads each core. So a 16
logical cpu machine.When I begin running ebizzy with balance policy, the
2 threads of ebizzy are found one on each socket, while I would expect
them to be on the same socket. All other cpus, except the ones running
ebizzy threads are idle and not running anything on either socket.
I am not running any other processes.

You could run a similar experiment and let me know if you see otherwise.
I am at a loss to understand why else would such a spreading of load
occur, if not for the rq->util not becoming 0 quickly,when it is not
running anything. I have used trace_printks to keep track of runqueue
util of those runqueues not running anything after maybe some initial
load and it does not become 0 till the end of the run.

Regards
Preeti U Murthy

>
> and /proc/sched_debug also approve this:
>
> .tg_runnable_contrib : 0
> .tg->runnable_avg : 50
> .avg->runnable_avg_sum : 0
> .avg->runnable_avg_period : 47507
>
>