linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
From: Ryan Roberts <ryan.roberts@arm.com>
To: Andrew Morton <akpm@linux-foundation.org>,
	Matthew Wilcox <willy@infradead.org>,
	Yin Fengwei <fengwei.yin@intel.com>,
	David Hildenbrand <david@redhat.com>, Yu Zhao <yuzhao@google.com>,
	Yang Shi <shy828301@gmail.com>,
	"Huang, Ying" <ying.huang@intel.com>, Zi Yan <ziy@nvidia.com>,
	Nathan Chancellor <nathan@kernel.org>,
	Alexander Gordeev <agordeev@linux.ibm.com>,
	Gerald Schaefer <gerald.schaefer@linux.ibm.com>
Cc: Ryan Roberts <ryan.roberts@arm.com>,
	linux-kernel@vger.kernel.org, linux-mm@kvack.org
Subject: [PATCH v4 0/3] Optimize large folio interaction with deferred split
Date: Thu, 27 Jul 2023 15:18:34 +0100	[thread overview]
Message-ID: <20230727141837.3386072-1-ryan.roberts@arm.com> (raw)

Hi All,

This is v4 of a small series in support of my work to enable the use of large
folios for anonymous memory (known as "FLEXIBLE_THP" or "LARGE_ANON_FOLIO") [5].
It first makes it possible to add large, non-pmd-mappable folios to the deferred
split queue. Then it modifies zap_pte_range() to batch-remove spans of
physically contiguous pages from the rmap, which means that in the common case,
we elide the need to ever put the folio on the deferred split queue, thus
reducing lock contention and improving performance.

This becomes more visible once we have lots of large anonymous folios in the
system, and Huang Ying has suggested solving this needs to be a prerequisit for
merging the main FLEXIBLE_THP/LARGE_ANON_FOLIO work.

The series applies on top of v6.5-rc3 and a branch is available at [4].

NOTE: v3 is currently in mm-unstable and has a bug that affects s390, which this
version fixes.


Changes since v3 [3]
--------------------

- Fixed bug reported on s390 [6]
    - Since s390 enables MMU_GATHER_NO_GATHER, __tlb_remove_page() causes a ref
      to be dropped on the page, but we were still using the page after that
      function call.
    - Fix by using folio_get()/folio_put() to guarrantee lifetime of page
    - Thanks to Nathan Chancellor for the bug report and helping me get set up
      with s390!
- Don't use batch path if folio is not large


Changes since v2 [2]
--------------------

- patch 2: Reworked at Yu Zhou's request to reduce duplicated code.
    - page_remove_rmap() now forwards to folio_remove_rmap_range() for the
      !compound (PMD mapped) case.
    - Both page_remove_rmap() and folio_remove_rmap_range() share common
      epilogue via new helper function __remove_rmap_finish().
    - As a result of the changes, I've removed the previous Reviewed-bys.
- other 2 patches are unchanged.


Changes since v1 [1]
--------------------

- patch 2: Modified doc comment for folio_remove_rmap_range()
- patch 2: Hoisted _nr_pages_mapped manipulation out of page loop so its now
  modified once per folio_remove_rmap_range() call.
- patch 2: Added check that page range is fully contained by folio in
  folio_remove_rmap_range()
- patch 2: Fixed some nits raised by Huang, Ying for folio_remove_rmap_range()
- patch 3: Support batch-zap of all anon pages, not just those in anon vmas
- patch 3: Renamed various functions to make their use clear
- patch 3: Various minor refactoring/cleanups
- Added Reviewed-By tags - thanks!


[1] https://lore.kernel.org/linux-mm/20230717143110.260162-1-ryan.roberts@arm.com/
[2] https://lore.kernel.org/linux-mm/20230719135450.545227-1-ryan.roberts@arm.com/
[3] https://lore.kernel.org/linux-mm/20230720112955.643283-1-ryan.roberts@arm.com/
[4] https://gitlab.arm.com/linux-arm/linux-rr/-/tree/features/granule_perf/deferredsplit-lkml_v4
[5] https://lore.kernel.org/linux-mm/20230714160407.4142030-1-ryan.roberts@arm.com/
[6] https://lore.kernel.org/linux-mm/20230726161942.GA1123863@dev-arch.thelio-3990X/

Thanks,
Ryan


Ryan Roberts (3):
  mm: Allow deferred splitting of arbitrary large anon folios
  mm: Implement folio_remove_rmap_range()
  mm: Batch-zap large anonymous folio PTE mappings

 include/linux/rmap.h |   2 +
 mm/memory.c          | 132 +++++++++++++++++++++++++++++++++++++++++++
 mm/rmap.c            | 125 ++++++++++++++++++++++++++++++----------
 3 files changed, 229 insertions(+), 30 deletions(-)

--
2.25.1



             reply	other threads:[~2023-07-27 14:18 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-07-27 14:18 Ryan Roberts [this message]
2023-07-27 14:18 ` [PATCH v4 1/3] mm: Allow deferred splitting of arbitrary large anon folios Ryan Roberts
2023-07-27 14:18 ` [PATCH v4 2/3] mm: Implement folio_remove_rmap_range() Ryan Roberts
2023-07-27 14:18 ` [PATCH v4 3/3] mm: Batch-zap large anonymous folio PTE mappings Ryan Roberts
2023-07-27 17:22   ` Yu Zhao
2023-07-28  9:16     ` Ryan Roberts
2023-08-01  7:12       ` Yu Zhao
2023-08-03 13:57     ` David Hildenbrand
2023-08-03 13:38   ` David Hildenbrand
2023-08-03 13:50     ` David Hildenbrand
2023-08-03 13:56     ` Ryan Roberts
2023-08-03 14:10       ` David Hildenbrand
2023-08-03 14:15         ` Ryan Roberts
2023-08-03 14:21           ` David Hildenbrand
2023-08-03 14:28           ` Zi Yan
2023-08-02 16:42 ` [PATCH v4 0/3] Optimize large folio interaction with deferred split Ryan Roberts
2023-08-02 17:02   ` Yu Zhao
2023-08-03 12:01   ` Kirill A. Shutemov
2023-08-03 12:48     ` Ryan Roberts

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=20230727141837.3386072-1-ryan.roberts@arm.com \
    --to=ryan.roberts@arm.com \
    --cc=agordeev@linux.ibm.com \
    --cc=akpm@linux-foundation.org \
    --cc=david@redhat.com \
    --cc=fengwei.yin@intel.com \
    --cc=gerald.schaefer@linux.ibm.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=nathan@kernel.org \
    --cc=shy828301@gmail.com \
    --cc=willy@infradead.org \
    --cc=ying.huang@intel.com \
    --cc=yuzhao@google.com \
    --cc=ziy@nvidia.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;
as well as URLs for NNTP newsgroup(s).