[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20200210130802.GG14879@hirez.programming.kicks-ass.net>
Date: Mon, 10 Feb 2020 14:08:02 +0100
From: Peter Zijlstra <peterz@...radead.org>
To: Douglas RAILLARD <douglas.raillard@....com>
Cc: linux-kernel@...r.kernel.org, rjw@...ysocki.net,
viresh.kumar@...aro.org, juri.lelli@...hat.com,
vincent.guittot@...aro.org, dietmar.eggemann@....com,
qperret@...gle.com, linux-pm@...r.kernel.org
Subject: Re: [RFC PATCH v4 4/6] sched/cpufreq: Introduce sugov_cpu_ramp_boost
On Wed, Jan 22, 2020 at 05:35:36PM +0000, Douglas RAILLARD wrote:
> +static unsigned long sugov_cpu_ramp_boost_update(struct sugov_cpu *sg_cpu)
> +{
> + struct rq *rq = cpu_rq(sg_cpu->cpu);
> + unsigned long util_est_enqueued;
> + unsigned long util_avg;
> + unsigned long boost = 0;
> +
Should we NO-OP this function when !sched_feat(UTIL_EST) ?
> + util_est_enqueued = READ_ONCE(rq->cfs.avg.util_est.enqueued);
Otherwise you're reading garbage here, no?
> + util_avg = READ_ONCE(rq->cfs.avg.util_avg);
> +
> + /*
> + * Boost when util_avg becomes higher than the previous stable
> + * knowledge of the enqueued tasks' set util, which is CPU's
> + * util_est_enqueued.
> + *
> + * We try to spot changes in the workload itself, so we want to
> + * avoid the noise of tasks being enqueued/dequeued. To do that,
> + * we only trigger boosting when the "amount of work" enqueued
> + * is stable.
> + */
> + if (util_est_enqueued == sg_cpu->util_est_enqueued &&
> + util_avg >= sg_cpu->util_avg &&
> + util_avg > util_est_enqueued)
> + boost = util_avg - util_est_enqueued;
> +
> + sg_cpu->util_est_enqueued = util_est_enqueued;
> + sg_cpu->util_avg = util_avg;
> + WRITE_ONCE(sg_cpu->ramp_boost, boost);
> + return boost;
> +}
Powered by blists - more mailing lists