From: Hao Li <hao.li@linux.dev>
To: Vinicius Costa Gomes <vinicius.gomes@intel.com>
Cc: vbabka@kernel.org, harry@kernel.org, akpm@linux-foundation.org,
cl@gentwo.org, rientjes@google.com, roman.gushchin@linux.dev,
linux-mm@kvack.org, linux-kernel@vger.kernel.orgg
Subject: Re: [RFC PATCH] slub: spill refill leftover objects into percpu sheaves
Date: Thu, 16 Apr 2026 13:49:01 +0800 [thread overview]
Message-ID: <wamsxmuhcbr6hj5y53bheub4cmkq7pd3psntl66o74k4bmtygi@qhyse67jvr3f> (raw)
In-Reply-To: <87a4v47xk5.fsf@intel.com>
On Wed, Apr 15, 2026 at 01:55:54PM -0700, Vinicius Costa Gomes wrote:
> Hao Li <hao.li@linux.dev> writes:
>
> > When performing objects refill, we tend to optimistically assume that
> > there will be more allocation requests coming next; this is the
> > fundamental assumption behind this optimization.
> >
> > When __refill_objects_node() isolates a partial slab and satisfies a
> > bulk allocation from its freelist, the slab can still have a small tail
> > of free objects left over. Today those objects are freed back to the
> > slab immediately.
> >
> > If the leftover tail is local and small enough to fit, keep it in the
> > current CPU's sheaves instead. This avoids pushing those objects back
> > through the __slab_free slowpath.
> >
> > Add a helper to obtain both the freelist and its free-object count, and
> > then spill the remaining objects into a percpu sheaf when:
> > - the tail fits in a sheaf
> > - the slab is local to the current CPU
> > - the slab is not pfmemalloc
> > - the target sheaf has enough free space
> >
> > Otherwise keep the existing fallback and free the tail back to the slab.
> >
> > Also add a SHEAF_SPILL stat so the new path can be observed in SLUB
> > stats.
> >
> > On the mmap2 case in the will-it-scale benchmark suite, this patch can
> > improve performance by about 2~5%.
> >
> > Signed-off-by: Hao Li <hao.li@linux.dev>
> > ---
> >
> > This patch is an exploratory attempt to address the leftover objects and
> > partial slab issues in the refill path, and it is marked as RFC to warmly
> > welcome any feedback, suggestions, and discussion!
> >
>
> I was also looking at these regressions, but I went from a different
> direction, and ended up with 3 patches:
>
> 1. the regressions showed a lot of increase in the cache misses,
> which gave me the idea that a cache would help (and it seemed to help)
>
> 2. Allowing smaller refills (but potentially more frequent);
>
> 3. A cute (but with small impact) use of prefetch();
>
Great!
Thanks for sharing those infos!
> The numbers are here (the commentary from the bot are very hit or miss,
> so don't pay too much attention to them):
>
> https://github.com/vcgomes/linux/commit/c898c39ee8def5252942281353eda6acdd83d4ea
>
> I am re-running the tests against a more recent tree, but if you
> want to take a look:
>
> https://github.com/vcgomes/linux/tree/mm-sheaves-regression-timerfd
>
> Also, if you feel it's useful, I can send a RFC.
I also tried stashing leftover objects into the PCS before, but at the time I
observed that this could quickly drain the node partial list, which then led to
slab alloc/free churn, and the end result was a performance regression. So I
gave up this direction :/
I took a quick look at the code and performance report in your GitHub repo, and
the performance gains you showed there are really interesting to me!
I'm going to try testing it on my own machine as well.
Also, the idea of a warm_slab looks very interesting. I had previously thought
about something along similar lines, except that I was considering stashing
leftover untouched slabs at the per-CPU level. But that would effectively bring
back the old stale CPU partial list in another form, so I ended up dropping
that direction. But you direction is really interesting!
I'd be very happy to see a new approach come out of this. If it's convenient
for you, I'd love to see an RFC. Thanks!
--
Thanks,
Hao
prev parent reply other threads:[~2026-04-16 5:49 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-04-10 11:16 Hao Li
2026-04-14 8:39 ` Harry Yoo (Oracle)
2026-04-14 9:59 ` Hao Li
2026-04-15 10:20 ` Harry Yoo (Oracle)
2026-04-16 7:58 ` Hao Li
2026-04-16 8:13 ` Hao Li
2026-04-15 20:55 ` Vinicius Costa Gomes
2026-04-16 5:49 ` Hao Li [this message]
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=wamsxmuhcbr6hj5y53bheub4cmkq7pd3psntl66o74k4bmtygi@qhyse67jvr3f \
--to=hao.li@linux.dev \
--cc=akpm@linux-foundation.org \
--cc=cl@gentwo.org \
--cc=harry@kernel.org \
--cc=linux-kernel@vger.kernel.orgg \
--cc=linux-mm@kvack.org \
--cc=rientjes@google.com \
--cc=roman.gushchin@linux.dev \
--cc=vbabka@kernel.org \
--cc=vinicius.gomes@intel.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox