All of lore.kernel.org
 help / color / mirror / Atom feed
From: Hao Li <hao.li@linux.dev>
To: Harry Yoo <harry@kernel.org>
Cc: "Vlastimil Babka (SUSE)" <vbabka@kernel.org>,
	 Suren Baghdasaryan <surenb@google.com>,
	Shakeel Butt <shakeel.butt@linux.dev>,
	 Alexander Potapenko <glider@google.com>,
	Marco Elver <elver@google.com>,
	 Andrew Morton <akpm@linux-foundation.org>,
	Christoph Lameter <cl@gentwo.org>,
	 David Rientjes <rientjes@google.com>,
	Roman Gushchin <roman.gushchin@linux.dev>,
	linux-mm@kvack.org,  linux-kernel@vger.kernel.org,
	cgroups@vger.kernel.org
Subject: Re: [PATCH v2 09/13] mm/slab: change struct slabobj_ext to a union
Date: Thu, 23 Jul 2026 17:56:56 +0800	[thread overview]
Message-ID: <amHkbJsvOjcfUR3D@fedora> (raw)
In-Reply-To: <9b2dadb7-8e3d-4b9b-a870-969be9a7a432@kernel.org>

On Thu, Jul 23, 2026 at 03:27:51PM +0900, Harry Yoo wrote:
> 
> 
> On 7/23/26 12:05 PM, Hao Li wrote:
> > On Mon, Jul 20, 2026 at 04:16:23PM +0200, Vlastimil Babka (SUSE) wrote:
> >> Currently, struct slabobj_ext can hold both objcg pointer and
> >> codetag_ref (when both are compile-enabled) and there is an array of as
> >> many slabobj_ext instances as there are objects in a slab.
> >>
> >> This makes the layout fixed so even if codetag_ref is unused (because
> >> memory allocation profiling is disabled), the space for them is
> >> allocated and wasted. Similarly, some caches (currently kmalloc_normal)
> >> do not ever need objcg pointers, leading to wasted memory with memory
> >> allocation profiling enabled.
> >>
> >> To make this more flexible, change the layout so that struct slabobj_ext
> >> becomes a union of objcg pointer and codetag_ref (to ensure uniform
> >> size; in practice both are the same size anyway). The slabobj_ext array
> >> then can have twice as many elements as before. For cache locality
> >> purposes, the effective memory layout is unchanged, so objcg and codetag
> >> ref for a given object are still adjacent.
> >>
> >> cache_obj_ext_size() returns the effective size of (0-2) struct
> >> slabobj_ext's for a cache, slab_obj_ext_size() for a slab. Currently
> >> both return a constant value derived from the config options, but will
> >> be made dynamic later. Replace all sizeof(slabobj_ext) usage with these.
> >>
> >> No functional change intended, the layout is still effectively static.
> >>
> >> Reviewed-by: Suren Baghdasaryan <surenb@google.com>
> >> Signed-off-by: Vlastimil Babka (SUSE) <vbabka@kernel.org>
> >> ---
> >>  mm/slab.h | 49 +++++++++++++++++++++++++++++++++++++++----------
> >>  mm/slub.c | 19 +++++++++++--------
> >>  2 files changed, 50 insertions(+), 18 deletions(-)
> >>
> >> diff --git a/mm/slab.h b/mm/slab.h
> >> index e586798e4f16..f8446167e175 100644
> >> --- a/mm/slab.h
> >> +++ b/mm/slab.h
> >> @@ -550,18 +550,42 @@ static inline bool need_kmalloc_no_objext(void)
> >>  }
> >>  
> >>  /*
> >> - * Extended information for slab objects stored as an array in page->memcg_data
> >> - * if MEMCG_DATA_OBJEXTS is set.
> >> + * Extended information for slab objects stored as a pointer to an array in
> >> + * slab->obj_exts (aliasing page->memcg_data) if MEMCG_DATA_OBJEXTS is set.
> >>   */
> >>  struct slabobj_ext {
> >> +	/*
> >> +	 * All elements of the union should be pointer-sized to avoid memory
> >> +	 * waste
> >> +	 */
> >> +	union {
> >>  #ifdef CONFIG_MEMCG
> >> -	struct obj_cgroup *_objcg;
> >> +		struct obj_cgroup *_objcg;
> >>  #endif
> >>  #ifdef CONFIG_MEM_ALLOC_PROFILING
> >> -	union codetag_ref _ctref;
> >> +		union codetag_ref _ctref;
> >>  #endif
> >> +	};
> >>  } __aligned(8);
> > 
> > slabobj_ext is now acting as a generic struct, serving as either _objcg or
> > _ctref. However, because it's set to __aligned(8), I'm wondering if this might
> > waste half the memory on 32-bit?
> 
> We could loosen the alignment to
> max(__NR_OBJEXTS_FLAGS, alignof(void *))
> 
> and drop OBJEXT_FLAG_UNUSED.

