From: Johannes Weiner <hannes@cmpxchg.org>
To: Suren Baghdasaryan <surenb@google.com>
Cc: Peter Zijlstra <peterz@infradead.org>, Tejun Heo <tj@kernel.org>,
lizefan.x@bytedance.com, Ingo Molnar <mingo@redhat.com>,
Juri Lelli <juri.lelli@redhat.com>,
Vincent Guittot <vincent.guittot@linaro.org>,
Dietmar Eggemann <dietmar.eggemann@arm.com>,
Steven Rostedt <rostedt@goodmis.org>,
Benjamin Segall <bsegall@google.com>,
mgorman@suse.de, Minchan Kim <minchan@kernel.org>,
Jonathan Corbet <corbet@lwn.net>,
bristot@redhat.com, "Paul E . McKenney" <paulmck@kernel.org>,
rdunlap@infradead.org, Andrew Morton <akpm@linux-foundation.org>,
Thomas Gleixner <tglx@linutronix.de>,
macro@orcam.me.uk, Viresh Kumar <viresh.kumar@linaro.org>,
mike.kravetz@oracle.com, linux-doc@vger.kernel.org,
LKML <linux-kernel@vger.kernel.org>,
cgroups mailinglist <cgroups@vger.kernel.org>,
kernel-team <kernel-team@android.com>
Subject: Re: [PATCH 1/1] cgroup: make per-cgroup pressure stall tracking configurable
Date: Mon, 17 May 2021 14:31:02 -0400 [thread overview]
Message-ID: <YKK2ZumDWcaGWvBj@cmpxchg.org> (raw)
In-Reply-To: <CAJuCfpEznCYhjbM+1=dMdEn1J2NVw88M+4AThD99PBKg41RgTw@mail.gmail.com>
On Sun, May 16, 2021 at 12:52:32PM -0700, Suren Baghdasaryan wrote:
> After reworking the code to add a static key I had to expand the
> #ifdef CONFIG_CGROUPS section, so I think a code refactoring below
> would make sense. It localizes config-specific code and it has the
> same exact code for CONFIG_CGROUPS=n and for
> cgroup_psi_enabled()==false. WDYT?:
>
> --- a/kernel/sched/psi.c
> +++ b/kernel/sched/psi.c
> @@ -181,6 +181,7 @@ struct psi_group psi_system = {
> };
>
> static void psi_avgs_work(struct work_struct *work);
> +static void cgroup_iterator_init(void);
>
> static void group_init(struct psi_group *group)
> {
> @@ -211,6 +212,8 @@ void __init psi_init(void)
> return;
> }
>
> + cgroup_iterator_init();
> +
> psi_period = jiffies_to_nsecs(PSI_FREQ);
> group_init(&psi_system);
> }
> @@ -742,11 +745,31 @@ static void psi_group_change(struct psi_group
> *group, int cpu,
> schedule_delayed_work(&group->avgs_work, PSI_FREQ);
> }
>
> -static struct psi_group *iterate_groups(struct task_struct *task, void **iter)
> +static inline struct psi_group *sys_group_iterator(struct task_struct *task,
> + void **iter)
> {
> + *iter = &psi_system;
> + return &psi_system;
> +}
> +
> #ifdef CONFIG_CGROUPS
> +
> +DEFINE_STATIC_KEY_FALSE(psi_cgroups_disabled);
> +
> +static void cgroup_iterator_init(void)
> +{
> + if (!cgroup_psi_enabled())
> + static_branch_enable(&psi_cgroups_disabled);
> +}
> +
> +static struct psi_group *iterate_groups(struct task_struct *task, void **iter)
> +{
> struct cgroup *cgroup = NULL;
>
> + /* Skip to psi_system if per-cgroup accounting is disabled */
> + if (static_branch_unlikely(&psi_cgroups_disabled))
> + return *iter ? NULL : sys_group_iterator(task, iter);
> +
> if (!*iter)
> cgroup = task->cgroups->dfl_cgrp;
That looks over-engineered. You have to check iter whether cgroups are
enabled or not. Pulling the jump label check up doesn't save anything,
but it ends up duplicating code.
What you had in the beginning was better, it just had the system label
in an unexpected place where it would check iter twice in a row.
The (*iter == &psi_system) check inside the cgroups branch has the
same purpose as the (*iter) check in the else branch. We could
consolidate that by pulling it up front.
If we wrap the entire cgroup iteration block into the static branch,
IMO it becomes a bit clearer as well.
How about this?
static struct psi_group *iterate_groups(struct task_struct *task, void **iter)
{
if (*iter == &psi_system)
return NULL;
#ifdef CONFIG_CGROUPS
if (!static_branch_likely(&psi_cgroups_disabled)) {
struct cgroup *cgroup = NULL;
if (!*iter)
cgroup = task->cgroups->dfl_cgrp;
else
cgroup = cgroup_parent(*iter);
if (cgroup && cgroup_parent(cgroup)) {
*iter = cgroup;
return cgroup_psi(cgroup);
}
}
#endif
*iter = &psi_system;
return &psi_system;
}
next prev parent reply other threads:[~2021-05-17 18:31 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-05-13 17:53 [PATCH 1/1] cgroup: make per-cgroup pressure stall tracking configurable Suren Baghdasaryan
2021-05-14 11:41 ` Peter Zijlstra
2021-05-14 15:54 ` Suren Baghdasaryan
2021-05-14 17:52 ` Peter Zijlstra
2021-05-14 18:20 ` Suren Baghdasaryan
2021-05-14 18:50 ` Suren Baghdasaryan
2021-05-16 19:52 ` Suren Baghdasaryan
2021-05-17 18:31 ` Johannes Weiner [this message]
2021-05-17 20:02 ` Suren Baghdasaryan
2021-05-18 2:05 ` Suren Baghdasaryan
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=YKK2ZumDWcaGWvBj@cmpxchg.org \
--to=hannes@cmpxchg.org \
--cc=akpm@linux-foundation.org \
--cc=bristot@redhat.com \
--cc=bsegall@google.com \
--cc=cgroups@vger.kernel.org \
--cc=corbet@lwn.net \
--cc=dietmar.eggemann@arm.com \
--cc=juri.lelli@redhat.com \
--cc=kernel-team@android.com \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=lizefan.x@bytedance.com \
--cc=macro@orcam.me.uk \
--cc=mgorman@suse.de \
--cc=mike.kravetz@oracle.com \
--cc=minchan@kernel.org \
--cc=mingo@redhat.com \
--cc=paulmck@kernel.org \
--cc=peterz@infradead.org \
--cc=rdunlap@infradead.org \
--cc=rostedt@goodmis.org \
--cc=surenb@google.com \
--cc=tglx@linutronix.de \
--cc=tj@kernel.org \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).