Re: [linux-next:master] [mm, slab] 298cdbf5f7: will-it-scale.per_process_ops 6.3% regression
"Vlastimil Babka (SUSE)" <[email protected]> Thu, 14 May 2026 18:00:06 +0200
| Newsgroups | dev.linux.lists.oe-lkp,org.kvack.linux-mm |
|---|---|
| Message-ID | <[email protected]> |
On 5/14/26 16:45, Vlastimil Babka (SUSE) wrote: > On 5/11/26 16:45, kernel test robot wrote: >> >> >> Hello, >> >> kernel test robot noticed a 6.3% regression of will-it-scale.per_process_ops on: > > Yay for an optimization that was supposed to have no tradeoffs :) Does this help? I don't expect much, but perhaps... - list_empty(&pc.slabs) is no longer unlikely when it can likely have a slab where we returned part of the freelist - let's ignore s->min_partial when returning slabs, we just pulled them from the list, it's unlikely there are too many free slabs, and unlikely we have free slabs to return. Maybe it will reduce the page alloc/frees and the code is simpler From 761946747d53b880855ac1e795ae0627be416c3e Mon Sep 17 00:00:00 2001 From: "Vlastimil Babka (SUSE)" <[email protected]> Date: Thu, 14 May 2026 17:55:31 +0200 Subject: [PATCH] mm, slab: simplify __refill_objects_node --- mm/slub.c | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/mm/slub.c b/mm/slub.c index 5d867349912b..0cc6c88f11e3 100644 --- a/mm/slub.c +++ b/mm/slub.c @@ -7187,26 +7187,16 @@ __refill_objects_node(struct kmem_cache *s, void **p, gfp_t gfp, unsigned int mi break; } - if (unlikely(!list_empty(&pc.slabs))) { + if (!list_empty(&pc.slabs)) { spin_lock_irqsave(&n->list_lock, flags); list_for_each_entry_safe(slab, slab2, &pc.slabs, slab_list) { - if (unlikely(!slab->inuse && n->nr_partial >= s->min_partial)) - continue; - list_del(&slab->slab_list); add_partial(n, slab, ADD_TO_HEAD); } spin_unlock_irqrestore(&n->list_lock, flags); - - /* any slabs left are completely free and for discard */ - list_for_each_entry_safe(slab, slab2, &pc.slabs, slab_list) { - - list_del(&slab->slab_list); - discard_slab(s, slab); - } } return refilled; -- 2.54.0