From: Harry Yoo <harry.yoo@oracle.com>
To: Daniel Gomez <da.gomez@kernel.org>
Cc: Vlastimil Babka <vbabka@suse.cz>,
Suren Baghdasaryan <surenb@google.com>,
"Liam R. Howlett" <Liam.Howlett@oracle.com>,
Christoph Lameter <cl@gentwo.org>,
David Rientjes <rientjes@google.com>,
Roman Gushchin <roman.gushchin@linux.dev>,
Uladzislau Rezki <urezki@gmail.com>,
Sidhartha Kumar <sidhartha.kumar@oracle.com>,
linux-mm@kvack.org, linux-kernel@vger.kernel.org,
rcu@vger.kernel.org, maple-tree@lists.infradead.org,
linux-modules@vger.kernel.org,
Luis Chamberlain <mcgrof@kernel.org>,
Petr Pavlu <petr.pavlu@suse.com>,
Sami Tolvanen <samitolvanen@google.com>,
Aaron Tomlin <atomlin@atomlin.com>,
Lucas De Marchi <lucas.demarchi@intel.com>
Subject: Re: [PATCH v8 04/23] slab: add sheaf support for batching kfree_rcu() operations
Date: Mon, 3 Nov 2025 12:17:46 +0900 [thread overview]
Message-ID: <aQge2rmgRvd1JKxc@harry> (raw)
In-Reply-To: <0406562e-2066-4cf8-9902-b2b0616dd742@kernel.org>
On Fri, Oct 31, 2025 at 10:32:54PM +0100, Daniel Gomez wrote:
>
>
> On 10/09/2025 10.01, Vlastimil Babka wrote:
> > Extend the sheaf infrastructure for more efficient kfree_rcu() handling.
> > For caches with sheaves, on each cpu maintain a rcu_free sheaf in
> > addition to main and spare sheaves.
> >
> > kfree_rcu() operations will try to put objects on this sheaf. Once full,
> > the sheaf is detached and submitted to call_rcu() with a handler that
> > will try to put it in the barn, or flush to slab pages using bulk free,
> > when the barn is full. Then a new empty sheaf must be obtained to put
> > more objects there.
> >
> > It's possible that no free sheaves are available to use for a new
> > rcu_free sheaf, and the allocation in kfree_rcu() context can only use
> > GFP_NOWAIT and thus may fail. In that case, fall back to the existing
> > kfree_rcu() implementation.
> >
> > Expected advantages:
> > - batching the kfree_rcu() operations, that could eventually replace the
> > existing batching
> > - sheaves can be reused for allocations via barn instead of being
> > flushed to slabs, which is more efficient
> > - this includes cases where only some cpus are allowed to process rcu
> > callbacks (Android)
> >
> > Possible disadvantage:
> > - objects might be waiting for more than their grace period (it is
> > determined by the last object freed into the sheaf), increasing memory
> > usage - but the existing batching does that too.
> >
> > Only implement this for CONFIG_KVFREE_RCU_BATCHED as the tiny
> > implementation favors smaller memory footprint over performance.
> >
> > Also for now skip the usage of rcu sheaf for CONFIG_PREEMPT_RT as the
> > contexts where kfree_rcu() is called might not be compatible with taking
> > a barn spinlock or a GFP_NOWAIT allocation of a new sheaf taking a
> > spinlock - the current kfree_rcu() implementation avoids doing that.
> >
> > Teach kvfree_rcu_barrier() to flush all rcu_free sheaves from all caches
> > that have them. This is not a cheap operation, but the barrier usage is
> > rare - currently kmem_cache_destroy() or on module unload.
> >
> > Add CONFIG_SLUB_STATS counters free_rcu_sheaf and free_rcu_sheaf_fail to
> > count how many kfree_rcu() used the rcu_free sheaf successfully and how
> > many had to fall back to the existing implementation.
> >
> > Signed-off-by: Vlastimil Babka <vbabka@suse.cz>
>
> Hi Vlastimil,
>
> This patch increases kmod selftest (stress module loader) runtime by about
> ~50-60%, from ~200s to ~300s total execution time. My tested kernel has
> CONFIG_KVFREE_RCU_BATCHED enabled. Any idea or suggestions on what might be
> causing this, or how to address it?
This is likely due to increased kvfree_rcu_barrier() during module unload.
It currently iterates over all CPUs x slab caches (that enabled sheaves,
there should be only a few now) pair to make sure rcu sheaf is flushed
by the time kvfree_rcu_barrier() returns.
Just being curious, do you have any serious workload that depends on
the performance of module unload?
--
Cheers,
Harry / Hyeonggon
next prev parent reply other threads:[~2025-11-03 3:18 UTC|newest]
Thread overview: 100+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-09-10 8:01 [PATCH v8 00/23] SLUB percpu sheaves Vlastimil Babka
2025-09-10 8:01 ` [PATCH v8 01/23] locking/local_lock: Expose dep_map in local_trylock_t Vlastimil Babka
2025-09-24 16:49 ` Suren Baghdasaryan
2025-09-10 8:01 ` [PATCH v8 02/23] slab: simplify init_kmem_cache_nodes() error handling Vlastimil Babka
2025-09-24 16:52 ` Suren Baghdasaryan
2025-09-10 8:01 ` [PATCH v8 03/23] slab: add opt-in caching layer of percpu sheaves Vlastimil Babka
2025-12-02 8:48 ` [PATCH] slub: add barn_get_full_sheaf() and refine empty-main sheaf Hao Li
2025-12-02 8:55 ` Hao Li
2025-12-02 9:00 ` slub: add barn_get_full_sheaf() and refine empty-main sheaf replacement Hao Li
2025-12-03 5:46 ` Harry Yoo
2025-12-03 11:15 ` Hao Li
2025-12-07 13:59 ` Harry Yoo
2025-12-08 18:51 ` Vlastimil Babka
2025-12-09 2:39 ` Harry Yoo
2025-12-09 9:43 ` Hao Li
2025-12-09 9:42 ` Hao Li
2025-09-10 8:01 ` [PATCH v8 04/23] slab: add sheaf support for batching kfree_rcu() operations Vlastimil Babka
2025-09-12 0:38 ` Sergey Senozhatsky
2025-09-12 7:03 ` Vlastimil Babka
2025-09-17 8:30 ` Harry Yoo
2025-09-17 9:55 ` Vlastimil Babka
2025-09-17 11:32 ` Harry Yoo
2025-09-17 12:05 ` Vlastimil Babka
2025-09-17 13:07 ` Harry Yoo
2025-09-17 13:21 ` Vlastimil Babka
2025-09-17 13:34 ` Harry Yoo
2025-09-17 14:14 ` Vlastimil Babka
2025-09-18 8:09 ` Vlastimil Babka
2025-09-19 6:47 ` Harry Yoo
2025-09-19 7:02 ` Vlastimil Babka
2025-09-19 8:59 ` Harry Yoo
2025-09-25 4:35 ` Suren Baghdasaryan
2025-09-25 8:52 ` Harry Yoo
2025-09-25 13:38 ` Suren Baghdasaryan
2025-09-26 10:08 ` Vlastimil Babka
2025-09-26 15:41 ` Suren Baghdasaryan
2025-09-17 11:36 ` Paul E. McKenney
2025-09-17 12:13 ` Vlastimil Babka
2025-10-31 21:32 ` Daniel Gomez
2025-11-03 3:17 ` Harry Yoo [this message]
2025-11-05 11:25 ` Vlastimil Babka
2025-11-27 14:00 ` Daniel Gomez
2025-11-27 19:29 ` Suren Baghdasaryan
2025-11-28 11:37 ` [PATCH V1] mm/slab: introduce kvfree_rcu_barrier_on_cache() for cache destruction Harry Yoo
2025-11-28 12:22 ` Harry Yoo
2025-11-28 12:38 ` Daniel Gomez
2025-12-02 9:29 ` Jon Hunter
2025-12-02 10:18 ` Harry Yoo
2025-11-27 11:38 ` [PATCH v8 04/23] slab: add sheaf support for batching kfree_rcu() operations Jon Hunter
2025-11-27 11:50 ` Jon Hunter
2025-11-27 12:33 ` Harry Yoo
2025-11-27 12:48 ` Harry Yoo
2025-11-28 8:57 ` Jon Hunter
2025-12-01 6:55 ` Harry Yoo
2025-11-27 13:18 ` Vlastimil Babka
2025-11-28 8:59 ` Jon Hunter
2025-09-10 8:01 ` [PATCH v8 05/23] slab: sheaf prefilling for guaranteed allocations Vlastimil Babka
2025-09-10 8:01 ` [PATCH v8 06/23] slab: determine barn status racily outside of lock Vlastimil Babka
2025-09-10 8:01 ` [PATCH v8 07/23] slab: skip percpu sheaves for remote object freeing Vlastimil Babka
2025-09-25 16:14 ` Suren Baghdasaryan
2025-09-10 8:01 ` [PATCH v8 08/23] slab: allow NUMA restricted allocations to use percpu sheaves Vlastimil Babka
2025-09-25 16:27 ` Suren Baghdasaryan
2025-09-10 8:01 ` [PATCH v8 09/23] maple_tree: remove redundant __GFP_NOWARN Vlastimil Babka
2025-09-10 8:01 ` [PATCH v8 10/23] tools/testing/vma: clean up stubs in vma_internal.h Vlastimil Babka
2025-09-10 8:01 ` [PATCH v8 11/23] maple_tree: Drop bulk insert support Vlastimil Babka
2025-09-25 16:38 ` Suren Baghdasaryan
2025-09-10 8:01 ` [PATCH v8 12/23] tools/testing/vma: Implement vm_refcnt reset Vlastimil Babka
2025-09-25 16:38 ` Suren Baghdasaryan
2025-09-10 8:01 ` [PATCH v8 13/23] tools/testing: Add support for changes to slab for sheaves Vlastimil Babka
2025-09-26 23:28 ` Suren Baghdasaryan
2025-09-10 8:01 ` [PATCH v8 14/23] mm, vma: use percpu sheaves for vm_area_struct cache Vlastimil Babka
2025-09-10 8:01 ` [PATCH v8 15/23] maple_tree: use percpu sheaves for maple_node_cache Vlastimil Babka
2025-09-12 2:20 ` Liam R. Howlett
2025-10-16 15:16 ` D, Suneeth
2025-10-16 16:15 ` Vlastimil Babka
2025-10-17 18:26 ` D, Suneeth
2025-09-10 8:01 ` [PATCH v8 16/23] tools/testing: include maple-shim.c in maple.c Vlastimil Babka
2025-09-26 23:45 ` Suren Baghdasaryan
2025-09-10 8:01 ` [PATCH v8 17/23] testing/radix-tree/maple: Hack around kfree_rcu not existing Vlastimil Babka
2025-09-26 23:53 ` Suren Baghdasaryan
2025-09-10 8:01 ` [PATCH v8 18/23] maple_tree: Use kfree_rcu in ma_free_rcu Vlastimil Babka
2025-09-17 11:46 ` Harry Yoo
2025-09-27 0:05 ` Suren Baghdasaryan
2025-09-10 8:01 ` [PATCH v8 19/23] maple_tree: Replace mt_free_one() with kfree() Vlastimil Babka
2025-09-27 0:06 ` Suren Baghdasaryan
2025-09-10 8:01 ` [PATCH v8 20/23] tools/testing: Add support for prefilled slab sheafs Vlastimil Babka
2025-09-27 0:28 ` Suren Baghdasaryan
2025-09-10 8:01 ` [PATCH v8 21/23] maple_tree: Prefilled sheaf conversion and testing Vlastimil Babka
2025-09-27 1:08 ` Suren Baghdasaryan
2025-09-29 7:30 ` Vlastimil Babka
2025-09-29 16:51 ` Liam R. Howlett
2025-09-10 8:01 ` [PATCH v8 22/23] maple_tree: Add single node allocation support to maple state Vlastimil Babka
2025-09-27 1:17 ` Suren Baghdasaryan
2025-09-29 7:39 ` Vlastimil Babka
2025-09-10 8:01 ` [PATCH v8 23/23] maple_tree: Convert forking to use the sheaf interface Vlastimil Babka
2025-10-07 6:34 ` [PATCH v8 00/23] SLUB percpu sheaves Christoph Hellwig
2025-10-07 8:03 ` Vlastimil Babka
2025-10-08 6:04 ` Christoph Hellwig
2025-10-15 8:32 ` Vlastimil Babka
2025-10-22 6:47 ` Christoph Hellwig
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=aQge2rmgRvd1JKxc@harry \
--to=harry.yoo@oracle.com \
--cc=Liam.Howlett@oracle.com \
--cc=atomlin@atomlin.com \
--cc=cl@gentwo.org \
--cc=da.gomez@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=linux-modules@vger.kernel.org \
--cc=lucas.demarchi@intel.com \
--cc=maple-tree@lists.infradead.org \
--cc=mcgrof@kernel.org \
--cc=petr.pavlu@suse.com \
--cc=rcu@vger.kernel.org \
--cc=rientjes@google.com \
--cc=roman.gushchin@linux.dev \
--cc=samitolvanen@google.com \
--cc=sidhartha.kumar@oracle.com \
--cc=surenb@google.com \
--cc=urezki@gmail.com \
--cc=vbabka@suse.cz \
/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.