* [to-be-updated] mm-memcg-skip-the-rcu-lock-when-the-memcg-is-not-dying.patch removed from -mm tree
@ 2026-09-17 5:02 Andrew Morton
0 siblings, 0 replies; only message in thread
From: Andrew Morton @ 2026-09-17 5:02 UTC (permalink / raw)
To: mm-commits, zhuhui, akpm
The quilt patch titled
Subject: mm: memcg: skip the RCU lock when the memcg is not dying
has been removed from the -mm tree. Its filename was
mm-memcg-skip-the-rcu-lock-when-the-memcg-is-not-dying.patch
This patch was dropped because an updated version will be issued
------------------------------------------------------
From: Hui Zhu <zhuhui@kylinos.cn>
Subject: mm: memcg: skip the RCU lock when the memcg is not dying
Date: Fri, 4 Sep 2026 17:45:56 +0800
get_non_dying_memcg_start() takes rcu_read_lock() on every stat update,
but the lock only protects the upward walk to a non-dying ancestor, which
happens solely while a memcg is being offlined. The dying check itself
reads the CSS_DYING flag of a memcg the caller already holds a reference
to, so it is safe without the lock.
Check memcg_is_dying() first and return immediately when the memcg is
alive, taking the RCU lock only on the rare dying path. On an anon
fault/charge churn workload in a memcg this recovers the ~0.6% overhead
added by the previous patch (4368077 vs 4343159 pages/s before, back to
~4377000 pages/s after).
Link: https://lore.kernel.org/0db657472c5278b2e2b87fbca7590b47ca520303.1788514750.git.zhuhui@kylinos.cn
Signed-off-by: Hui Zhu <zhuhui@kylinos.cn>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Acked-by: Shakeel Butt <shakeel.butt@linux.dev>
Cc: Axel Rasmussen <axelrasmussen@google.com>
Cc: Barry Song <baohua@kernel.org>
Cc: David Hildenbrand <david@kernel.org>
Cc: Johannes Weiner <hannes@cmpxchg.org>
Cc: Kairui Song <kasong@tencent.com>
Cc: Lorenzo Stoakes <ljs@kernel.org>
Cc: Michal Hocko <mhocko@kernel.org>
Cc: Muchun Song <muchun.song@linux.dev>
Cc: Roman Gushchin <roman.gushchin@linux.dev>
Cc: Wei Xu <weixugc@google.com>
Cc: Yuanchu Xie <yuanchu@google.com>
---
mm/memcontrol.c | 14 ++++++++++++++
1 file changed, 14 insertions(+)
--- a/mm/memcontrol.c~mm-memcg-skip-the-rcu-lock-when-the-memcg-is-not-dying
+++ a/mm/memcontrol.c
@@ -881,6 +881,17 @@ static long memcg_state_val_in_pages(int
static inline struct mem_cgroup *
get_non_dying_memcg_start(struct mem_cgroup *memcg, bool *rcu_locked)
{
+ /*
+ * Fast path: the caller holds a reference to @memcg, so reading
+ * its CSS_DYING flag without the RCU lock is safe. The RCU lock
+ * is only needed to walk up to a non-dying ancestor, which
+ * happens only while a memcg is actually being offlined.
+ */
+ if (!memcg_is_dying(memcg)) {
+ *rcu_locked = false;
+ return memcg;
+ }
+
rcu_read_lock();
*rcu_locked = true;
@@ -892,6 +903,9 @@ get_non_dying_memcg_start(struct mem_cgr
static inline void get_non_dying_memcg_end(bool rcu_locked)
{
+ if (!rcu_locked)
+ return;
+
rcu_read_unlock();
}
_
Patches currently in -mm which might be from zhuhui@kylinos.cn are
mm-vmstat-annotate-data-race-for-per-cpu-pageset-fields.patch
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2026-09-17 5:02 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-09-17 5:02 [to-be-updated] mm-memcg-skip-the-rcu-lock-when-the-memcg-is-not-dying.patch removed from -mm tree Andrew Morton
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.