lkml.org 
[lkml]   [2018]   [Sep]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    SubjectRe: [PATCH v7 02/14] sched/cpufreq: Prepare schedutil for Energy Aware Scheduling
    Hi Rafael,

    Very sorry for the late reply ...

    On Tuesday 18 Sep 2018 at 23:33:22 (+0200), Rafael J. Wysocki wrote:
    [...]
    > The new "type" argument should be documented.
    >
    > Also IMO using the special enum for it is quite confusing, because you
    > ever only check one value from it directly. What would be wrong with
    > using a plain "bool" instead?

    So, this part of the code was originally proposed by Peter. I basically
    took it from the following message (hence the Suggested-by) which was
    fine by me:

    https://lore.kernel.org/lkml/20180709120138.GQ2494@hirez.programming.kicks-ass.net/

    Also, one of the things that has been mentioned during reviews was that
    other clients (such as cpuidle, IIRC) could potentially be interested
    in a 'global' cpu util value. And since those clients might have
    different needs than EAS or sugov, they might need a new entry in the
    enum.

    So that's probably the main argument for the enum, it is easy to extend.

    [...]
    > > +static unsigned long sugov_get_util(struct sugov_cpu *sg_cpu)
    > > +{
    > > + struct rq *rq = cpu_rq(sg_cpu->cpu);
    > > + unsigned long util = cpu_util_cfs(rq);
    > > +
    > > + sg_cpu->max = arch_scale_cpu_capacity(NULL, sg_cpu->cpu);
    > > + sg_cpu->bw_dl = cpu_bw_dl(rq);
    > > +
    > > + return schedutil_freq_util(sg_cpu->cpu, util, FREQUENCY_UTIL);
    >
    > If you add a "max" argument to schedutil_freq_util(), you can avoid
    > the second (and arguably redundant) evaluation of
    > arch_scale_cpu_capacity() in there.

    OK

    [...]
    > > +enum schedutil_type {
    > > + FREQUENCY_UTIL,
    > > + ENERGY_UTIL,
    > > +};
    >
    > As I said above, I would just use "bool" instead of this new enum (it
    > has two values too) or the new type needs to be documented.

    As I said above, the enum has the good side of being easier to extend.
    So, if we care about that, I guess I'd rather add a doc for the new
    type.

    > > +
    > > #ifdef CONFIG_CPU_FREQ_GOV_SCHEDUTIL
    > > +unsigned long schedutil_freq_util(int cpu, unsigned long util_cfs,
    > > + enum schedutil_type type);
    > > +
    > > static inline unsigned long cpu_bw_dl(struct rq *rq)
    > > {
    > > return (rq->dl.running_bw * SCHED_CAPACITY_SCALE) >> BW_SHIFT;
    > > @@ -2199,6 +2207,12 @@ static inline unsigned long cpu_util_rt(struct rq *rq)
    > > {
    > > return READ_ONCE(rq->avg_rt.util_avg);
    > > }
    > > +#else /* CONFIG_CPU_FREQ_GOV_SCHEDUTIL */
    > > +static inline unsigned long schedutil_freq_util(int cpu, unsigned long util,
    > > + enum schedutil_type type)
    > > +{
    > > + return util;
    > > +}
    > > #endif
    >
    > And I would add a wrapper around schedutil_freq_util(), called say
    > schedutil_energy_util(), that would pass a specific value as the
    > "type".

    OK, that's fine by me.

    Other than that, do you think these changes could be done later ? Or do
    you see that as mandatory before the patches can be picked up ?

    Thanks,
    Quentin

    \
     
     \ /
      Last update: 2018-09-27 14:18    [W:3.124 / U:0.056 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site