From: Hyeonggon Yoo <42.hyeyoo@gmail.com>
To: Vlastimil Babka <vbabka@suse.cz>
Cc: 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>, Marco Elver <elver@google.com>,
Matthew WilCox <willy@infradead.org>,
Roman Gushchin <roman.gushchin@linux.dev>,
linux-mm@kvack.org, linux-kernel@vger.kernel.org
Subject: Re: [RFC PATCH v1 01/15] mm/slab: cleanup slab_alloc() and slab_alloc_node()
Date: Thu, 24 Mar 2022 11:06:03 +0000 [thread overview]
Message-ID: <20220324110603.GA2112827@odroid> (raw)
In-Reply-To: <5833607a-4444-206d-db4f-9f958653c5b0@suse.cz>
Vlastimil wrote:
> On 3/8/22 12:41, Hyeonggon Yoo wrote:
> > +
> > static __always_inline void *
> > -slab_alloc(struct kmem_cache *cachep, gfp_t flags, size_t orig_size, unsigned long caller)
> > +slab_alloc_node(struct kmem_cache *cachep, gfp_t flags, int nodeid, size_t orig_size,
> > + unsigned long caller)
> > {
> > unsigned long save_flags;
> > - void *objp;
> > + void *ptr;
> > + int slab_node = numa_mem_id();
> > struct obj_cgroup *objcg = NULL;
> > bool init = false;
> >
> > @@ -3299,21 +3255,49 @@ slab_alloc(struct kmem_cache *cachep, gfp_t flags, size_t orig_size, unsigned lo
> > if (unlikely(!cachep))
> > return NULL;
> >
> > - objp = kfence_alloc(cachep, orig_size, flags);
> > - if (unlikely(objp))
> > - goto out;
> > + ptr = kfence_alloc(cachep, orig_size, flags);
> > + if (unlikely(ptr))
> > + goto out_hooks;
> >
> > cache_alloc_debugcheck_before(cachep, flags);
> > local_irq_save(save_flags);
> > - objp = __do_cache_alloc(cachep, flags);
>
> Looks like after this patch, slab_alloc() (without a node specified)
> will not end up in __do_cache_alloc() anymore, so there's no more
> possibility of alternate_node_alloc(), which looks like a functional
> regression?
>
Ah, that was not intended. Thank you for catching this!
Will fix in v2.
Thank you so much.
> > +
> > + if (node_match(nodeid, slab_node)) {
> > + /*
> > + * Use the locally cached objects if possible.
> > + * However ____cache_alloc does not allow fallback
> > + * to other nodes. It may fail while we still have
> > + * objects on other nodes available.
> > + */
> > + ptr = ____cache_alloc(cachep, flags);
> > + if (ptr)
> > + goto out;
> > + }
> > +#ifdef CONFIG_NUMA
> > + else if (unlikely(!get_node(cachep, nodeid))) {
> > + /* Node not bootstrapped yet */
> > + ptr = fallback_alloc(cachep, flags);
> > + goto out;
> > + }
> > +
> > + /* ___cache_alloc_node can fall back to other nodes */
> > + ptr = ____cache_alloc_node(cachep, flags, nodeid);
> > +#endif
> > +out:
> > local_irq_restore(save_flags);
> > - objp = cache_alloc_debugcheck_after(cachep, flags, objp, caller);
> > - prefetchw(objp);
> > + ptr = cache_alloc_debugcheck_after(cachep, flags, ptr, caller);
> > + prefetchw(ptr);
> > init = slab_want_init_on_alloc(flags, cachep);
> >
> > -out:
> > - slab_post_alloc_hook(cachep, objcg, flags, 1, &objp, init);
> > - return objp;
> > +out_hooks:
> > + slab_post_alloc_hook(cachep, objcg, flags, 1, &ptr, init);
> > + return ptr;
> > +}
> > +
> > +static __always_inline void *
> > +slab_alloc(struct kmem_cache *cachep, gfp_t flags, size_t orig_size, unsigned long caller)
> > +{
> > + return slab_alloc_node(cachep, flags, NUMA_NO_NODE, orig_size, caller);
> > }
> >
> > /*
--
Thank you, You are awesome!
Hyeonggon :-)
next prev parent reply other threads:[~2022-03-24 11:06 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-03-08 11:41 [RFC PATCH v1 00/15] common kmalloc subsystem on SLAB/SLUB Hyeonggon Yoo
2022-03-08 11:41 ` [RFC PATCH v1 01/15] mm/slab: cleanup slab_alloc() and slab_alloc_node() Hyeonggon Yoo
2022-03-23 15:28 ` Vlastimil Babka
2022-03-24 11:06 ` Hyeonggon Yoo [this message]
2022-03-08 11:41 ` [RFC PATCH v1 02/15] mm/sl[auo]b: remove CONFIG_NUMA ifdefs for common functions Hyeonggon Yoo
2022-03-08 11:41 ` [RFC PATCH v1 03/15] mm/sl[au]b: remove CONFIG_TRACING ifdefs for tracing functions Hyeonggon Yoo
2022-03-08 11:41 ` [RFC PATCH v1 04/15] mm/sl[auo]b: fold kmalloc_order() into kmalloc_large() Hyeonggon Yoo
2022-03-24 16:27 ` Vlastimil Babka
2022-03-08 11:41 ` [RFC PATCH v1 05/15] mm/slub: move kmalloc_large_node() to slab_common.c Hyeonggon Yoo
2022-03-24 17:22 ` Vlastimil Babka
2022-03-08 11:41 ` [RFC PATCH v1 06/15] mm/slab_common: cleanup kmalloc_large() Hyeonggon Yoo
2022-03-08 11:41 ` [RFC PATCH v1 07/15] mm/sl[au]b: kmalloc_node: pass large requests to page allocator Hyeonggon Yoo
2022-03-24 17:36 ` Vlastimil Babka
2022-03-08 11:41 ` [RFC PATCH v1 08/15] mm/sl[auo]b: cleanup kmalloc() Hyeonggon Yoo
2022-03-24 17:43 ` Vlastimil Babka
2022-03-24 17:46 ` Vlastimil Babka
2022-04-22 12:46 ` Hyeonggon Yoo
2022-03-08 11:41 ` [RFC PATCH v1 09/15] mm/slab: kmalloc: pass requests larger than order-1 page to page allocator Hyeonggon Yoo
2022-03-24 18:08 ` Vlastimil Babka
2022-04-22 12:40 ` Hyeonggon Yoo
2022-03-08 11:41 ` [RFC PATCH v1 10/15] mm/sl[auo]b: print cache name in tracepoints Hyeonggon Yoo
2022-03-08 11:41 ` [RFC PATCH v1 11/15] mm/sl[auo]b: use same tracepoint in kmalloc and normal caches Hyeonggon Yoo
2022-03-25 17:13 ` Vlastimil Babka
2022-04-22 12:57 ` Hyeonggon Yoo
2022-03-08 11:41 ` [RFC PATCH v1 12/15] mm/sl[au]b: generalize kmalloc subsystem Hyeonggon Yoo
2022-03-08 11:41 ` [RFC PATCH v1 13/15] mm/sl[au]b: remove kmem_cache_alloc_node_trace() Hyeonggon Yoo
2022-03-08 11:41 ` [RFC PATCH v1 14/15] mm/sl[auo]b: move definition of __ksize() to mm/slab.h Hyeonggon Yoo
2022-03-08 11:41 ` [RFC PATCH v1 15/15] mm/sl[au]b: check if large object is valid in __ksize() Hyeonggon Yoo
2022-03-24 9:59 ` Hyeonggon 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=20220324110603.GA2112827@odroid \
--to=42.hyeyoo@gmail.com \
--cc=akpm@linux-foundation.org \
--cc=cl@linux.com \
--cc=elver@google.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=vbabka@suse.cz \
--cc=willy@infradead.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.