From: Patrick Bellasi <patrick.bellasi@arm.com>
To: Dietmar Eggemann <dietmar.eggemann@arm.com>
Cc: linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org,
Ingo Molnar <mingo@redhat.com>,
Peter Zijlstra <peterz@infradead.org>, Tejun Heo <tj@kernel.org>,
"Rafael J . Wysocki" <rafael.j.wysocki@intel.com>,
Viresh Kumar <viresh.kumar@linaro.org>,
Vincent Guittot <vincent.guittot@linaro.org>,
Paul Turner <pjt@google.com>,
Morten Rasmussen <morten.rasmussen@arm.com>,
Juri Lelli <juri.lelli@redhat.com>, Todd Kjos <tkjos@google.com>,
Joel Fernandes <joelaf@google.com>,
Steve Muckle <smuckle@google.com>,
Suren Baghdasaryan <surenb@google.com>
Subject: Re: [PATCH v3 03/14] sched/core: uclamp: add CPU's clamp groups accounting
Date: Tue, 14 Aug 2018 17:49:05 +0100 [thread overview]
Message-ID: <20180814164905.GG2605@e110439-lin> (raw)
In-Reply-To: <a24def9b-57bb-d072-5064-0421076d2e43@arm.com>
Hi Dietmar!
On 14-Aug 17:44, Dietmar Eggemann wrote:
> On 08/06/2018 06:39 PM, Patrick Bellasi wrote:
[...]
> >+/**
> >+ * uclamp_cpu_put_id(): decrease reference count for a clamp group on a CPU
> >+ * @p: the task being dequeued from a CPU
> >+ * @cpu: the CPU from where the clamp group has to be released
> >+ * @clamp_id: the utilization clamp (e.g. min or max utilization) to release
> >+ *
> >+ * When a task is dequeued from a CPU's RQ, the CPU's clamp group reference
> >+ * counted by the task is decreased.
> >+ * If this was the last task defining the current max clamp group, then the
> >+ * CPU clamping is updated to find the new max for the specified clamp
> >+ * index.
> >+ */
> >+static inline void uclamp_cpu_put_id(struct task_struct *p,
> >+ struct rq *rq, int clamp_id)
> >+{
> >+ struct uclamp_group *uc_grp;
> >+ struct uclamp_cpu *uc_cpu;
> >+ unsigned int clamp_value;
> >+ int group_id;
> >+
> >+ /* No task specific clamp values: nothing to do */
> >+ group_id = p->uclamp[clamp_id].group_id;
> >+ if (group_id == UCLAMP_NOT_VALID)
> >+ return;
> >+
> >+ /* Decrement the task's reference counted group index */
> >+ uc_grp = &rq->uclamp.group[clamp_id][0];
> >+#ifdef SCHED_DEBUG
> >+ if (unlikely(uc_grp[group_id].tasks == 0)) {
> >+ WARN(1, "invalid CPU[%d] clamp group [%d:%d] refcount\n",
> >+ cpu_of(rq), clamp_id, group_id);
> >+ uc_grp[group_id].tasks = 1;
> >+ }
> >+#endif
>
> This one indicates that there are some holes in your ref-counting.
Not really, this has been added not because I've detected a refcount
issue... but because it was suggested as a possible safety check in a
previous code review comment:
https://lore.kernel.org/lkml/20180720151156.GA31421@e110439-lin/
> It's probably easier to debug that there is still a task but the
> uc_grp[group_id].tasks value == 0 (A). I assume the other problem exists as
> well, i.e. last task and uc_grp[group_id].tasks > 1 (B)?
>
> You have uclamp_cpu_[get/put](_id)() in [enqueue/dequeue]_task.
>
> Patch 04/14 introduces its use in uclamp_task_update_active().
>
> Do you know why (A) (and (B)) are happening?
I've never saw that warning in my tests so far so, again, the warning
is there just to support testing/debugging when refcounting code
is/will be touched in the future. That's also the reason why is
SCHED_DEBUG protected.
> >+ uc_grp[group_id].tasks -= 1;
> >+
> >+ /* If this is not the last task, no updates are required */
> >+ if (uc_grp[group_id].tasks > 0)
> >+ return;
> >+
> >+ /*
> >+ * Update the CPU only if this was the last task of the group
> >+ * defining the current clamp value.
> >+ */
> >+ uc_cpu = &rq->uclamp;
> >+ clamp_value = uc_grp[group_id].value;
> >+ if (clamp_value >= uc_cpu->value[clamp_id])
>
> 'clamp_value > uc_cpu->value[clamp_id]' should indicate another
> inconsistency in the uclamp machinery, right?
Here you right, I would say that it should always be:
clamp_value <= uc_cpu->value[clamp_id]
since this matches the update done at the end of uclamp_cpu_get_id():
if (uc_cpu->value[clamp_id] < clamp_value)
uc_cpu->value[clamp_id] = clamp_value;
Perhaps we can add another safety check here, similar to the one
above, to have something like:
clamp_value = uc_grp[group_id].value;
#ifdef SCHED_DEBUG
if (unlikely(clamp_value > uc_cpu->value[clamp_id])) {
WARN(1, "invalid CPU[%d] clamp group [%d:%d] value\n",
cpu_of(rq), clamp_id, group_id);
#endif
if (clamp_value == uc_cpu->value[clamp_id])
uclamp_cpu_update(rq, clamp_id);
--
#include <best/regards.h>
Patrick Bellasi
next prev parent reply other threads:[~2018-08-14 16:49 UTC|newest]
Thread overview: 83+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-08-06 16:39 [PATCH v3 00/14] Add utilization clamping support Patrick Bellasi
2018-08-06 16:39 ` Patrick Bellasi
2018-08-06 16:39 ` [PATCH v3 01/14] sched/core: uclamp: extend sched_setattr to support utilization clamping Patrick Bellasi
2018-08-06 16:50 ` Randy Dunlap
2018-08-09 8:39 ` Patrick Bellasi
2018-08-09 15:20 ` Randy Dunlap
2018-08-07 9:59 ` Juri Lelli
2018-08-13 12:14 ` Patrick Bellasi
2018-08-13 12:27 ` Juri Lelli
2018-08-07 12:35 ` Juri Lelli
2018-08-09 9:14 ` Patrick Bellasi
2018-08-09 9:50 ` Juri Lelli
2018-08-09 15:23 ` Patrick Bellasi
2018-08-10 7:50 ` Juri Lelli
2018-08-17 10:34 ` Quentin Perret
2018-08-17 10:57 ` Patrick Bellasi
2018-08-17 11:14 ` Quentin Perret
2018-08-06 16:39 ` [PATCH v3 02/14] sched/core: uclamp: map TASK's clamp values into CPU's clamp groups Patrick Bellasi
2018-08-14 11:25 ` Pavan Kondeti
2018-08-14 15:21 ` Patrick Bellasi
2018-08-06 16:39 ` [PATCH v3 03/14] sched/core: uclamp: add CPU's clamp groups accounting Patrick Bellasi
2018-08-14 15:44 ` Dietmar Eggemann
2018-08-14 16:49 ` Patrick Bellasi [this message]
2018-08-15 9:37 ` Dietmar Eggemann
2018-08-15 10:54 ` Patrick Bellasi
2018-08-15 10:59 ` Dietmar Eggemann
2018-08-16 13:32 ` Patrick Bellasi
2018-08-16 13:37 ` Quentin Perret
2018-08-16 13:45 ` Dietmar Eggemann
2018-08-16 14:21 ` Quentin Perret
2018-08-16 15:00 ` Dietmar Eggemann
2018-08-17 11:04 ` Patrick Bellasi
2018-08-06 16:39 ` [PATCH v3 04/14] sched/core: uclamp: update CPU's refcount on clamp changes Patrick Bellasi
2018-08-15 15:02 ` Dietmar Eggemann
2018-08-16 13:22 ` Patrick Bellasi
2018-08-06 16:39 ` [PATCH v3 05/14] sched/cpufreq: uclamp: add utilization clamping for FAIR tasks Patrick Bellasi
2018-08-08 13:18 ` Vincent Guittot
2018-08-09 15:30 ` Patrick Bellasi
2018-08-15 15:30 ` Dietmar Eggemann
2018-08-16 13:53 ` Patrick Bellasi
2018-08-06 16:39 ` [PATCH v3 06/14] sched/cpufreq: uclamp: add utilization clamping for RT tasks Patrick Bellasi
2018-08-07 13:26 ` Juri Lelli
2018-08-09 15:34 ` Patrick Bellasi
2018-08-09 16:03 ` Vincent Guittot
2018-08-13 10:12 ` Patrick Bellasi
2018-08-13 10:50 ` Juri Lelli
2018-08-13 12:07 ` Vincent Guittot
2018-08-13 12:09 ` Vincent Guittot
2018-08-13 12:49 ` Patrick Bellasi
2018-08-13 14:06 ` Vincent Guittot
2018-08-13 15:01 ` Patrick Bellasi
2018-08-16 10:34 ` Dietmar Eggemann
2018-08-16 13:40 ` Patrick Bellasi
2018-08-07 13:54 ` Quentin Perret
2018-08-09 15:41 ` Patrick Bellasi
2018-08-09 15:55 ` Quentin Perret
2018-08-13 10:17 ` Patrick Bellasi
2018-08-06 16:39 ` [PATCH v3 07/14] sched/core: uclamp: enforce last task UCLAMP_MAX Patrick Bellasi
2018-08-16 15:43 ` Dietmar Eggemann
2018-08-16 16:47 ` Patrick Bellasi
2018-08-16 17:10 ` Dietmar Eggemann
2018-08-16 17:27 ` Patrick Bellasi
2018-08-16 17:20 ` Patrick Bellasi
2018-08-06 16:39 ` [PATCH v3 08/14] sched/core: uclamp: extend cpu's cgroup controller Patrick Bellasi
2018-08-17 12:21 ` Dietmar Eggemann
2018-08-17 14:24 ` Patrick Bellasi
2018-08-06 16:39 ` [PATCH v3 09/14] sched/core: uclamp: propagate parent clamps Patrick Bellasi
2018-08-16 9:09 ` Pavan Kondeti
2018-08-16 14:07 ` Patrick Bellasi
2018-08-17 13:43 ` Dietmar Eggemann
2018-08-17 14:45 ` Patrick Bellasi
2018-08-17 15:50 ` Dietmar Eggemann
2018-08-20 10:01 ` Dietmar Eggemann
2018-08-20 12:28 ` Patrick Bellasi
2018-08-06 16:39 ` [PATCH v3 10/14] sched/core: uclamp: map TG's clamp values into CPU's clamp groups Patrick Bellasi
2018-08-06 16:39 ` [PATCH v3 11/14] sched/core: uclamp: use TG's clamps to restrict Task's clamps Patrick Bellasi
2018-08-06 16:39 ` [PATCH v3 12/14] sched/core: uclamp: add system default clamps Patrick Bellasi
2018-08-16 9:13 ` Pavan Kondeti
2018-08-16 14:37 ` Patrick Bellasi
2018-08-20 10:18 ` Dietmar Eggemann
2018-08-20 12:27 ` Patrick Bellasi
2018-08-06 16:39 ` [PATCH v3 13/14] sched/core: uclamp: update CPU's refcount on TG's clamp changes Patrick Bellasi
2018-08-06 16:39 ` [PATCH v3 14/14] sched/core: uclamp: use percentage clamp values Patrick Bellasi
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20180814164905.GG2605@e110439-lin \
--to=patrick.bellasi@arm.com \
--cc=dietmar.eggemann@arm.com \
--cc=joelaf@google.com \
--cc=juri.lelli@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=morten.rasmussen@arm.com \
--cc=peterz@infradead.org \
--cc=pjt@google.com \
--cc=rafael.j.wysocki@intel.com \
--cc=smuckle@google.com \
--cc=surenb@google.com \
--cc=tj@kernel.org \
--cc=tkjos@google.com \
--cc=vincent.guittot@linaro.org \
--cc=viresh.kumar@linaro.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.