All of lore.kernel.org
 help / color / mirror / Atom feed
From: Pavel Tatashin <pasha.tatashin@soleen.com>
To: Joao Martins <joao.m.martins@oracle.com>
Cc: Jason Gunthorpe <jgg@ziepe.ca>,
	LKML <linux-kernel@vger.kernel.org>,
	linux-mm <linux-mm@kvack.org>,
	Andrew Morton <akpm@linux-foundation.org>,
	Vlastimil Babka <vbabka@suse.cz>, Michal Hocko <mhocko@suse.com>,
	David Hildenbrand <david@redhat.com>,
	Oscar Salvador <osalvador@suse.de>,
	Dan Williams <dan.j.williams@intel.com>,
	Sasha Levin <sashal@kernel.org>,
	Tyler Hicks <tyhicks@linux.microsoft.com>,
	Joonsoo Kim <iamjoonsoo.kim@lge.com>,
	Mike Kravetz <mike.kravetz@oracle.com>,
	Steven Rostedt <rostedt@goodmis.org>,
	Ingo Molnar <mingo@redhat.com>,
	Peter Zijlstra <peterz@infradead.org>,
	Mel Gorman <mgorman@suse.de>,
	Matthew Wilcox <willy@infradead.org>,
	David Rientjes <rientjes@google.com>,
	John Hubbard <jhubbard@nvidia.com>,
	Linux Doc Mailing List <linux-doc@vger.kernel.org>,
	Ira Weiny <ira.weiny@intel.com>,
	linux-kselftest@vger.kernel.org, James Morris <jmorris@namei.org>
Subject: Re: [PATCH v8 02/14] mm/gup: check every subpage of a compound page during isolation
Date: Wed, 3 Feb 2021 09:51:32 -0500	[thread overview]
Message-ID: <CA+CK2bBSJ7T=jsukntQGqO0DoWE_MnhDwtHv-6rfXAPvznKh0Q@mail.gmail.com> (raw)
In-Reply-To: <05a66361-214c-2afe-22e4-12862ea1e4e2@oracle.com>