Yes, this idea is insightful and I think it may need a standalone patch without
blocking current patchset.

> 
> ...not sure how much we care about this on 32bit though.

Yeah, 32bit is a rare arch today :)

-- 
Thanks,
Hao

  reply	other threads:[~2026-07-23  9:57 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-07-20 14:16 [PATCH v2 00/13] mm/slab, alloc_tag: reduce obj_ext memory waste Vlastimil Babka (SUSE)
2026-07-20 14:16 ` [PATCH v2 01/13] mm/slab: skip kfence objects in allocation profiling Vlastimil Babka (SUSE)
2026-07-21  5:43   ` Harry Yoo
2026-07-21  9:20     ` Vlastimil Babka (SUSE)
2026-07-21 15:41       ` Harry Yoo
2026-07-22 12:47   ` Hao Li
2026-07-20 14:16 ` [PATCH v2 02/13] mm/slub: skip handle_failed_objexts_alloc() with profiling disabled Vlastimil Babka (SUSE)
2026-07-21  5:51   ` Harry Yoo
2026-07-21  9:23     ` Vlastimil Babka (SUSE)
2026-07-20 14:16 ` [PATCH v2 03/13] mm/slab: remove objs_per_slab() Vlastimil Babka (SUSE)
2026-07-21  5:53   ` Harry Yoo
2026-07-23 11:29   ` Hao Li
2026-07-20 14:16 ` [PATCH v2 04/13] mm: move struct slabobj_ext to mm/slab.h Vlastimil Babka (SUSE)
2026-07-21  5:55   ` Harry Yoo
2026-07-23 11:29   ` Hao Li
2026-07-20 14:16 ` [PATCH v2 05/13] mm/slab: make slab_obj_ext() determine object index Vlastimil Babka (SUSE)
2026-07-21  6:02   ` Harry Yoo
2026-07-23 11:30   ` Hao Li
2026-07-20 14:16 ` [PATCH v2 06/13] mm/slab: abstract slabobj_ext.objcg access Vlastimil Babka (SUSE)
2026-07-23 11:32   ` Hao Li
2026-07-20 14:16 ` [PATCH v2 07/13] mm/slab: abstract slabobj_ext.ref access Vlastimil Babka (SUSE)
2026-07-23 11:32   ` Hao Li
2026-07-20 14:16 ` [PATCH v2 08/13] mm/slab: replace slab.stride with obj_exts_in_object Vlastimil Babka (SUSE)
2026-07-23 11:32   ` Hao Li
2026-07-20 14:16 ` [PATCH v2 09/13] mm/slab: change struct slabobj_ext to a union Vlastimil Babka (SUSE)
2026-07-23  3:05   ` Hao Li
2026-07-23  6:27     ` Harry Yoo
2026-07-23  9:56       ` Hao Li [this message]
2026-07-20 14:16 ` [PATCH v2 10/13] mm/slab: introduce slab_obj_ext_has_codetag() Vlastimil Babka (SUSE)
2026-07-20 14:16 ` [PATCH v2 11/13] mm/slab: reduce slabobj_ext memory with allocation profiling disabled Vlastimil Babka (SUSE)
2026-07-20 14:16 ` [PATCH v2 12/13] mm/slab: add cache_ and slab_needs_objcg() helpers Vlastimil Babka (SUSE)
2026-07-23  9:25   ` Hao Li
2026-07-23  9:30     ` Vlastimil Babka (SUSE)
2026-07-23 10:01       ` Hao Li
2026-07-20 14:16 ` [PATCH v2 13/13] mm/slab: stop allocating objcg pointers when unnecessary Vlastimil Babka (SUSE)

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=amHkbJsvOjcfUR3D@fedora \
    --to=hao.li@linux.dev \
    --cc=akpm@linux-foundation.org \
    --cc=cgroups@vger.kernel.org \
    --cc=cl@gentwo.org \
    --cc=elver@google.com \
    --cc=glider@google.com \
    --cc=harry@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=rientjes@google.com \
    --cc=roman.gushchin@linux.dev \
    --cc=shakeel.butt@linux.dev \
    --cc=surenb@google.com \
    --cc=vbabka@kernel.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 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.