Re: [PATCH v5 09/14] sched: Add over-utilization/tipping point indicator

From: Dietmar Eggemann
Date: Mon Aug 06 2018 - 06:08:37 EST


On 08/06/2018 10:40 AM, Vincent Guittot wrote:
On Fri, 3 Aug 2018 at 17:55, Quentin Perret <quentin.perret@xxxxxxx> wrote:

On Friday 03 Aug 2018 at 15:49:24 (+0200), Vincent Guittot wrote:
On Fri, 3 Aug 2018 at 10:18, Quentin Perret <quentin.perret@xxxxxxx> wrote:

On Friday 03 Aug 2018 at 09:48:47 (+0200), Vincent Guittot wrote:
On Thu, 2 Aug 2018 at 18:59, Quentin Perret <quentin.perret@xxxxxxx> wrote:

[...]

I think we're discussing two different things right now:
1. Should forkees go in find_energy_efficient_cpu() ?
2. Should forkees have 0 of initial util_avg when EAS is enabled ?

It's the same topic: How EAS should consider a newly created task ?

For now, we let the "performance" mode selects a CPU. This CPU will
most probably be worst CPU from a EAS pov because it's the idlest CPU
in the idlest group which is the opposite of what EAS tries to do

The current behavior is :
For every new task, the cpu selection is done assuming it's a heavy
task with the max possible load_avg, and it looks for the idlest cpu.
This means that if the system is lightly loaded, scheduler will select
most probably a idle big core.

AFAICS, task load doesn't seem to be used for find_idlest_cpu() ( find_idlest_group() and find_idlest_group_cpu()). So the forkee (SD_BALANCE_FORK) is placed independently of his task load.
Task load (task_h_load(p)) is used in wake_affine()->wake_affine_weight() but for this to be called it has to be a wakeup (SD_BALANCE_WAKE).

The utilization of this new task is then set to half of the remaining
capacity of the selected CPU which means that the idlest you are, the
biggest the task will be initialized to. This can easily be half a big
core which can be bigger than the max capacity of a little like on
hikey960. Then, util_est will keep track of this value for a while
which will make this task like a big one.

[...]