From: Harry Yoo <harry@kernel.org>
To: Pedro Falcato <pfalcato@suse.de>
Cc: Vlastimil Babka <vbabka@kernel.org>,
Andrew Morton <akpm@linux-foundation.org>,
Hao Li <hao.li@linux.dev>, 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,
Suren Baghdasaryan <surenb@google.com>,
"Liam R. Howlett" <liam@infradead.org>
Subject: Re: [PATCH RFC 0/8] mm/slab: enable runtime sheaves tuning
Date: Wed, 20 May 2026 13:35:07 +0900 [thread overview]
Message-ID: <682945f5-2d00-4bc8-8e23-59189b4472c6@kernel.org> (raw)
In-Reply-To: <agr8Nzr8rnDBTuVX@pedro-suse>
On 5/18/26 8:52 PM, Pedro Falcato wrote:
> On Sat, May 16, 2026 at 01:24:24AM +0900, Harry Yoo (Oracle) wrote:
>> Background
>> ==========
>>
>> Sheaves were introduced in v6.18, and starting from v7.0, they are
>> enabled for all slab caches (except for kmem_cache{,_node}). In the
>> pre-sheaves era, there was a cpu_partial parameter to tune the number
>> of objects cached per CPU. However, sheaves don't have an equivalent
>> and the sheaf capacity is determined in the kernel code.
>
> What semantic do you need from this?
The intent is to allow adjusting sheaf capacity to mitigate per-node
barn / slab list contention on the slowpath (for servers with many
CPUs), similar to the 'cpu_partial' tunable in SLUB and the 'limit'
tunable in SLAB.
However, the semantics are slightly different from 'cpu_partial' and
'limit', as changing sheaf_capacity also affects the number of objects
cached in the barn.
>> Challenges
>> ==========
>>
>> 1. Allocations and frees can happen concurrently at any point between
>> these steps, and we cannot introduce heavyweight synchronization
>> mechanisms on the fastpath.
>>
>> 2. Currently, cache_has_sheaves() checks whether a cache has sheaves.
>> This works now because sheaves cannot be enabled or disabled once
>> the cache is created.
>>
>> The question "Does this cache has sheaves?" should be split into
>> "Does this cache support sheaves?" and "Does this CPU actually has
>> sheaves enabled right now?".
>>
>> 3. Once the sheaf capacity update is complete, no sheaf with stale
>> capacity must remain.
>
> Why? I don't see a huge problem with having multiple sheaves with different
> capacities, as long as you adequately, opportunistically kill the sheaves
> if they don't have the desired size (say, once a sheaf is fully empty).
Haha, you got me.
Right, enforcing a single capacity at any given point introduced so much
complexity that I started wondering myself about whether this is really
essential.
My main concern was that the performance characteristics would become
too unpredictable, but actually, users can avoid that by disabling
sheaves, shrinking it, and re-enabling it. So that's not an enough
justification.
When I first started, I was quite cautious and obsessed with the
invariant because many parts of the current implementation assume "a
kmem_cache has only a single capacity, and it doesn't change", but
that's also addressed by this patchset. So that's not a big issue either.
I agree that it is worth trying to allow sheaves of different capacities
and hopefully that would be less intrusive. Let's see.
Thank you, Pedro.
--
Cheers,
Harry / Hyeonggon
next prev parent reply other threads:[~2026-05-20 4:35 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-05-15 16:24 Harry Yoo (Oracle)
2026-05-15 16:24 ` [PATCH RFC 1/8] mm/slab: do not store cache pointer in struct slab_sheaf Harry Yoo (Oracle)
2026-05-19 4:08 ` Hao Li
2026-05-15 16:24 ` [PATCH RFC 2/8] mm/slab: change sheaf_capacity type to unsigned short Harry Yoo (Oracle)
2026-05-15 16:24 ` [PATCH RFC 3/8] mm/slab: track capacity per sheaf Harry Yoo (Oracle)
2026-05-15 16:24 ` [PATCH RFC 4/8] mm/slab: allow bootstrap_cache_sheaves() to fail Harry Yoo (Oracle)
2026-05-15 16:24 ` [PATCH RFC 5/8] mm/slab: rework cache_has_sheaves() to check immutable properties only Harry Yoo (Oracle)
2026-05-15 16:24 ` [PATCH RFC 6/8] mm/slab: allow changing sheaf_capacity at runtime Harry Yoo (Oracle)
2026-05-17 8:30 ` Yeoreum Yun
2026-05-18 6:53 ` Harry Yoo (Oracle)
2026-05-15 16:24 ` [PATCH RFC 7/8] mm/slab: add pcs->lock lockdep assert when accessing the barn Harry Yoo (Oracle)
2026-05-15 16:24 ` [PATCH RFC 8/8] mm/slab: allow changing max_{full,empty}_sheaves at runtime Harry Yoo (Oracle)
2026-05-18 11:52 ` [PATCH RFC 0/8] mm/slab: enable runtime sheaves tuning Pedro Falcato
2026-05-20 4:35 ` Harry Yoo [this message]
2026-06-09 12:52 ` Vlastimil Babka (SUSE)
2026-06-09 13:54 ` 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=682945f5-2d00-4bc8-8e23-59189b4472c6@kernel.org \
--to=harry@kernel.org \
--cc=akpm@linux-foundation.org \
--cc=cl@gentwo.org \
--cc=hao.li@linux.dev \
--cc=liam@infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=pfalcato@suse.de \
--cc=rientjes@google.com \
--cc=roman.gushchin@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®