lkml.org 
[lkml]   [2018]   [May]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH v5 03/10] cpufreq/schedutil: add rt utilization tracking
    On 25-May 15:12, Vincent Guittot wrote:
    > Add both cfs and rt utilization when selecting an OPP for cfs tasks as rt
    > can preempt and steal cfs's running time.
    >
    > Signed-off-by: Vincent Guittot <vincent.guittot@linaro.org>
    > ---
    > kernel/sched/cpufreq_schedutil.c | 14 +++++++++++---
    > 1 file changed, 11 insertions(+), 3 deletions(-)
    >
    > diff --git a/kernel/sched/cpufreq_schedutil.c b/kernel/sched/cpufreq_schedutil.c
    > index 28592b6..a84b5a5 100644
    > --- a/kernel/sched/cpufreq_schedutil.c
    > +++ b/kernel/sched/cpufreq_schedutil.c
    > @@ -56,6 +56,7 @@ struct sugov_cpu {
    > /* The fields below are only needed when sharing a policy: */
    > unsigned long util_cfs;
    > unsigned long util_dl;
    > + unsigned long util_rt;
    > unsigned long max;
    >
    > /* The field below is for single-CPU policies only: */
    > @@ -178,14 +179,21 @@ static void sugov_get_util(struct sugov_cpu *sg_cpu)
    > sg_cpu->max = arch_scale_cpu_capacity(NULL, sg_cpu->cpu);
    > sg_cpu->util_cfs = cpu_util_cfs(rq);
    > sg_cpu->util_dl = cpu_util_dl(rq);
    > + sg_cpu->util_rt = cpu_util_rt(rq);
    > }
    >
    > static unsigned long sugov_aggregate_util(struct sugov_cpu *sg_cpu)
    > {
    > struct rq *rq = cpu_rq(sg_cpu->cpu);
    > + unsigned long util;
    >
    > - if (rq->rt.rt_nr_running)
    > - return sg_cpu->max;
    > + if (rq->rt.rt_nr_running) {
    > + util = sg_cpu->max;

    Why not just adding the following lines while keeping the return in
    for the rq->rt.rt_nr_running case?

    > + } else {
    > + util = sg_cpu->util_dl;
    > + util += sg_cpu->util_cfs;
    > + util += sg_cpu->util_rt;
    > + }
    >
    > /*
    > * Utilization required by DEADLINE must always be granted while, for
    > @@ -197,7 +205,7 @@ static unsigned long sugov_aggregate_util(struct sugov_cpu *sg_cpu)
    > * util_cfs + util_dl as requested freq. However, cpufreq is not yet
    > * ready for such an interface. So, we only do the latter for now.
    > */
    > - return min(sg_cpu->max, (sg_cpu->util_dl + sg_cpu->util_cfs));
    > + return min(sg_cpu->max, util);

    ... for the rq->rt.rt_nr_running case we don't really need to min
    clamp util = sg_cpu->max with itself...

    > }
    >
    > static void sugov_set_iowait_boost(struct sugov_cpu *sg_cpu, u64 time, unsigned int flags)
    > --
    > 2.7.4
    >

    --
    #include <best/regards.h>

    Patrick Bellasi

    \
     
     \ /
      Last update: 2018-05-30 11:41    [W:4.114 / U:0.544 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site