On Wed, Feb 3, 2021 at 8:23 AM Joao Martins <joao.m.martins@oracle.com> wrote:
>
> On 1/25/21 7:47 PM, Pavel Tatashin wrote:
> > When pages are isolated in check_and_migrate_movable_pages() we skip
> > compound number of pages at a time. However, as Jason noted, it is
> > not necessary correct that pages[i] corresponds to the pages that
> > we skipped. This is because it is possible that the addresses in
> > this range had split_huge_pmd()/split_huge_pud(), and these functions
> > do not update the compound page metadata.
> >
> > The problem can be reproduced if something like this occurs:
> >
> > 1. User faulted huge pages.
> > 2. split_huge_pmd() was called for some reason
> > 3. User has unmapped some sub-pages in the range
> > 4. User tries to longterm pin the addresses.
> >
> > The resulting pages[i] might end-up having pages which are not compound
> > size page aligned.
> >
> > Fixes: aa712399c1e8 ("mm/gup: speed up check_and_migrate_cma_pages() on huge page")
> > Reported-by: Jason Gunthorpe <jgg@nvidia.com>
> > Signed-off-by: Pavel Tatashin <pasha.tatashin@soleen.com>
> > Reviewed-by: Jason Gunthorpe <jgg@nvidia.com>
> > ---
>
> [...]
>
> >               /*
> >                * If we get a page from the CMA zone, since we are going to
> >                * be pinning these entries, we might as well move them out
> > @@ -1599,8 +1596,6 @@ static long check_and_migrate_cma_pages(struct mm_struct *mm,
> >                               }
> >                       }
> >               }
> > -
> > -             i += step;
> >       }
> >
>

Hi Joao,

> With this, longterm gup will 'regress' for hugetlbfs e.g. from ~6k -> 32k usecs when
> pinning a 16G hugetlb file.

Estimate or you actually measured?

>

> Splitting can only occur on THP right? If so, perhaps we could retain the @step increment

Yes, I do not think we can split HugePage, only THP.

> for compound pages but when !is_transparent_hugepage(head) or just PageHuge(head) like:
>
> +               if (!is_transparent_hugepage(head) && PageCompound(page))
> +                       i += (compound_nr(head) - (pages[i] - head));
>
> Or making specific to hugetlbfs:
>
> +               if (PageHuge(head))
> +                       i += (compound_nr(head) - (pages[i] - head));

Yes, this is reasonable optimization. I will submit a follow up patch
against linux-next.

Thank you,
Pasha

  reply	other threads:[~2021-02-03 14:52 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-01-25 19:47 [PATCH v8 00/14] prohibit pinning pages in ZONE_MOVABLE Pavel Tatashin
2021-01-25 19:47 ` [PATCH v8 01/14] mm/gup: don't pin migrated cma pages in movable zone Pavel Tatashin
2021-01-25 19:47 ` [PATCH v8 02/14] mm/gup: check every subpage of a compound page during isolation Pavel Tatashin
2021-02-03 13:22   ` Joao Martins
2021-02-03 14:51     ` Pavel Tatashin [this message]
2021-02-03 14:51       ` Pavel Tatashin
2021-02-03 15:32       ` Joao Martins
2021-02-03 16:46         ` Joao Martins
2021-02-03 14:53     ` Jason Gunthorpe
2021-02-03 16:13       ` Joao Martins
2021-02-03 18:00         ` Jason Gunthorpe
2021-01-25 19:47 ` [PATCH v8 03/14] mm/gup: return an error on migration failure Pavel Tatashin
2021-01-25 19:47 ` [PATCH v8 04/14] mm/gup: check for isolation errors Pavel Tatashin
2021-01-25 19:47 ` [PATCH v8 05/14] mm cma: rename PF_MEMALLOC_NOCMA to PF_MEMALLOC_PIN Pavel Tatashin
2021-01-25 19:47 ` [PATCH v8 06/14] mm: apply per-task gfp constraints in fast path Pavel Tatashin
2021-01-25 19:47 ` [PATCH v8 07/14] mm: honor PF_MEMALLOC_PIN for all movable pages Pavel Tatashin
     [not found]   ` <20210131130903.4875-1-lecopzer@gmail.com>
2021-01-31 16:03     ` Pavel Tatashin
2021-01-31 16:03       ` Pavel Tatashin
2021-01-25 19:47 ` [PATCH v8 08/14] mm/gup: do not migrate zero page Pavel Tatashin
2021-01-25 19:47 ` [PATCH v8 09/14] mm/gup: migrate pinned pages out of movable zone Pavel Tatashin
2021-01-25 19:47 ` [PATCH v8 10/14] memory-hotplug.rst: add a note about ZONE_MOVABLE and page pinning Pavel Tatashin
2021-01-25 19:47 ` [PATCH v8 11/14] mm/gup: change index type to long as it counts pages Pavel Tatashin
2021-01-25 19:47 ` [PATCH v8 12/14] mm/gup: longterm pin migration cleanup Pavel Tatashin
2021-01-25 19:47 ` [PATCH v8 13/14] selftests/vm: gup_test: fix test flag Pavel Tatashin
2021-01-25 19:47 ` [PATCH v8 14/14] selftests/vm: gup_test: test faulting in kernel, and verify pinnable pages Pavel Tatashin

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='CA+CK2bBSJ7T=jsukntQGqO0DoWE_MnhDwtHv-6rfXAPvznKh0Q@mail.gmail.com' \
    --to=pasha.tatashin@soleen.com \
    --cc=akpm@linux-foundation.org \
    --cc=dan.j.williams@intel.com \
    --cc=david@redhat.com \
    --cc=iamjoonsoo.kim@lge.com \
    --cc=ira.weiny@intel.com \
    --cc=jgg@ziepe.ca \
    --cc=jhubbard@nvidia.com \
    --cc=jmorris@namei.org \
    --cc=joao.m.martins@oracle.com \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-kselftest@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=mgorman@suse.de \
    --cc=mhocko@suse.com \
    --cc=mike.kravetz@oracle.com \
    --cc=mingo@redhat.com \
    --cc=osalvador@suse.de \
    --cc=peterz@infradead.org \
    --cc=rientjes@google.com \
    --cc=rostedt@goodmis.org \
    --cc=sashal@kernel.org \
    --cc=tyhicks@linux.microsoft.com \
    --cc=vbabka@suse.cz \
    --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.