From: Harry Yoo <harry.yoo@oracle.com>
To: akpm@linux-foundation.org, vbabka@suse.cz
Cc: andreyknvl@gmail.com, cl@gentwo.org, dvyukov@google.com,
glider@google.com, hannes@cmpxchg.org, linux-mm@kvack.org,
mhocko@kernel.org, muchun.song@linux.dev, rientjes@google.com,
roman.gushchin@linux.dev, ryabinin.a.a@gmail.com,
shakeel.butt@linux.dev, surenb@google.com,
vincenzo.frascino@arm.com, yeoreum.yun@arm.com, tytso@mit.edu,
adilger.kernel@dilger.ca, linux-ext4@vger.kernel.org,
linux-kernel@vger.kernel.org, cgroups@vger.kernel.org,
hao.li@linux.dev
Subject: Re: [PATCH V5 0/8] mm/slab: reduce slab accounting memory overhead by allocating slabobj_ext metadata within unsed slab space
Date: Mon, 5 Jan 2026 17:05:23 +0900 [thread overview]
Message-ID: <aVtww_FMnDX7o66r@hyeyoo> (raw)
In-Reply-To: <20260105080230.13171-1-harry.yoo@oracle.com>
On Mon, Jan 05, 2026 at 05:02:22PM +0900, Harry Yoo wrote:
> Happy new year!
>
> V4: https://lore.kernel.org/linux-mm/20251027122847.320924-1-harry.yoo@oracle.com
Actually, that's RFC V3.
V4: https://lore.kernel.org/linux-mm/20251222110843.980347-1-harry.yoo@oracle.com/
--
Cheers,
Harry / Hyeonggon
> V4 -> V5:
> - Patch 4: Fixed returning false when the return type is unsigned long
> - Patch 7: Fixed incorrect calculation of slabobj_ext offset (Thanks Hao!)
>
> When CONFIG_MEMCG and CONFIG_MEM_ALLOC_PROFILING are enabled,
> the kernel allocates two pointers per object: one for the memory cgroup
> (actually, obj_cgroup) to which it belongs, and another for the code
> location that requested the allocation.
>
> In two special cases, this overhead can be eliminated by allocating
> slabobj_ext metadata from unused space within a slab:
>
> Case 1. The "leftover" space after the last slab object is larger than
> the size of an array of slabobj_ext.
>
> Case 2. The per-object alignment padding is larger than
> sizeof(struct slabobj_ext).
>
> For these two cases, one or two pointers can be saved per slab object.
> Examples: ext4 inode cache (case 1) and xfs inode cache (case 2).
> That's approximately 0.7-0.8% (memcg) or 1.5-1.6% (memcg + mem profiling)
> of the total inode cache size.
>
> Implementing case 2 is not straightforward, because the existing code
> assumes that slab->obj_exts is an array of slabobj_ext, while case 2
> breaks the assumption.
>
> As suggested by Vlastimil, abstract access to individual slabobj_ext
> metadata via a new helper named slab_obj_ext():
>
> static inline struct slabobj_ext *slab_obj_ext(struct slab *slab,
> unsigned long obj_exts,
> unsigned int index)
> {
> return (struct slabobj_ext *)(obj_exts + slab_get_stride(slab) * index);
> }
>
> In the normal case (including case 1), slab->obj_exts points to an array
> of slabobj_ext, and the stride is sizeof(struct slabobj_ext).
>
> In case 2, the stride is s->size and
> slab->obj_exts = slab_address(slab) + s->red_left_pad + (offset of slabobj_ext)
>
> With this approach, the memcg charging fastpath doesn't need to care the
> storage method of slabobj_ext.
>
> Harry Yoo (8):
> mm/slab: use unsigned long for orig_size to ensure proper metadata
> align
> mm/slab: allow specifying free pointer offset when using constructor
> ext4: specify the free pointer offset for ext4_inode_cache
> mm/slab: abstract slabobj_ext access via new slab_obj_ext() helper
> mm/slab: use stride to access slabobj_ext
> mm/memcontrol,alloc_tag: handle slabobj_ext access under KASAN poison
> mm/slab: save memory by allocating slabobj_ext array from leftover
> mm/slab: place slabobj_ext metadata in unused space within s->size
>
> fs/ext4/super.c | 20 ++-
> include/linux/slab.h | 39 +++--
> mm/memcontrol.c | 31 +++-
> mm/slab.h | 120 ++++++++++++++-
> mm/slab_common.c | 8 +-
> mm/slub.c | 345 +++++++++++++++++++++++++++++++++++--------
> 6 files changed, 466 insertions(+), 97 deletions(-)
>
> --
> 2.43.0
>
next prev parent reply other threads:[~2026-01-05 8:05 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-01-05 8:02 [PATCH V5 0/8] mm/slab: reduce slab accounting memory overhead by allocating slabobj_ext metadata within unsed slab space Harry Yoo
2026-01-05 8:02 ` [PATCH V5 1/8] mm/slab: use unsigned long for orig_size to ensure proper metadata align Harry Yoo
2026-01-07 11:43 ` Vlastimil Babka
2026-01-08 7:12 ` Harry Yoo
2026-01-08 11:39 ` Alexander Potapenko
2026-01-09 1:52 ` Harry Yoo
2026-01-09 9:30 ` Alexander Potapenko
2026-01-12 6:28 ` Harry Yoo
2026-01-05 8:02 ` [PATCH V5 2/8] mm/slab: allow specifying free pointer offset when using constructor Harry Yoo
2026-01-05 8:02 ` [PATCH V5 3/8] ext4: specify the free pointer offset for ext4_inode_cache Harry Yoo
2026-01-07 13:54 ` Vlastimil Babka
2026-01-08 7:14 ` Harry Yoo
2026-01-05 8:02 ` [PATCH V5 4/8] mm/slab: abstract slabobj_ext access via new slab_obj_ext() helper Harry Yoo
2026-01-07 14:53 ` Hao Li
2026-01-08 7:21 ` Harry Yoo
2026-01-07 14:56 ` Vlastimil Babka
2026-01-08 8:03 ` Harry Yoo
2026-01-05 8:02 ` [PATCH V5 5/8] mm/slab: use stride to access slabobj_ext Harry Yoo
2026-01-05 8:02 ` [PATCH V5 6/8] mm/memcontrol,alloc_tag: handle slabobj_ext access under KASAN poison Harry Yoo
2026-01-05 8:02 ` [PATCH V5 7/8] mm/slab: save memory by allocating slabobj_ext array from leftover Harry Yoo
2026-01-07 17:08 ` Vlastimil Babka
2026-01-05 8:02 ` [PATCH V5 8/8] mm/slab: place slabobj_ext metadata in unused space within s->size Harry Yoo
2026-01-07 17:33 ` Vlastimil Babka
2026-01-08 9:02 ` Harry Yoo
2026-01-08 5:52 ` Hao Li
2026-01-08 8:41 ` Harry Yoo
2026-01-08 9:52 ` Hao Li
2026-01-08 10:28 ` Harry Yoo
2026-01-08 10:44 ` Harry Yoo
2026-01-08 10:52 ` Vlastimil Babka
2026-01-08 12:48 ` Hao Li
2026-01-09 2:32 ` Harry Yoo
2026-01-08 11:57 ` Hao Li
2026-01-05 8:05 ` Harry Yoo [this message]
2026-01-07 17:43 ` [PATCH V5 0/8] mm/slab: reduce slab accounting memory overhead by allocating slabobj_ext metadata within unsed slab space Vlastimil Babka
2026-01-08 7:05 ` Harry Yoo
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=aVtww_FMnDX7o66r@hyeyoo \
--to=harry.yoo@oracle.com \
--cc=adilger.kernel@dilger.ca \
--cc=akpm@linux-foundation.org \
--cc=andreyknvl@gmail.com \
--cc=cgroups@vger.kernel.org \
--cc=cl@gentwo.org \
--cc=dvyukov@google.com \
--cc=glider@google.com \
--cc=hannes@cmpxchg.org \
--cc=hao.li@linux.dev \
--cc=linux-ext4@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=mhocko@kernel.org \
--cc=muchun.song@linux.dev \
--cc=rientjes@google.com \
--cc=roman.gushchin@linux.dev \
--cc=ryabinin.a.a@gmail.com \
--cc=shakeel.butt@linux.dev \
--cc=surenb@google.com \
--cc=tytso@mit.edu \
--cc=vbabka@suse.cz \
--cc=vincenzo.frascino@arm.com \
--cc=yeoreum.yun@arm.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 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.