All of lore.kernel.org
 help / color / mirror / Atom feed
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>

  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 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.