From: Mike Kravetz <mike.kravetz@oracle.com>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: David Hildenbrand <david@redhat.com>,
linux-mm@kvack.org, linux-kernel@vger.kernel.org,
Naoya Horiguchi <naoya.horiguchi@linux.dev>,
James Houghton <jthoughton@google.com>,
Peter Xu <peterx@redhat.com>, Michal Hocko <mhocko@suse.com>,
Yang Shi <shy828301@gmail.com>,
Vishal Moola <vishal.moola@gmail.com>,
Matthew Wilcox <willy@infradead.org>,
Muchun Song <songmuchun@bytedance.com>,
stable@vger.kernel.org
Subject: Re: [PATCH 1/2] mm: hugetlb: proc: check for hugetlb shared PMD in /proc/PID/smaps
Date: Fri, 27 Jan 2023 17:12:05 -0800 [thread overview]
Message-ID: <Y9R2ZXMxeF6Lpw4g@monkey> (raw)
In-Reply-To: <20230127150411.7c3b7b99fa4884a6af0b9351@linux-foundation.org>
On 01/27/23 15:04, Andrew Morton wrote:
> On Fri, 27 Jan 2023 17:23:39 +0100 David Hildenbrand <david@redhat.com> wrote:
>
> > On 26.01.23 23:27, Mike Kravetz wrote:
> > > A hugetlb page will have a mapcount of 1 if mapped by multiple processes
> > > via a shared PMD. This is because only the first process increases the
> > > map count, and subsequent processes just add the shared PMD page to
> > > their page table.
> > >
> > > page_mapcount is being used to decide if a hugetlb page is shared or
> > > private in /proc/PID/smaps. Pages referenced via a shared PMD were
> > > incorrectly being counted as private.
> > >
> > > To fix, check for a shared PMD if mapcount is 1. If a shared PMD is
> > > found count the hugetlb page as shared. A new helper to check for a
> > > shared PMD is added.
> > >
> > ...
> >
> > > --- a/fs/proc/task_mmu.c
> > > +++ b/fs/proc/task_mmu.c
> > > @@ -749,8 +749,14 @@ static int smaps_hugetlb_range(pte_t *pte, unsigned long hmask,
> > >
> > > if (mapcount >= 2)
> > > mss->shared_hugetlb += huge_page_size(hstate_vma(vma));
> > > - else
> > > - mss->private_hugetlb += huge_page_size(hstate_vma(vma));
> > > + else {
> >
> > Better:
> >
> > if (mapcount >= 2 || hugetlb_pmd_shared(pte))
> > mss->shared_hugetlb += huge_page_size(hstate_vma(vma));
> > else
> > mss->private_hugetlb += huge_page_size(hstate_vma(vma));
>
> Yup. And that local doesn't add any value?
>
> --- a/fs/proc/task_mmu.c~mm-hugetlb-proc-check-for-hugetlb-shared-pmd-in-proc-pid-smaps-fix
> +++ a/fs/proc/task_mmu.c
> @@ -745,18 +745,10 @@ static int smaps_hugetlb_range(pte_t *pt
> page = pfn_swap_entry_to_page(swpent);
> }
> if (page) {
> - int mapcount = page_mapcount(page);
> -
> - if (mapcount >= 2)
> + if (page_mapcount(page) >= 2 || hugetlb_pmd_shared(pte))
> mss->shared_hugetlb += huge_page_size(hstate_vma(vma));
> - else {
> - if (hugetlb_pmd_shared(pte))
> - mss->shared_hugetlb +=
> - huge_page_size(hstate_vma(vma));
> - else
> - mss->private_hugetlb +=
> - huge_page_size(hstate_vma(vma));
> - }
> + else
> + mss->private_hugetlb += huge_page_size(hstate_vma(vma));
> }
> return 0;
> }
Thank you both! That looks much better.
--
Mike Kravetz
next prev parent reply other threads:[~2023-01-28 1:13 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-01-26 22:27 [PATCH 0/2] Fixes for hugetlb mapcount at most 1 for shared PMDs Mike Kravetz
2023-01-26 22:27 ` [PATCH 1/2] mm: hugetlb: proc: check for hugetlb shared PMD in /proc/PID/smaps Mike Kravetz
2023-01-27 16:23 ` David Hildenbrand
2023-01-27 23:04 ` Andrew Morton
2023-01-28 1:12 ` Mike Kravetz [this message]
2023-01-30 12:36 ` Michal Hocko
2023-01-30 22:08 ` Mike Kravetz
2023-02-01 7:47 ` Michal Hocko
2023-02-01 21:05 ` Mike Kravetz
2023-02-03 13:40 ` Michal Hocko
2023-02-03 20:16 ` Mike Kravetz
2023-02-13 18:01 ` Michal Hocko
2023-02-14 1:40 ` Mike Kravetz
2023-01-26 22:27 ` [PATCH 2/2] migrate: hugetlb: Check for hugetlb shared PMD in node migration Mike Kravetz
2023-01-27 16:23 ` David Hildenbrand
2023-01-26 22:47 ` [PATCH 0/2] Fixes for hugetlb mapcount at most 1 for shared PMDs Andrew Morton
2023-01-26 22:48 ` Peter Xu
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=Y9R2ZXMxeF6Lpw4g@monkey \
--to=mike.kravetz@oracle.com \
--cc=akpm@linux-foundation.org \
--cc=david@redhat.com \
--cc=jthoughton@google.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=mhocko@suse.com \
--cc=naoya.horiguchi@linux.dev \
--cc=peterx@redhat.com \
--cc=shy828301@gmail.com \
--cc=songmuchun@bytedance.com \
--cc=stable@vger.kernel.org \
--cc=vishal.moola@gmail.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.