From: Chengming Zhou <chengming.zhou@linux.dev>
To: sxwjean@me.com, Christoph Lameter <cl@linux.com>,
Pekka Enberg <penberg@kernel.org>,
David Rientjes <rientjes@google.com>,
Joonsoo Kim <iamjoonsoo.kim@lge.com>,
Andrew Morton <akpm@linux-foundation.org>,
Vlastimil Babka <vbabka@suse.cz>,
Roman Gushchin <roman.gushchin@linux.dev>,
Hyeonggon Yoo <42.hyeyoo@gmail.com>
Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org,
Xiongwei Song <xiongwei.song@windriver.com>
Subject: Re: [PATCH v2] mm/slub: Simplify get_partial_node()
Date: Tue, 12 Mar 2024 23:22:54 +0800 [thread overview]
Message-ID: <38beee7c-aceb-4d59-ac79-e7e412a01588@linux.dev> (raw)
In-Reply-To: <20240312140532.64124-1-sxwjean@me.com>
On 2024/3/12 22:05, sxwjean@me.com wrote:
> From: Xiongwei Song <xiongwei.song@windriver.com>
>
> Remove the check of !kmem_cache_has_cpu_partial() because it is always
> false, we've known this by calling kmem_cache_debug() before calling
> remove_partial(), so we can remove the check.
>
> Meanwhile, redo filling cpu partial and add comment to improve the
> readability.
>
> Signed-off-by: Xiongwei Song <xiongwei.song@windriver.com>
> ---
> Changes in v2:
> - Use "#if IS_ENABLED(CONFIG_SLUB_CPU_PARTIAL)" to instead
> "if (IS_ENABLED(CONFIG_SLUB_CPU_PARTIAL))" to fix build error.
> (Thanks Chengming Zhou)
> - Add __maybe_unused for partial_slabs to prevent compiler warning.
>
> v1:
> https://lore.kernel.org/linux-kernel/20240311132720.37741-1-sxwjean@me.com/T/
> ---
> mm/slub.c | 24 +++++++++++++-----------
> 1 file changed, 13 insertions(+), 11 deletions(-)
>
> diff --git a/mm/slub.c b/mm/slub.c
> index a3ab096c38c0..ab526960ee5b 100644
> --- a/mm/slub.c
> +++ b/mm/slub.c
> @@ -2588,7 +2588,7 @@ static struct slab *get_partial_node(struct kmem_cache *s,
> {
> struct slab *slab, *slab2, *partial = NULL;
> unsigned long flags;
> - unsigned int partial_slabs = 0;
> + unsigned int __maybe_unused partial_slabs = 0;
>
> /*
> * Racy check. If we mistakenly see no partial slabs then we
> @@ -2620,19 +2620,21 @@ static struct slab *get_partial_node(struct kmem_cache *s,
> if (!partial) {
> partial = slab;
> stat(s, ALLOC_FROM_PARTIAL);
> - } else {
> - put_cpu_partial(s, slab, 0);
> - stat(s, CPU_PARTIAL_NODE);
> - partial_slabs++;
> +
> + /* Fill cpu partial if needed from next iteration, or break */
> + if (IS_ENABLED(CONFIG_SLUB_CPU_PARTIAL))
> + continue;
> + else
> + break;
> }
> -#ifdef CONFIG_SLUB_CPU_PARTIAL
> - if (!kmem_cache_has_cpu_partial(s)
> - || partial_slabs > s->cpu_partial_slabs / 2)
> +
> +#if IS_ENABLED(CONFIG_SLUB_CPU_PARTIAL)
Hmm, these two CONFIG_SLUB_CPU_PARTIAL look verbose to me :(
How about using just one, maybe like this?
diff --git a/mm/slub.c b/mm/slub.c
index 2ef88bbf56a3..a018c715b648 100644
--- a/mm/slub.c
+++ b/mm/slub.c
@@ -2620,19 +2620,16 @@ static struct slab *get_partial_node(struct kmem_cache *s,
if (!partial) {
partial = slab;
stat(s, ALLOC_FROM_PARTIAL);
+#ifdef CONFIG_SLUB_CPU_PARTIAL
} else {
put_cpu_partial(s, slab, 0);
stat(s, CPU_PARTIAL_NODE);
- partial_slabs++;
- }
-#ifdef CONFIG_SLUB_CPU_PARTIAL
- if (!kmem_cache_has_cpu_partial(s)
- || partial_slabs > s->cpu_partial_slabs / 2)
- break;
+ if (++partial_slabs > s->cpu_partial_slabs / 2)
+ break;
#else
- break;
+ break;
#endif
-
+ }
}
spin_unlock_irqrestore(&n->list_lock, flags);
return partial;
> + put_cpu_partial(s, slab, 0);
> + stat(s, CPU_PARTIAL_NODE);
> +
> + if (++partial_slabs > s->cpu_partial_slabs/2)
> break;
> -#else
> - break;
> #endif
> -
> }
> spin_unlock_irqrestore(&n->list_lock, flags);
> return partial;
next prev parent reply other threads:[~2024-03-12 15:23 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-03-12 14:05 [PATCH v2] mm/slub: Simplify get_partial_node() sxwjean
2024-03-12 15:22 ` Chengming Zhou [this message]
2024-03-13 6:15 ` Song, Xiongwei
2024-03-13 23:36 ` David Rientjes
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=38beee7c-aceb-4d59-ac79-e7e412a01588@linux.dev \
--to=chengming.zhou@linux.dev \
--cc=42.hyeyoo@gmail.com \
--cc=akpm@linux-foundation.org \
--cc=cl@linux.com \
--cc=iamjoonsoo.kim@lge.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=penberg@kernel.org \
--cc=rientjes@google.com \
--cc=roman.gushchin@linux.dev \
--cc=sxwjean@me.com \
--cc=vbabka@suse.cz \
--cc=xiongwei.song@windriver.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.