From: Qi Zheng <qi.zheng@linux.dev>
To: Shakeel Butt <shakeel.butt@linux.dev>
Cc: hannes@cmpxchg.org, hughd@google.com, mhocko@suse.com,
roman.gushchin@linux.dev, muchun.song@linux.dev,
david@kernel.org, lorenzo.stoakes@oracle.com, ziy@nvidia.com,
harry.yoo@oracle.com, yosry.ahmed@linux.dev,
imran.f.khan@oracle.com, kamalesh.babulal@oracle.com,
axelrasmussen@google.com, yuanchu@google.com, weixugc@google.com,
chenridong@huaweicloud.com, mkoutny@suse.com,
akpm@linux-foundation.org, hamzamahfooz@linux.microsoft.com,
apais@linux.microsoft.com, lance.yang@linux.dev, bhe@redhat.com,
usamaarif642@gmail.com, linux-mm@kvack.org,
linux-kernel@vger.kernel.org, cgroups@vger.kernel.org,
Qi Zheng <zhengqi.arch@bytedance.com>
Subject: Re: [PATCH v5 update 30/32] mm: memcontrol: convert objcg to be per-memcg per-node type
Date: Thu, 5 Mar 2026 17:10:12 +0800 [thread overview]
Message-ID: <d65039f7-eaa9-4fa5-b03d-e184f0eb59fc@linux.dev> (raw)
In-Reply-To: <aZ-uNV1biPYLhJ48@linux.dev>
Hi Shakeel,
On 2/26/26 10:27 AM, Shakeel Butt wrote:
> On Wed, Feb 25, 2026 at 05:44:56PM +0800, Qi Zheng wrote:
>> From: Qi Zheng <zhengqi.arch@bytedance.com>
>>
>> Convert objcg to be per-memcg per-node type, so that when reparent LRU
>> folios later, we can hold the lru lock at the node level, thus avoiding
>> holding too many lru locks at once.
>>
>> Signed-off-by: Qi Zheng <zhengqi.arch@bytedance.com>
>> ---
>> changlog:
>> - fix a missing root_obj_cgroup conversion and completely delete
>> root_obj_cgroup.
>>
>> include/linux/memcontrol.h | 23 +++++------
>> include/linux/sched.h | 2 +-
>> mm/memcontrol.c | 79 +++++++++++++++++++++++---------------
>> 3 files changed, 62 insertions(+), 42 deletions(-)
>>
>> diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h
>> index 45d911dd903e7..6e11552a90618 100644
>> --- a/include/linux/memcontrol.h
>> +++ b/include/linux/memcontrol.h
>> @@ -116,6 +116,16 @@ struct mem_cgroup_per_node {
>> unsigned long lru_zone_size[MAX_NR_ZONES][NR_LRU_LISTS];
>> struct mem_cgroup_reclaim_iter iter;
>>
>> + /*
>> + * objcg is wiped out as a part of the objcg repaprenting process.
>> + * orig_objcg preserves a pointer (and a reference) to the original
>> + * objcg until the end of live of memcg.
>> + */
>> + struct obj_cgroup __rcu *objcg;
>> + struct obj_cgroup *orig_objcg;
>
> The layout of struct mem_cgroup_per_node is very performance sensitive. Please
> couple of performance benchmarks after rearranging the fields particularly the
I ran a simple test using will-it-scale page_fault1, and the results are
as follows:
tasks | baseline | with-patch | diff | %
-------------------------------------------------------------
1 | 216394 | 217537 | +1143 | +0.53%
2 | 419895 | 421510 | +1615 | +0.38%
3 | 626275 | 629533 | +3258 | +0.52%
4 | 833146 | 830481 | -2665 | -0.32%
5 | 1037597 | 1034334 | -3263 | -0.31%
6 | 1229398 | 1231656 | +2258 | +0.18%
7 | 1425040 | 1424432 | -608 | -0.04%
8 | 1603738 | 1626028 | +22290 | +1.39%
9 | 1797881 | 1803901 | +6020 | +0.33%
10 | 1976264 | 1966342 | -9922 | -0.50%
11 | 2150073 | 2159328 | +9255 | +0.43%
12 | 2304435 | 2321128 | +16693 | +0.72%
13 | 2524668 | 2538582 | +13914 | +0.55%
14 | 2763854 | 2743098 | -20756 | -0.75%
15 | 2938939 | 2961671 | +22732 | +0.77%
16 | 3152497 | 3181420 | +28923 | +0.92%
17 | 3333936 | 3370667 | +36731 | +1.10%
18 | 3531225 | 3552907 | +21682 | +0.61%
19 | 3732347 | 3769889 | +37542 | +1.01%
20 | 3917502 | 3951226 | +33724 | +0.86%
21 | 4118040 | 4134952 | +16912 | +0.41%
22 | 4268932 | 4312343 | +43411 | +1.02%
23 | 4438411 | 4484408 | +45997 | +1.04%
24 | 4618400 | 4683531 | +65131 | +1.41%
No obvious degradation observed, so I'll keep this arrangement in v6.
> above two pointers together at the start of the struct.
>
> Otherwise:
>
> Acked-by: Shakeel Butt <shakeel.butt@linux.dev>
Thanks! I'll add this tag in v6.
next prev parent reply other threads:[~2026-03-05 9:10 UTC|newest]
Thread overview: 69+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-02-25 7:48 [PATCH v5 00/32] Eliminate Dying Memory Cgroup Qi Zheng
2026-02-25 7:48 ` [PATCH v5 01/32] mm: memcontrol: remove dead code of checking parent memory cgroup Qi Zheng
2026-02-25 7:48 ` [PATCH v5 02/32] mm: workingset: use folio_lruvec() in workingset_refault() Qi Zheng
2026-02-25 7:48 ` [PATCH v5 03/32] mm: rename unlock_page_lruvec_irq and its variants Qi Zheng
2026-02-25 7:48 ` [PATCH v5 04/32] mm: vmscan: prepare for the refactoring the move_folios_to_lru() Qi Zheng
2026-02-25 7:48 ` [PATCH v5 05/32] mm: vmscan: refactor move_folios_to_lru() Qi Zheng
2026-02-25 7:48 ` [PATCH v5 06/32] mm: memcontrol: allocate object cgroup for non-kmem case Qi Zheng
2026-02-25 7:48 ` [PATCH v5 07/32] mm: memcontrol: return root object cgroup for root memory cgroup Qi Zheng
2026-02-25 7:48 ` [PATCH v5 08/32] mm: memcontrol: prevent memory cgroup release in get_mem_cgroup_from_folio() Qi Zheng
2026-02-25 7:48 ` [PATCH v5 09/32] buffer: prevent memory cgroup release in folio_alloc_buffers() Qi Zheng
2026-02-25 7:48 ` [PATCH v5 10/32] writeback: prevent memory cgroup release in writeback module Qi Zheng
2026-02-25 7:48 ` [PATCH v5 11/32] mm: memcontrol: prevent memory cgroup release in count_memcg_folio_events() Qi Zheng
2026-02-25 7:48 ` [PATCH v5 12/32] mm: page_io: prevent memory cgroup release in page_io module Qi Zheng
2026-02-25 7:52 ` [PATCH v5 13/32] mm: migrate: prevent memory cgroup release in folio_migrate_mapping() Qi Zheng
2026-02-25 7:52 ` [PATCH v5 14/32] mm: mglru: prevent memory cgroup release in mglru Qi Zheng
2026-02-25 7:52 ` [PATCH v5 15/32] mm: memcontrol: prevent memory cgroup release in mem_cgroup_swap_full() Qi Zheng
2026-02-25 7:52 ` [PATCH v5 16/32] mm: workingset: prevent memory cgroup release in lru_gen_eviction() Qi Zheng
2026-02-25 7:53 ` [PATCH v5 17/32] mm: thp: prevent memory cgroup release in folio_split_queue_lock{_irqsave}() Qi Zheng
2026-02-25 7:53 ` [PATCH v5 18/32] mm: zswap: prevent memory cgroup release in zswap_compress() Qi Zheng
2026-02-25 7:53 ` [PATCH v5 19/32] mm: workingset: prevent lruvec release in workingset_refault() Qi Zheng
2026-02-25 7:53 ` [PATCH v5 20/32] mm: zswap: prevent lruvec release in zswap_folio_swapin() Qi Zheng
2026-02-25 7:53 ` [PATCH v5 21/32] mm: swap: prevent lruvec release in lru_gen_clear_refs() Qi Zheng
2026-02-25 7:53 ` [PATCH v5 22/32] mm: workingset: prevent lruvec release in workingset_activation() Qi Zheng
2026-02-25 7:53 ` [PATCH v5 23/32] mm: do not open-code lruvec lock Qi Zheng
2026-02-25 7:53 ` [PATCH v5 24/32] mm: memcontrol: prepare for reparenting LRU pages for " Qi Zheng
2026-02-25 7:53 ` [PATCH v5 25/32] mm: vmscan: prepare for reparenting traditional LRU folios Qi Zheng
2026-02-25 7:53 ` [PATCH v5 26/32] mm: vmscan: prepare for reparenting MGLRU folios Qi Zheng
2026-02-25 7:53 ` [PATCH v5 27/32] mm: memcontrol: refactor memcg_reparent_objcgs() Qi Zheng
2026-02-25 7:53 ` [PATCH v5 28/32] mm: workingset: use lruvec_lru_size() to get the number of lru pages Qi Zheng
2026-02-25 7:53 ` [PATCH v5 29/32] mm: memcontrol: prepare for reparenting non-hierarchical stats Qi Zheng
2026-02-25 14:58 ` Yosry Ahmed
2026-02-26 0:25 ` Shakeel Butt
2026-02-26 6:42 ` Qi Zheng
2026-02-26 15:16 ` Yosry Ahmed
2026-02-26 17:02 ` Shakeel Butt
2026-02-26 17:13 ` Yosry Ahmed
2026-02-27 3:11 ` Qi Zheng
2026-02-27 6:05 ` Qi Zheng
2026-02-27 18:18 ` Yosry Ahmed
2026-02-28 3:40 ` Qi Zheng
2026-02-26 6:41 ` Qi Zheng
2026-02-26 1:41 ` Shakeel Butt
2026-02-26 6:45 ` Qi Zheng
2026-02-28 7:25 ` [PATCH v5 update " Qi Zheng
2026-02-28 19:08 ` Andrew Morton
2026-03-02 2:30 ` Qi Zheng
2026-03-02 15:53 ` Yosry Ahmed
2026-03-03 3:08 ` Qi Zheng
2026-03-03 14:56 ` Yosry Ahmed
2026-03-04 3:23 ` Qi Zheng
2026-03-04 7:56 ` Qi Zheng
2026-03-04 13:57 ` Yosry Ahmed
2026-03-04 22:03 ` Andrew Morton
2026-03-05 0:18 ` Yosry Ahmed
2026-03-05 2:51 ` Qi Zheng
2026-03-04 22:06 ` Andrew Morton
2026-03-05 2:51 ` Qi Zheng
2026-02-25 7:53 ` [PATCH v5 30/32] mm: memcontrol: convert objcg to be per-memcg per-node type Qi Zheng
2026-02-25 9:44 ` [PATCH v5 update " Qi Zheng
2026-02-26 2:27 ` Shakeel Butt
2026-02-26 6:47 ` Qi Zheng
2026-03-05 9:10 ` Qi Zheng [this message]
2026-02-26 20:05 ` Shakeel Butt
2026-02-27 6:34 ` Qi Zheng
2026-02-25 7:53 ` [PATCH v5 31/32] mm: memcontrol: eliminate the problem of dying memory cgroup for LRU folios Qi Zheng
2026-02-26 2:40 ` Shakeel Butt
2026-02-25 7:53 ` [PATCH v5 32/32] mm: lru: add VM_WARN_ON_ONCE_FOLIO to lru maintenance helpers Qi Zheng
2026-02-25 21:57 ` [PATCH v5 00/32] Eliminate Dying Memory Cgroup Andrew Morton
2026-02-27 0:24 ` SeongJae Park
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=d65039f7-eaa9-4fa5-b03d-e184f0eb59fc@linux.dev \
--to=qi.zheng@linux.dev \
--cc=akpm@linux-foundation.org \
--cc=apais@linux.microsoft.com \
--cc=axelrasmussen@google.com \
--cc=bhe@redhat.com \
--cc=cgroups@vger.kernel.org \
--cc=chenridong@huaweicloud.com \
--cc=david@kernel.org \
--cc=hamzamahfooz@linux.microsoft.com \
--cc=hannes@cmpxchg.org \
--cc=harry.yoo@oracle.com \
--cc=hughd@google.com \
--cc=imran.f.khan@oracle.com \
--cc=kamalesh.babulal@oracle.com \
--cc=lance.yang@linux.dev \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=lorenzo.stoakes@oracle.com \
--cc=mhocko@suse.com \
--cc=mkoutny@suse.com \
--cc=muchun.song@linux.dev \
--cc=roman.gushchin@linux.dev \
--cc=shakeel.butt@linux.dev \
--cc=usamaarif642@gmail.com \
--cc=weixugc@google.com \
--cc=yosry.ahmed@linux.dev \
--cc=yuanchu@google.com \
--cc=zhengqi.arch@bytedance.com \
--cc=ziy@nvidia.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