From: Luka Bai <lukafocus@icloud.com>
To: linux-mm@kvack.org
Cc: "Johannes Weiner" <hannes@cmpxchg.org>,
"Suren Baghdasaryan" <surenb@google.com>,
"Peter Ziljstra" <peterz@infradead.org>,
"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>,
"Ben Segall" <bsegall@google.com>, "Mel Gorman" <mgorman@suse.de>,
"Valentin Schneider" <vschneid@redhat.com>,
"K Prateek Nayak" <kprateek.nayak@amd.com>,
"Andrew Morton" <akpm@linux-foundation.org>,
"David Hildenbrand" <david@kernel.org>,
"Lorenzo Stoakes" <ljs@kernel.org>,
"Liam R. Howlett" <liam@infradead.org>,
"Vlastimil Babka" <vbabka@kernel.org>,
"Mike Rapoport" <rppt@kernel.org>,
"Michal Hocko" <mhocko@suse.com>, "Kees Cook" <kees@kernel.org>,
"Tejun Heo" <tj@kernel.org>, "Michal Koutný" <mkoutny@suse.com>,
linux-kernel@vger.kernel.org, cgroups@vger.kernel.org,
"Luka Bai" <lukabai@tencent.com>
Subject: [PATCH 0/6] psi: slightly improve performance of psi
Date: Tue, 12 May 2026 14:19:56 +0800 [thread overview]
Message-ID: <20260512-psi_impr-v1-0-2b7f10fdfad5@tencent.com> (raw)
PSI is useful for resource pressure monitoring. But the callbacks are
distributed among all the common calling paths, some of which are quite
performance critical. The hottest callback like psi_group_change is
called by both psi_task_switch and psi_task_change, which are parts of
task_switch, enqueue, dequeue. So the cpu usage of psi is quite
important.
We initialized a common hackbench test using the following command:
perf record --kernel-callchains -a -g hackbench -s 512 -P -g 10 -f 30 \
-l 1000 --pipe
In a machine setup with 8 cores, 16GB with two numa node(each node 8GB),
we saw a cpu usage of 4.3% for psi using the flame graph of the perf
data, which can make some observable influence to the actual workloads.
In this patchset, we did some improvement for the performance of hot
path, which slightly improves the performance for the psi. With a same
setup of 8 cores + 16GB, the cpu usage of psi becomes 3.4%, which has
a 20% improvement. In the future patches we may try to do more
adjustment to go further (Like add switches for different types of PSI
resources maybe).
Patch Details:
========
* Patch 1 moves the judgement of cpu_curr(cpu)->in_memstall from
psi_group_change outside to eliminate some repeated memory access.
* Patch 2 adds a bit variable need_psi to help judge whether we need
to do psi accouting for the cgroup. we move it and psi_flags, which
currently only has 5 bits, close to the bitfield variable in_memstall
together. This way they will be cacheline aligned together.
* Patch 3 adds a prefetch logic before actually accessing the parent
cgroups, since the parent cgroups will always be accessed in the
following step.
* Patch 4 only calls record_times when the state actually changes to
save some uncessary accesses.
* Patch 5 adds psi_group for the root cgroup to remove the uncessary
if condition.
* Patch 6 uses printk_deferred_once to replace the psi_bug variable
and moves tasks[NR_RUNNING] which is most likely to happen ahead
in the if condition.
Thanks for reading. Comments and suggestions are very welcome!
Signed-off-by: Luka Bai <lukabai@tencent.com>
---
Luka Bai (6):
psi: move curr_in_memstall out of psi_group_change
psi: reorganize the psi members for cacheline benifits
psi: use prefetch to preread the parent groupc
psi: do not call record_times when the state is not changed
psi: add psi group for the root cgroup
psi: remove psi_bug and moves checking of NR_RUNNING ahead.
include/linux/psi.h | 2 +-
include/linux/psi_types.h | 20 +------------
include/linux/sched.h | 29 ++++++++++++++++---
kernel/cgroup/cgroup.c | 3 ++
kernel/fork.c | 10 +++++++
kernel/sched/psi.c | 71 ++++++++++++++++++++++++++++++-----------------
6 files changed, 85 insertions(+), 50 deletions(-)
---
base-commit: 972c53e0ec3abfc6f5fe2cb503640710fb23cf95
change-id: 20260512-psi_impr-f543a199f39d
Best regards,
--
Luka Bai <lukabai@tencent.com>
next reply other threads:[~2026-05-12 6:20 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-05-12 6:19 Luka Bai [this message]
2026-05-12 6:19 ` [PATCH 1/6] psi: move curr_in_memstall out of psi_group_change Luka Bai
2026-05-12 6:19 ` [PATCH 2/6] psi: reorganize the psi members for cacheline benifits Luka Bai
2026-05-12 6:19 ` [PATCH 3/6] psi: use prefetch to preread the parent groupc Luka Bai
2026-05-12 6:20 ` [PATCH 4/6] psi: do not call record_times when the state is not changed Luka Bai
2026-05-12 6:20 ` [PATCH 5/6] psi: add psi group for the root cgroup Luka Bai
2026-05-12 6:20 ` [PATCH 6/6] psi: remove psi_bug and moves checking of NR_RUNNING ahead Luka Bai
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=20260512-psi_impr-v1-0-2b7f10fdfad5@tencent.com \
--to=lukafocus@icloud.com \
--cc=akpm@linux-foundation.org \
--cc=bsegall@google.com \
--cc=cgroups@vger.kernel.org \
--cc=david@kernel.org \
--cc=dietmar.eggemann@arm.com \
--cc=hannes@cmpxchg.org \
--cc=juri.lelli@redhat.com \
--cc=kees@kernel.org \
--cc=kprateek.nayak@amd.com \
--cc=liam@infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=ljs@kernel.org \
--cc=lukabai@tencent.com \
--cc=mgorman@suse.de \
--cc=mhocko@suse.com \
--cc=mingo@redhat.com \
--cc=mkoutny@suse.com \
--cc=peterz@infradead.org \
--cc=rostedt@goodmis.org \
--cc=rppt@kernel.org \
--cc=surenb@google.com \
--cc=tj@kernel.org \
--cc=vbabka@kernel.org \
--cc=vincent.guittot@linaro.org \
--cc=vschneid@redhat.com \
/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