From: "Christoph Lameter (Ampere)" <cl@linux.com>
To: Vlastimil Babka <vbabka@suse.cz>
Cc: Pekka Enberg <penberg@kernel.org>,
David Rientjes <rientjes@google.com>,
Joonsoo Kim <iamjoonsoo.kim@lge.com>,
Matthew Wilcox <willy@infradead.org>,
"Liam R. Howlett" <Liam.Howlett@oracle.com>,
Andrew Morton <akpm@linux-foundation.org>,
Roman Gushchin <roman.gushchin@linux.dev>,
Hyeonggon Yoo <42.hyeyoo@gmail.com>,
Alexander Potapenko <glider@google.com>,
Marco Elver <elver@google.com>,
Dmitry Vyukov <dvyukov@google.com>,
linux-mm@kvack.org, linux-kernel@vger.kernel.org,
maple-tree@lists.infradead.org, kasan-dev@googlegroups.com
Subject: Re: [PATCH RFC v3 0/9] SLUB percpu array caches and maple tree nodes
Date: Wed, 29 Nov 2023 12:16:17 -0800 (PST) [thread overview]
Message-ID: <b51bfc04-d770-3385-736a-01aa733c4622@linux.com> (raw)
In-Reply-To: <20231129-slub-percpu-caches-v3-0-6bcf536772bc@suse.cz>
On Wed, 29 Nov 2023, Vlastimil Babka wrote:
> At LSF/MM I've mentioned that I see several use cases for introducing
> opt-in percpu arrays for caching alloc/free objects in SLUB. This is my
> first exploration of this idea, speficially for the use case of maple
> tree nodes. The assumptions are:
Hohumm... So we are not really removing SLAB but merging SLAB features
into SLUB. In addition to per cpu slabs, we now have per cpu queues.
> - percpu arrays will be faster thank bulk alloc/free which needs
> relatively long freelists to work well. Especially in the freeing case
> we need the nodes to come from the same slab (or small set of those)
Percpu arrays require the code to handle individual objects. Handling
freelists in partial SLABS means that numerous objects can be handled at
once by handling the pointer to the list of objects.
In order to make the SLUB in page freelists work better you need to have
larger freelist and that comes with larger page sizes. I.e. boot with
slub_min_order=5 or so to increase performance.
Also this means increasing TLB pressure. The in page freelists of SLUB
cause objects from the same page be served. The SLAB queueing approach
results in objects being mixed from any address and thus neighboring
objects may require more TLB entries.
> - preallocation for the worst case of needed nodes for a tree operation
> that can't reclaim due to locks is wasteful. We could instead expect
> that most of the time percpu arrays would satisfy the constained
> allocations, and in the rare cases it does not we can dip into
> GFP_ATOMIC reserves temporarily. So instead of preallocation just
> prefill the arrays.
The partial percpu slabs could already do the same.
> - NUMA locality of the nodes is not a concern as the nodes of a
> process's VMA tree end up all over the place anyway.
NUMA locality is already controlled by the user through the node
specification for percpu slabs. All objects coming from the same in page
freelist of SLUB have the same NUMA locality which simplifies things.
If you would consider NUMA locality for the percpu array then you'd be
back to my beloved alien caches. We were not able to avoid that when we
tuned SLAB for maximum performance.
> Patch 5 adds the per-cpu array caches support. Locking is stolen from
> Mel's recent page allocator's pcplists implementation so it can avoid
> disabling IRQs and just disable preemption, but the trylocks can fail in
> rare situations - in most cases the locks are uncontended so the locking
> should be cheap.
Ok the locking is new but the design follows basic SLAB queue handling.
next prev parent reply other threads:[~2023-11-29 20:16 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-11-29 9:53 [PATCH RFC v3 0/9] SLUB percpu array caches and maple tree nodes Vlastimil Babka
2023-11-29 9:53 ` [PATCH RFC v3 1/9] mm/slub: fix bulk alloc and free stats Vlastimil Babka
2023-11-29 9:53 ` [PATCH RFC v3 2/9] mm/slub: introduce __kmem_cache_free_bulk() without free hooks Vlastimil Babka
2023-11-29 9:53 ` [PATCH RFC v3 3/9] mm/slub: handle bulk and single object freeing separately Vlastimil Babka
2023-11-29 9:53 ` [PATCH RFC v3 4/9] mm/slub: free KFENCE objects in slab_free_hook() Vlastimil Babka
2023-11-29 12:00 ` Marco Elver
2023-11-29 9:53 ` [PATCH RFC v3 5/9] mm/slub: add opt-in percpu array cache of objects Vlastimil Babka
2023-11-29 10:35 ` Marco Elver
2023-12-15 18:28 ` Suren Baghdasaryan
2023-12-15 21:17 ` Suren Baghdasaryan
2023-11-29 9:53 ` [PATCH RFC v3 6/9] tools: Add SLUB percpu array functions for testing Vlastimil Babka
2023-11-29 9:53 ` [PATCH RFC v3 7/9] maple_tree: use slub percpu array Vlastimil Babka
2023-11-29 9:53 ` [PATCH RFC v3 8/9] maple_tree: Remove MA_STATE_PREALLOC Vlastimil Babka
2023-11-29 9:53 ` [PATCH RFC v3 9/9] maple_tree: replace preallocation with slub percpu array prefill Vlastimil Babka
2023-11-29 20:16 ` Christoph Lameter (Ampere) [this message]
2023-11-29 21:20 ` [PATCH RFC v3 0/9] SLUB percpu array caches and maple tree nodes Matthew Wilcox
2023-12-14 20:14 ` Christoph Lameter (Ampere)
2023-11-30 9:14 ` Vlastimil Babka
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=b51bfc04-d770-3385-736a-01aa733c4622@linux.com \
--to=cl@linux.com \
--cc=42.hyeyoo@gmail.com \
--cc=Liam.Howlett@oracle.com \
--cc=akpm@linux-foundation.org \
--cc=dvyukov@google.com \
--cc=elver@google.com \
--cc=glider@google.com \
--cc=iamjoonsoo.kim@lge.com \
--cc=kasan-dev@googlegroups.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=maple-tree@lists.infradead.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).