From: "Yin, Fengwei" <fengwei.yin@intel.com>
To: David Hildenbrand <david@redhat.com>, <linux-kernel@vger.kernel.org>
Cc: <linux-mm@kvack.org>, <linux-doc@vger.kernel.org>,
<cgroups@vger.kernel.org>, <linux-sh@vger.kernel.org>,
<linux-trace-kernel@vger.kernel.org>,
<linux-fsdevel@vger.kernel.org>,
"Andrew Morton" <akpm@linux-foundation.org>,
"Matthew Wilcox (Oracle)" <willy@infradead.org>,
Peter Xu <peterx@redhat.com>, Ryan Roberts <ryan.roberts@arm.com>,
Yang Shi <shy828301@gmail.com>, Zi Yan <ziy@nvidia.com>,
Jonathan Corbet <corbet@lwn.net>, Hugh Dickins <hughd@google.com>,
Yoshinori Sato <ysato@users.sourceforge.jp>,
Rich Felker <dalias@libc.org>,
John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>,
Chris Zankel <chris@zankel.net>,
Max Filippov <jcmvbkbc@gmail.com>,
"Muchun Song" <muchun.song@linux.dev>,
Miaohe Lin <linmiaohe@huawei.com>,
"Naoya Horiguchi" <naoya.horiguchi@nec.com>,
Richard Chang <richardycc@google.com>
Subject: Re: [PATCH v1 04/18] mm: track mapcount of large folios in single value
Date: Fri, 19 Apr 2024 22:02:48 +0800 [thread overview]
Message-ID: <7be194e4-a17d-452b-ae31-cb49f1530b5f@intel.com> (raw)
In-Reply-To: <20240409192301.907377-5-david@redhat.com>
On 4/10/2024 3:22 AM, David Hildenbrand wrote:
> Let's track the mapcount of large folios in a single value. The mapcount of
> a large folio currently corresponds to the sum of the entire mapcount and
> all page mapcounts.
>
> This sum is what we actually want to know in folio_mapcount() and it is
> also sufficient for implementing folio_mapped().
>
> With PTE-mapped THP becoming more important and more widely used, we want
> to avoid looping over all pages of a folio just to obtain the mapcount
> of large folios. The comment "In the common case, avoid the loop when no
> pages mapped by PTE" in folio_total_mapcount() does no longer hold for
> mTHP that are always mapped by PTE.
>
> Further, we are planning on using folio_mapcount() more
> frequently, and might even want to remove page mapcounts for large
> folios in some kernel configs. Therefore, allow for reading the mapcount of
> large folios efficiently and atomically without looping over any pages.
>
> Maintain the mapcount also for hugetlb pages for simplicity. Use the new
> mapcount to implement folio_mapcount() and folio_mapped(). Make
> page_mapped() simply call folio_mapped(). We can now get rid of
> folio_large_is_mapped().
>
> _nr_pages_mapped is now only used in rmap code and for debugging
> purposes. Keep folio_nr_pages_mapped() around, but document that its use
> should be limited to rmap internals and debugging purposes.
>
> This change implies one additional atomic add/sub whenever
> mapping/unmapping (parts of) a large folio.
>
> As we now batch RMAP operations for PTE-mapped THP during fork(),
> during unmap/zap, and when PTE-remapping a PMD-mapped THP, and we adjust
> the large mapcount for a PTE batch only once, the added overhead in the
> common case is small. Only when unmapping individual pages of a large folio
> (e.g., during COW), the overhead might be bigger in comparison, but it's
> essentially one additional atomic operation.
>
> Note that before the new mapcount would overflow, already our refcount
> would overflow: each mapping requires a folio reference. Extend the
> focumentation of folio_mapcount().
>
> Signed-off-by: David Hildenbrand <david@redhat.com>
Reviewed-by: Yin Fengwei <fengwei.yin@intel.com>
next prev parent reply other threads:[~2024-04-19 14:03 UTC|newest]
Thread overview: 43+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-04-09 19:22 [PATCH v1 00/18] mm: mapcount for large folios + page_mapcount() cleanups David Hildenbrand
2024-04-09 19:22 ` [PATCH v1 01/18] mm: allow for detecting underflows with page_mapcount() again David Hildenbrand
2024-04-09 20:06 ` Zi Yan
2024-04-09 21:42 ` Matthew Wilcox
2024-04-10 8:10 ` David Hildenbrand
2024-04-24 9:38 ` David Hildenbrand
2024-04-09 19:22 ` [PATCH v1 02/18] mm/rmap: always inline anon/file rmap duplication of a single PTE David Hildenbrand
2024-04-19 2:25 ` Yin, Fengwei
2024-04-19 9:14 ` David Hildenbrand
2024-04-19 14:01 ` Yin, Fengwei
2024-04-09 19:22 ` [PATCH v1 03/18] mm/rmap: add fast-path for small folios when adding/removing/duplicating David Hildenbrand
2024-04-19 14:02 ` Yin, Fengwei
2024-04-09 19:22 ` [PATCH v1 04/18] mm: track mapcount of large folios in single value David Hildenbrand
2024-04-09 20:13 ` Zi Yan
2024-04-10 8:20 ` David Hildenbrand
2024-04-18 14:50 ` Lance Yang
2024-04-18 15:09 ` David Hildenbrand
2024-04-19 0:31 ` Lance Yang
2024-04-19 14:02 ` Yin, Fengwei [this message]
2024-04-09 19:22 ` [PATCH v1 05/18] mm: improve folio_likely_mapped_shared() using the mapcount of large folios David Hildenbrand
2024-04-16 10:40 ` Lance Yang
2024-04-16 10:47 ` David Hildenbrand
2024-04-16 10:52 ` Lance Yang
2024-04-16 10:53 ` David Hildenbrand
2024-04-19 2:29 ` Yin, Fengwei
2024-04-19 9:19 ` David Hildenbrand
2024-04-19 13:47 ` Yin, Fengwei
2024-04-19 13:48 ` David Hildenbrand
2024-04-19 14:03 ` Yin, Fengwei
2024-04-09 19:22 ` [PATCH v1 06/18] mm: make folio_mapcount() return 0 for small typed folios David Hildenbrand
2024-04-24 9:40 ` David Hildenbrand
2024-04-09 19:22 ` [PATCH v1 07/18] mm/memory: use folio_mapcount() in zap_present_folio_ptes() David Hildenbrand
2024-04-09 19:22 ` [PATCH v1 08/18] mm/huge_memory: use folio_mapcount() in zap_huge_pmd() sanity check David Hildenbrand
2024-04-09 19:22 ` [PATCH v1 09/18] mm/memory-failure: use folio_mapcount() in hwpoison_user_mappings() David Hildenbrand
2024-04-09 19:22 ` [PATCH v1 10/18] mm/page_alloc: use folio_mapped() in __alloc_contig_migrate_range() David Hildenbrand
2024-04-09 19:22 ` [PATCH v1 11/18] mm/migrate: use folio_likely_mapped_shared() in add_page_for_migration() David Hildenbrand
2024-04-09 19:22 ` [PATCH v1 12/18] sh/mm/cache: use folio_mapped() in copy_from_user_page() David Hildenbrand
2024-04-09 19:22 ` [PATCH v1 13/18] mm/filemap: use folio_mapcount() in filemap_unaccount_folio() David Hildenbrand
2024-04-09 19:22 ` [PATCH v1 14/18] mm/migrate_device: use folio_mapcount() in migrate_vma_check_page() David Hildenbrand
2024-04-09 19:22 ` [PATCH v1 15/18] trace/events/page_ref: trace the raw page mapcount value David Hildenbrand
2024-04-09 19:22 ` [PATCH v1 16/18] xtensa/mm: convert check_tlb_entry() to sanity check folios David Hildenbrand
2024-04-09 19:23 ` [PATCH v1 17/18] mm/debug: print only page mapcount (excluding folio entire mapcount) in __dump_folio() David Hildenbrand
2024-04-09 19:23 ` [PATCH v1 18/18] Documentation/admin-guide/cgroup-v1/memory.rst: don't reference page_mapcount() David Hildenbrand
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=7be194e4-a17d-452b-ae31-cb49f1530b5f@intel.com \
--to=fengwei.yin@intel.com \
--cc=akpm@linux-foundation.org \
--cc=cgroups@vger.kernel.org \
--cc=chris@zankel.net \
--cc=corbet@lwn.net \
--cc=dalias@libc.org \
--cc=david@redhat.com \
--cc=glaubitz@physik.fu-berlin.de \
--cc=hughd@google.com \
--cc=jcmvbkbc@gmail.com \
--cc=linmiaohe@huawei.com \
--cc=linux-doc@vger.kernel.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=linux-sh@vger.kernel.org \
--cc=linux-trace-kernel@vger.kernel.org \
--cc=muchun.song@linux.dev \
--cc=naoya.horiguchi@nec.com \
--cc=peterx@redhat.com \
--cc=richardycc@google.com \
--cc=ryan.roberts@arm.com \
--cc=shy828301@gmail.com \
--cc=willy@infradead.org \
--cc=ysato@users.sourceforge.jp \
--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).