From: Harry Yoo <harry@kernel.org>
To: "Vlastimil Babka (SUSE)" <vbabka@kernel.org>
Cc: Hao Li <hao.li@linux.dev>, Christoph Lameter <cl@gentwo.org>,
David Rientjes <rientjes@google.com>,
Roman Gushchin <roman.gushchin@linux.dev>,
Geert Uytterhoeven <geert@linux-m68k.org>,
Conor Dooley <conor@kernel.org>,
Damien Le Moal <damien.lemoal@opensource.wdc.com>,
linux-mm@kvack.org, linux-kernel@vger.kernel.org,
Kees Cook <kees@kernel.org>
Subject: Re: [PATCH RFC 2/8] mm, slab: introduce slab_debug=N
Date: Thu, 24 Sep 2026 15:48:41 +0100 [thread overview]
Message-ID: <arUx56ee_nkxYP_f@thinkstation> (raw)
In-Reply-To: <20260923-slub_tiny_rework-v1-2-a0e66d536eb5@kernel.org>
On Wed, Sep 23, 2026 at 05:45:07PM +0200, Vlastimil Babka (SUSE) wrote:
> Enabling slab_debug has the side-effect of disabling all percpu caching
> of objects (now via sheaves), which can be sometimes useful for saving
> memory for e.g. kdump kernels. To make this possible without the
> overhead (CPU or memory) of actual debugging options such as poisoning,
> introduce a No-op debug option that only forces the debugging slow paths
> and zero sheaf capacity.
Just to clarify, the intended behavior of slab_debug=- still
does not change, right? (the name "No-op" could be confusing here I
guess)
And My LLM flagged an issue here (that I reviewed)
Implementing it as debug flag has a few side effects:
- pointer hashing will be disabled unless hash_pointers=always is
specified. [+Cc: Kees]
- Disable slab merging. Since this does not affect object metadata
layout, this could be excluded.
--
Cheers,
Harry / Hyeonggon
> This will also allow reimplementing CONFIG_SLUB_TINY as a boot-time
> option.
>
> While documenting the new N option, remove obsolete SLAB references from
> the F option description.
>
> Signed-off-by: Vlastimil Babka (SUSE) <vbabka@kernel.org>
> ---
> Documentation/admin-guide/mm/slab.rst | 13 +++++++++++--
> include/linux/slab.h | 5 ++++-
> mm/slab.h | 2 +-
> mm/slub.c | 3 +++
> 4 files changed, 19 insertions(+), 4 deletions(-)
>
> diff --git a/Documentation/admin-guide/mm/slab.rst b/Documentation/admin-guide/mm/slab.rst
> index 14429ab90611..0beeae71d472 100644
> --- a/Documentation/admin-guide/mm/slab.rst
> +++ b/Documentation/admin-guide/mm/slab.rst
> @@ -45,12 +45,12 @@ of the first "select slabs" blocks that matches the slab's name are applied.
>
> Possible debug options are::
>
> - F Sanity checks on (enables SLAB_DEBUG_CONSISTENCY_CHECKS
> - Sorry SLAB legacy issues)
> + F Sanity (slab consistency) checks on alloc and free
> Z Red zoning
> P Poisoning (object and padding)
> U User tracking (free and alloc)
> T Trace (please only use on single slabs)
> + N No-op (force debugging slowpaths without any checks)
> A Enable failslab filter mark for the cache
> O Switch debugging off for caches that would have
> caused higher minimum slab orders
> @@ -85,6 +85,15 @@ in low memory situations or if there's high fragmentation of memory. To
>
> slab_debug=O
>
> +The No-op option can be useful to minimize slab memory overhead by forcing slab
> +debugging slowpaths, which disables percpu object caching. This reduces SMP
> +scalability significantly, but does not impose the extra cpu or memory overhead
> +of debugging options that actually perform checks. This can be useful for e.g.
> +kdump kernels where scalability is not a concern, but memory has to be
> +pre-reserved from the production kernel. So for a kdump kernel you can use::
> +
> + slab_debug=N
> +
> You can apply different options to different list of slab names, using blocks
> of options. This will enable red zoning for dentry and user tracking for
> kmalloc. All other slabs will not get any debugging enabled::
> diff --git a/include/linux/slab.h b/include/linux/slab.h
> index cda126def67a..ed949e8522be 100644
> --- a/include/linux/slab.h
> +++ b/include/linux/slab.h
> @@ -35,6 +35,7 @@ enum _slab_flag_bits {
> _SLAB_PANIC,
> _SLAB_TYPESAFE_BY_RCU,
> _SLAB_TRACE,
> + _SLAB_DEBUG_NOOP,
> #ifdef CONFIG_DEBUG_OBJECTS
> _SLAB_DEBUG_OBJECTS,
> #endif
> @@ -166,8 +167,10 @@ enum _slab_flag_bits {
> * Note that SLAB_TYPESAFE_BY_RCU was originally named SLAB_DESTROY_BY_RCU.
> */
> #define SLAB_TYPESAFE_BY_RCU __SLAB_FLAG_BIT(_SLAB_TYPESAFE_BY_RCU)
> -/* Trace allocations and frees */
> +/* DEBUG: Trace allocations and frees */
> #define SLAB_TRACE __SLAB_FLAG_BIT(_SLAB_TRACE)
> +/* DEBUG: Force the debug slowpaths without actually doing anything */
> +#define SLAB_DEBUG_NOOP __SLAB_FLAG_BIT(_SLAB_DEBUG_NOOP)
>
> /* Flag to prevent checks on free */
> #ifdef CONFIG_DEBUG_OBJECTS
> diff --git a/mm/slab.h b/mm/slab.h
> index 8fd6835e4235..77fcbf99b7b4 100644
> --- a/mm/slab.h
> +++ b/mm/slab.h
> @@ -490,7 +490,7 @@ void flush_rcu_sheaves_on_cache(struct kmem_cache *s);
> SLAB_NO_USER_FLAGS | SLAB_KMALLOC | SLAB_NO_MERGE)
>
> #define SLAB_DEBUG_FLAGS (SLAB_RED_ZONE | SLAB_POISON | SLAB_STORE_USER | \
> - SLAB_TRACE | SLAB_CONSISTENCY_CHECKS)
> + SLAB_TRACE | SLAB_DEBUG_NOOP | SLAB_CONSISTENCY_CHECKS)
>
> #define SLAB_FLAGS_PERMITTED (SLAB_CORE_FLAGS | SLAB_DEBUG_FLAGS)
>
> diff --git a/mm/slub.c b/mm/slub.c
> index a107a111c75e..bc593f0078c0 100644
> --- a/mm/slub.c
> +++ b/mm/slub.c
> @@ -1897,6 +1897,9 @@ parse_slub_debug_flags(const char *str, slab_flags_t *flags, const char **slabs,
> case 't':
> *flags |= SLAB_TRACE;
> break;
> + case 'n':
> + *flags |= SLAB_DEBUG_NOOP;
> + break;
> case 'a':
> *flags |= SLAB_FAILSLAB;
> break;
>
> --
> 2.55.0
next prev parent reply other threads:[~2026-09-24 14:48 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-23 15:45 [PATCH RFC 0/8] replace CONFIG_SLUB_TINY with a slab_tiny boot parameter Vlastimil Babka (SUSE)
2026-09-23 15:45 ` [PATCH RFC 1/8] mm, slab: refactor slab_min/max_order handling Vlastimil Babka (SUSE)
2026-09-23 15:45 ` [PATCH RFC 2/8] mm, slab: introduce slab_debug=N Vlastimil Babka (SUSE)
2026-09-24 14:48 ` Harry Yoo [this message]
2026-09-24 15:39 ` Harry Yoo
2026-09-23 15:45 ` [PATCH RFC 3/8] mm, slab: rework KMALLOC_RECLAIM handling of SLUB_TINY Vlastimil Babka (SUSE)
2026-09-23 15:45 ` [PATCH RFC 4/8] mm, slab: make SLUB_TINY handling dynamic for sizing decisions Vlastimil Babka (SUSE)
2026-09-23 15:45 ` [PATCH RFC 5/8] mm, slab: convert CONFIG_SLUB_TINY checks to kmem_cache_debug() Vlastimil Babka (SUSE)
2026-09-23 15:45 ` [PATCH RFC 6/8] mm, slab: remove remaining compile-time checks for CONFIG_SLUB_TINY Vlastimil Babka (SUSE)
2026-09-23 15:45 ` [PATCH RFC 7/8] mm, slab: add slab_tiny boot param Vlastimil Babka (SUSE)
2026-09-24 7:26 ` Vlastimil Babka (SUSE)
2026-09-23 15:45 ` [PATCH RFC 8/8] mm, slab: deprecate CONFIG_SLUB_TINY and reduce its Kconfig effects Vlastimil Babka (SUSE)
2026-09-24 15:18 ` [PATCH RFC 0/8] replace CONFIG_SLUB_TINY with a slab_tiny boot parameter 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=arUx56ee_nkxYP_f@thinkstation \
--to=harry@kernel.org \
--cc=cl@gentwo.org \
--cc=conor@kernel.org \
--cc=damien.lemoal@opensource.wdc.com \
--cc=geert@linux-m68k.org \
--cc=hao.li@linux.dev \
--cc=kees@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=rientjes@google.com \
--cc=roman.gushchin@linux.dev \
--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.