Re: [RFCv7 PATCH 01/10] sched: Compute cpu capacity available at current frequency

From: Rafael J. Wysocki
Date: Mon Feb 22 2016 - 20:41:27 EST


On Tue, Feb 23, 2016 at 2:22 AM, Steve Muckle <steve.muckle@xxxxxxxxxx> wrote:
> From: Morten Rasmussen <morten.rasmussen@xxxxxxx>
>
> capacity_orig_of() returns the max available compute capacity of a cpu.
> For scale-invariant utilization tracking and energy-aware scheduling
> decisions it is useful to know the compute capacity available at the
> current OPP of a cpu.
>
> cc: Ingo Molnar <mingo@xxxxxxxxxx>
> cc: Peter Zijlstra <peterz@xxxxxxxxxxxxx>
> Signed-off-by: Morten Rasmussen <morten.rasmussen@xxxxxxx>
> Signed-off-by: Steve Muckle <smuckle@xxxxxxxxxx>
> ---
> kernel/sched/fair.c | 11 +++++++++++
> 1 file changed, 11 insertions(+)
>
> diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
> index 7ce24a4..3437e01 100644
> --- a/kernel/sched/fair.c
> +++ b/kernel/sched/fair.c
> @@ -4821,6 +4821,17 @@ static long effective_load(struct task_group *tg, int cpu, long wl, long wg)
> #endif
>
> /*
> + * Returns the current capacity of cpu after applying both
> + * cpu and freq scaling.
> + */
> +static unsigned long capacity_curr_of(int cpu)
> +{
> + return cpu_rq(cpu)->cpu_capacity_orig *
> + arch_scale_freq_capacity(NULL, cpu)

What about architectures that don't have this?

Why is that an architecture feature?

I can easily imagine two x86 platforms using different
scale_freq_capacity(), for example.

> + >> SCHED_CAPACITY_SHIFT;
> +}
> +
> +/*
> * Detect M:N waker/wakee relationships via a switching-frequency heuristic.
> * A waker of many should wake a different task than the one last awakened
> * at a frequency roughly N times higher than one of its wakees. In order
> --


Thanks,
Rafael