From: Vlastimil Babka <vbabka@suse.cz>
To: "Christoph Lameter (Ampere)" <cl@gentwo.org>
Cc: chengming.zhou@linux.dev, penberg@kernel.org,
rientjes@google.com, iamjoonsoo.kim@lge.com,
akpm@linux-foundation.org, roman.gushchin@linux.dev,
42.hyeyoo@gmail.com, willy@infradead.org, pcc@google.com,
tytso@mit.edu, maz@kernel.org, ruansy.fnst@fujitsu.com,
vishal.moola@gmail.com, lrh2000@pku.edu.cn, hughd@google.com,
linux-kernel@vger.kernel.org, linux-mm@kvack.org,
Chengming Zhou <zhouchengming@bytedance.com>
Subject: Re: [RFC PATCH v2 0/6] slub: Delay freezing of CPU partial slabs
Date: Mon, 23 Oct 2023 20:44:41 +0200 [thread overview]
Message-ID: <ba3d6ac7-6900-3e8d-46b5-8302ca61f8ef@suse.cz> (raw)
In-Reply-To: <fcb9b7f0-fb21-cce8-d452-766a5cc73d4a@gentwo.org>
On 10/23/23 19:00, Christoph Lameter (Ampere) wrote:
> On Mon, 23 Oct 2023, Vlastimil Babka wrote:
>
>>>
>>> The slab will be delay frozen when it's picked to actively use by the
>>> CPU, it becomes full at the same time, in which case we still need to
>>> rely on "frozen" bit to avoid manipulating its list. So the slab will
>>> be frozen only when activate use and be unfrozen only when deactivate.
>>
>> Interesting solution! I wonder if we could go a bit further and remove
>> acquire_slab() completely. Because AFAICS even after your changes,
>> acquire_slab() is still attempted including freezing the slab, which means
>> still doing an cmpxchg_double under the list_lock, and now also handling the
>> special case when it failed, but we at least filled percpu partial lists.
>> What if we only filled the partial list without freezing, and then froze the
>> first slab outside of the list_lock?
>>
>> Or more precisely, instead of returning the acquired "object" we would
>> return the first slab removed from partial list. I think it would simplify
>> the code a bit, and further reduce list_lock holding times.
>>
>> I'll also point out a few more details, but it's not a full detailed review
>> as the suggestion above, and another for 4/5, could mean a rather
>> significant change for v3.
>
> This is not that easy. The frozen bit indicates that list management does
> not have to be done for a slab if its processed in free. If you take a
> slab off the list without setting that bit then something else needs to
> provide the information that "frozen" provided.
Yes, that's the new slab_node_partial flag in patch 1, protected by list_lock.
> If the frozen bit changes can be handled in a different way than
> with cmpxchg then that is a good optimization.
Frozen bit stays the same, but some scenarios can now avoid it.
> For much of the frozen handling we must be holding the node list lock
> anyways in order to add/remove from the list. So we already have a lock
> that could be used to protect flag operations.
I can see the following differences between the traditional frozen bit and
the new flag:
frozen bit advantage:
- __slab_free() on an already-frozen slab can ignore list operations and
list_lock completely
frozen bit disadvantage:
- acquire_slab() trying to do cmpxchg_double() under list_lock (see commit
9b1ea29bc0d7)
slab_node_partial flag advantage:
- we can take slabs off from node partial list without cmpxchg_double()
- probably less cmpxchg_double() operations overall
slab_node_partial flag disadvantage:
- a __slab_free() that encouters a slab that's not frozen (but
slab_node_partial flag is not set) might have to do more work, including
taking the list_lock only to find out that slab_node_partial flag is false
(but AFAICS that happens only when the slab becomes fully free by the free
operation, thus relatively rarely).
Put together, I think we might indeed get the best of both if the frozen
flag is kept to use for cpu slabs, and we rely on slab_node_partial flag for
cpu partial slabs, as the series does.
next prev parent reply other threads:[~2023-10-23 18:44 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-10-21 14:43 chengming.zhou
2023-10-21 14:43 ` [RFC PATCH v2 1/6] slub: Keep track of whether slub is on the per-node partial list chengming.zhou
2023-10-23 12:32 ` Matthew Wilcox
2023-10-23 16:22 ` Matthew Wilcox
2023-10-24 1:57 ` Chengming Zhou
2023-10-21 14:43 ` [RFC PATCH v2 2/6] slub: Prepare __slab_free() for unfrozen partial slab out of node " chengming.zhou
2023-10-21 14:43 ` [RFC PATCH v2 3/6] slub: Don't freeze slabs for cpu partial chengming.zhou
2023-10-23 16:00 ` Vlastimil Babka
2023-10-24 2:39 ` Chengming Zhou
2023-10-21 14:43 ` [RFC PATCH v2 4/6] slub: Simplify acquire_slab() chengming.zhou
2023-10-21 14:43 ` [RFC PATCH v2 5/6] slub: Introduce get_cpu_partial() chengming.zhou
2023-10-21 14:43 ` [RFC PATCH v2 6/6] slub: Optimize deactivate_slab() chengming.zhou
2023-10-22 14:52 ` [RFC PATCH v2 0/6] slub: Delay freezing of CPU partial slabs Hyeonggon Yoo
2023-10-24 2:02 ` Chengming Zhou
2023-10-23 15:46 ` Vlastimil Babka
2023-10-23 17:00 ` Christoph Lameter (Ampere)
2023-10-23 18:44 ` Vlastimil Babka [this message]
2023-10-23 21:05 ` Christoph Lameter (Ampere)
2023-10-24 8:19 ` Vlastimil Babka
2023-10-24 11:03 ` Chengming Zhou
2023-10-24 2:20 ` Chengming Zhou
2023-10-24 8:20 ` Vlastimil Babka
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=ba3d6ac7-6900-3e8d-46b5-8302ca61f8ef@suse.cz \
--to=vbabka@suse.cz \
--cc=42.hyeyoo@gmail.com \
--cc=akpm@linux-foundation.org \
--cc=chengming.zhou@linux.dev \
--cc=cl@gentwo.org \
--cc=hughd@google.com \
--cc=iamjoonsoo.kim@lge.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=lrh2000@pku.edu.cn \
--cc=maz@kernel.org \
--cc=pcc@google.com \
--cc=penberg@kernel.org \
--cc=rientjes@google.com \
--cc=roman.gushchin@linux.dev \
--cc=ruansy.fnst@fujitsu.com \
--cc=tytso@mit.edu \
--cc=vishal.moola@gmail.com \
--cc=willy@infradead.org \
--cc=zhouchengming@bytedance.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