lkml.org 
[lkml]   [2015]   [Jul]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    SubjectRe: [RFCv5 PATCH 44/46] sched/fair: jump to max OPP when crossing UP threshold
    Date
    Quoting Morten Rasmussen (2015-07-07 11:24:27)
    > From: Juri Lelli <juri.lelli@arm.com>
    >
    > Since the true utilization of a long running task is not detectable while
    > it is running and might be bigger than the current cpu capacity, create the
    > maximum cpu capacity head room by requesting the maximum cpu capacity once
    > the cpu usage plus the capacity margin exceeds the current capacity. This
    > is also done to try to harm the performance of a task the least.
    >
    > cc: Ingo Molnar <mingo@redhat.com>
    > cc: Peter Zijlstra <peterz@infradead.org>
    >
    > Signed-off-by: Juri Lelli <juri.lelli@arm.com>
    > ---
    > kernel/sched/fair.c | 19 +++++++++++++++++++
    > 1 file changed, 19 insertions(+)
    >
    > diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
    > index 323331f..c2d6de4 100644
    > --- a/kernel/sched/fair.c
    > +++ b/kernel/sched/fair.c
    > @@ -8586,6 +8586,25 @@ static void task_tick_fair(struct rq *rq, struct task_struct *curr, int queued)
    >
    > if (!rq->rd->overutilized && cpu_overutilized(task_cpu(curr)))
    > rq->rd->overutilized = true;
    > +
    > + /*
    > + * To make free room for a task that is building up its "real"
    > + * utilization and to harm its performance the least, request a
    > + * jump to max OPP as soon as get_cpu_usage() crosses the UP
    > + * threshold. The UP threshold is built relative to the current
    > + * capacity (OPP), by using same margin used to tell if a cpu
    > + * is overutilized (capacity_margin).
    > + */
    > + if (sched_energy_freq()) {
    > + int cpu = cpu_of(rq);
    > + unsigned long capacity_orig = capacity_orig_of(cpu);
    > + unsigned long capacity_curr = capacity_curr_of(cpu);
    > +
    > + if (capacity_curr < capacity_orig &&
    > + (capacity_curr * SCHED_LOAD_SCALE) <
    > + (get_cpu_usage(cpu) * capacity_margin))

    As I stated in a previous patch, I wonder if the multiplications can be
    removed by assuming equivalent units for load and capacity and simply
    adding the 256 (25%) margin to the valued returned by get_cpu_usage?

    Regards,
    Mike

    > + cpufreq_sched_set_cap(cpu, capacity_orig);
    > + }
    > }
    >
    > /*
    > --
    > 1.9.1
    >
    > --
    > To unsubscribe from this list: send the line "unsubscribe linux-pm" in
    > the body of a message to majordomo@vger.kernel.org
    > More majordomo info at http://vger.kernel.org/majordomo-info.html


    \
     
     \ /
      Last update: 2015-07-08 19:01    [W:4.220 / U:0.408 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site