Re: [PATCH v3 2/2] mm/slub: detach and reattach partial slabs in batch
From: Harry Yoo
Date: Sun May 31 2026 - 23:51:59 EST
On 5/29/26 12:50 PM, Hao Li wrote:
> get_partial_node_bulk() moves each selected slab from the node's
> partial list to the local pc->slabs list using a remove_partial() and
> list_add() pair. In practice, the loop often detaches several adjacent
> slabs. Doing this individually repeatedly manipulates list pointers
> while holding n->list_lock, which causes unnecessary churn.
>
> To demonstrate this, the counts below show how often single vs. multiple
> consecutive slabs are retrieved during a will-it-scale mmap stress test:
>
> consecutive_slabs_count frequency
> = 1 277345324
> = 2 335238023
> = 3 175717884
>> = 4 88862337
>
> The data confirms that retrieving multiple contiguous slabs is highly
> frequent.
>
> To optimize this, track contiguous runs of matching slabs and move each
> run in a single operation using list_bulk_move_tail(). This reduces list
> pointer churn inside the lock critical section.
>
> Apply the same optimization to __refill_objects_node() when reattaching
> leftover partial slabs back to the node's partial list.
>
> The will-it-scale mmap benchmark shows a 2% ~ 5% performance improvement
> after applying this patch.
>
> Signed-off-by: Hao Li <hao.li@xxxxxxxxx>
> ---
Reviewed-by: Harry Yoo (Oracle) <harry@xxxxxxxxxx>
--
Cheers,
Harry / Hyeonggon
Attachment:
OpenPGP_signature.asc
Description: OpenPGP digital signature