From: Mel Gorman <mgorman@techsingularity.net>
To: Vlastimil Babka <vbabka@suse.cz>
Cc: "Matthew Wilcox (Oracle)" <willy@infradead.org>,
linux-mm@kvack.org,
William Kucharski <william.kucharski@oracle.com>,
David Hildenbrand <david@redhat.com>
Subject: Re: [PATCH v2 15/16] slab: Allocate frozen pages
Date: Wed, 10 Aug 2022 17:27:25 +0100 [thread overview]
Message-ID: <20220810162725.jhe4j3ai4enxpqx3@techsingularity.net> (raw)
In-Reply-To: <40a4a2d9-0029-2cb9-2d35-6329d5969292@suse.cz>
On Wed, Aug 10, 2022 at 02:31:11PM +0200, Vlastimil Babka wrote:
> On 8/9/22 19:18, Matthew Wilcox (Oracle) wrote:
> > Since slab does not use the page refcount, it can allocate and
> > free frozen pages, saving one atomic operation per free.
> >
> > Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
> > Reviewed-by: William Kucharski <william.kucharski@oracle.com>
>
> AFAICS the problem of has_unmovable_pages() is not addressed:
> https://lore.kernel.org/all/40d658da-6220-e05e-ba0b-d95c82f6bfb3@redhat.com/
>
> But I don't think it's sustainable approach to enhance the checks there with
> PageSlab() and then with whatever other user will adopt allocating frozen
> pages in the future. I guess it would be better to just be able to detect
> pages on pcplist without false positives. A new page type? Maybe the
> overhead of managing it would be negligible as we set page->index anyway for
> migratetype?
>
I think page type would be usable to identify a PCP page same as how
it's used to identify a buddy page. Most likely, this could be done in
check_pcp_refill, check_new_pcp (watch DEBUG_VM) and free_pcppages_bulk.
There would be a race between the last refcount being dropped and becoming
a PCP page but I doubt that matters to page isolation as I expect it retries.
The __Clear and __Set operations would add some overhead but it's almost
certainly cheaper than the put_page_testzero in __free_pages().
--
Mel Gorman
SUSE Labs
next prev parent reply other threads:[~2022-08-10 16:27 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-08-09 17:18 [PATCH v2 00/16] Allocate and free frozen pages Matthew Wilcox (Oracle)
2022-08-09 17:18 ` [PATCH v2 01/16] mm/page_alloc: Cache page_zone() result in free_unref_page() Matthew Wilcox (Oracle)
2022-08-10 1:56 ` Miaohe Lin
2022-08-10 6:31 ` Muchun Song
2022-08-10 15:00 ` Mel Gorman
2022-08-09 17:18 ` [PATCH v2 02/16] mm/page_alloc: Rename free_the_page() to free_frozen_pages() Matthew Wilcox (Oracle)
2022-08-10 6:36 ` Muchun Song
2022-08-09 17:18 ` [PATCH v2 03/16] mm/page_alloc: Export free_frozen_pages() instead of free_unref_page() Matthew Wilcox (Oracle)
2022-08-10 3:00 ` Miaohe Lin
2022-08-10 6:37 ` Muchun Song
2022-08-09 17:18 ` [PATCH v2 04/16] mm/page_alloc: Move set_page_refcounted() to callers of post_alloc_hook() Matthew Wilcox (Oracle)
2022-08-10 3:30 ` Miaohe Lin
2022-08-09 17:18 ` [PATCH v2 05/16] mm/page_alloc: Move set_page_refcounted() to callers of prep_new_page() Matthew Wilcox (Oracle)
2022-08-09 17:18 ` [PATCH v2 06/16] mm/page_alloc: Move set_page_refcounted() to callers of get_page_from_freelist() Matthew Wilcox (Oracle)
2022-08-09 17:18 ` [PATCH v2 07/16] mm/page_alloc: Move set_page_refcounted() to callers of __alloc_pages_cpuset_fallback() Matthew Wilcox (Oracle)
2022-08-09 17:18 ` [PATCH v2 08/16] mm/page_alloc: Move set_page_refcounted() to callers of __alloc_pages_may_oom() Matthew Wilcox (Oracle)
2022-08-09 17:18 ` [PATCH v2 09/16] mm/page_alloc: Move set_page_refcounted() to callers of __alloc_pages_direct_compact() Matthew Wilcox (Oracle)
2022-08-09 17:18 ` [PATCH v2 10/16] mm/page_alloc: Move set_page_refcounted() to callers of __alloc_pages_direct_reclaim() Matthew Wilcox (Oracle)
2022-08-09 17:18 ` [PATCH v2 11/16] mm/page_alloc: Move set_page_refcounted() to callers of __alloc_pages_slowpath() Matthew Wilcox (Oracle)
2022-08-09 17:18 ` [PATCH v2 12/16] mm/page_alloc: Move set_page_refcounted() to end of __alloc_pages() Matthew Wilcox (Oracle)
2022-08-09 17:18 ` [PATCH v2 13/16] mm/page_alloc: Add __alloc_frozen_pages() Matthew Wilcox (Oracle)
2022-08-09 17:18 ` [PATCH v2 14/16] mm/mempolicy: Add alloc_frozen_pages() Matthew Wilcox (Oracle)
2022-08-09 17:18 ` [PATCH v2 15/16] slab: Allocate frozen pages Matthew Wilcox (Oracle)
2022-08-10 12:31 ` Vlastimil Babka
2022-08-10 16:27 ` Mel Gorman [this message]
2022-08-09 17:18 ` [PATCH v2 16/16] slub: " Matthew Wilcox (Oracle)
2022-08-11 0:19 ` [PATCH v2 00/16] Allocate and free " Shakeel Butt
2022-08-12 0:13 ` Matthew Wilcox
2022-08-12 16:48 ` Shakeel Butt
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=20220810162725.jhe4j3ai4enxpqx3@techsingularity.net \
--to=mgorman@techsingularity.net \
--cc=david@redhat.com \
--cc=linux-mm@kvack.org \
--cc=vbabka@suse.cz \
--cc=william.kucharski@oracle.com \
--cc=willy@infradead.org \
/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.