All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Matthew Wilcox (Oracle)" <willy@infradead.org>
To: linux-mm@kvack.org
Cc: "Matthew Wilcox (Oracle)" <willy@infradead.org>
Subject: [PATCH v2 00/16] Allocate and free frozen pages
Date: Tue,  9 Aug 2022 18:18:38 +0100	[thread overview]
Message-ID: <20220809171854.3725722-1-willy@infradead.org> (raw)

Slab does not need to use the page refcount at all, and it can avoid
an atomic operation on page free.  Hugetlb wants to delay setting the
refcount until it has assembled a complete gigantic page.  We already
have the ability to freeze a page (safely reduce its reference count to
0), so this patchset adds APIs to allocate and free pages which are in
a frozen state.

This patchset is also a step towards the Glorious Future in which struct
page doesn't have a refcount; the users which need a refcount will have
one in their per-allocation memdesc.

Compared to v1, this patchset has been tested and survives a few hours
of xfstests.  Vlastimil fixed a bug where compaction needed to initialise
the page refcount itself.  As part of that debugging, I split the old 4/6
into ten patches; I've opted to leave it that way to aid anybody else
trying to bisect a bug in these patches in future.  I also dropped the
old patch 1/6 and replaced it with one that moves the call to page_zone()
a few lines earlier to reflect other changes that were made to page_alloc.

Matthew Wilcox (Oracle) (16):
  mm/page_alloc: Cache page_zone() result in free_unref_page()
  mm/page_alloc: Rename free_the_page() to free_frozen_pages()
  mm/page_alloc: Export free_frozen_pages() instead of free_unref_page()
  mm/page_alloc: Move set_page_refcounted() to callers of
    post_alloc_hook()
  mm/page_alloc: Move set_page_refcounted() to callers of
    prep_new_page()
  mm/page_alloc: Move set_page_refcounted() to callers of
    get_page_from_freelist()
  mm/page_alloc: Move set_page_refcounted() to callers of
    __alloc_pages_cpuset_fallback()
  mm/page_alloc: Move set_page_refcounted() to callers of
    __alloc_pages_may_oom()
  mm/page_alloc: Move set_page_refcounted() to callers of
    __alloc_pages_direct_compact()
  mm/page_alloc: Move set_page_refcounted() to callers of
    __alloc_pages_direct_reclaim()
  mm/page_alloc: Move set_page_refcounted() to callers of
    __alloc_pages_slowpath()
  mm/page_alloc: Move set_page_refcounted() to end of __alloc_pages()
  mm/page_alloc: Add __alloc_frozen_pages()
  mm/mempolicy: Add alloc_frozen_pages()
  slab: Allocate frozen pages
  slub: Allocate frozen pages

 mm/compaction.c |  1 +
 mm/internal.h   | 15 ++++++++++--
 mm/mempolicy.c  | 61 ++++++++++++++++++++++++++++++-------------------
 mm/page_alloc.c | 53 +++++++++++++++++++++++++-----------------
 mm/slab.c       | 23 +++++++++----------
 mm/slub.c       | 26 ++++++++++-----------
 mm/swap.c       |  2 +-
 7 files changed, 109 insertions(+), 72 deletions(-)

-- 
2.35.1



             reply	other threads:[~2022-08-09 17:19 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-08-09 17:18 Matthew Wilcox (Oracle) [this message]
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
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=20220809171854.3725722-1-willy@infradead.org \
    --to=willy@infradead.org \
    --cc=linux-mm@kvack.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.