Re: [PATCH] sched/fair: Fix task utilization accountability in cpu_util_next()

From: Vincent Donnefort
Date: Mon Feb 22 2021 - 06:37:02 EST


Hi Quentin,

On Mon, Feb 22, 2021 at 10:11:03AM +0000, Quentin Perret wrote:
> Hey Vincent,
>
> On Monday 22 Feb 2021 at 09:54:01 (+0000), vincent.donnefort@xxxxxxx wrote:
> > From: Vincent Donnefort <vincent.donnefort@xxxxxxx>
> >
> > Currently, cpu_util_next() estimates the CPU utilization as follows:
> >
> > max(cpu_util + task_util,
> > cpu_util_est + task_util_est)
>
> s/task_util_est/_task_util_est
>
> This is an important difference.
>
> >
> > This is an issue when making a comparison between CPUs, as the task
> > contribution can be either:
> >
> > (1) task_util_est, on a mostly idle CPU, where cpu_util is close to 0
> > and task_util_est > cpu_util.
> > (2) task_util, on a mostly busy CPU, where cpu_util > task_util_est.
>
> I don't understand how this is an issue, this is by design with util-est
> no?
>
> Note that cpu_util_next() tries to accurately predict what cpu_util(@cpu)
> will be once @p is enqueued on @dst_cpu. There should be no policy
> decision here, we just reproduce the enqueue aggreagation -- see
> util_est_enqueue() and cpu_util().
>
> Could you please give an example where you think cpu_util_next()
> computes the wrong value?

Here's with real life numbers.

The task: util_avg=3 (1) util_est=11 (2)

pd0 (CPU-0, CPU-1, CPU-2)

cpu_util_next(CPU-0, NULL): 7
cpu_util_next(CPU-1, NULL): 3
cpu_util_next(CPU-2, NULL): 0 <- Most capacity, try to place task here.

cpu_util_next(CPU-2, task): 0 + 11 (2)


pd1 (CPU-3):

cpu_util_next(CPU-3, NULL): 77

cpu_util_next(CPU-3, task): 77 + 3 (1)


On pd0, the task contribution is 11. On pd1, it is 3. When computing the energy
deltas, pd0's is likely to be higher than pd1's, only because the task
contribution is higher for one comparison than the other.

--
Vincent

>
> Thanks,
> Quentin