linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
From: Peter Collingbourne <pcc@google.com>
To: Peter Xu <peterx@redhat.com>
Cc: Andrew Morton <akpm@linux-foundation.org>,
	Kostya Kortchinsky <kostyak@google.com>,
	 Evgenii Stepanov <eugenis@google.com>,
	Andrea Arcangeli <aarcange@redhat.com>,
	 Linux Memory Management List <linux-mm@kvack.org>
Subject: Re: [PATCH v4] mm: improve mprotect(R|W) efficiency on pages referenced once
Date: Thu, 27 May 2021 16:37:11 -0700	[thread overview]
Message-ID: <CAMn1gO52iJKhSSBMBZNbG956ZmEw2Me5CqzQGDK1jKxszGo_hw@mail.gmail.com> (raw)
In-Reply-To: <YLAR//opAHZmgEAF@t490s>

On Thu, May 27, 2021 at 2:41 PM Peter Xu <peterx@redhat.com> wrote:
>
> Peter,
>
> On Thu, May 27, 2021 at 12:04:53PM -0700, Peter Collingbourne wrote:
>
> [...]
>
> > +static bool may_avoid_write_fault(pte_t pte, struct vm_area_struct *vma,
> > +                               unsigned long cp_flags)
> > +{
> > +     if (!(cp_flags & MM_CP_DIRTY_ACCT)) {
> > +             if (!(vma_is_anonymous(vma) && (vma->vm_flags & VM_WRITE)))
> > +                     return false;
> > +
> > +             if (page_count(pte_page(pte)) != 1)
> > +                     return false;
> > +     }
>
> Can we make MM_CP_DIRTY_ACCT still in charge?  IIUC that won't affect your use
> case, something like:
>
>        /* Never apply trick if MM_CP_DIRTY_ACCT not set */
>        if (!(cp_flags & MM_CP_DIRTY_ACCT))
>            return false;
>
> The thing is that's really what MM_CP_DIRTY_ACCT is about, imho (as its name
> shows).  Say, we should start to count on the dirty bit for applying the write
> bit only if that flag set.  With above, I think we can drop the pte_uffd_wp()
> check below because uffd_wp never applies MM_CP_DIRTY_ACCT when do
> change_protection().

I don't think that would work. The anonymous pages that we're
interesting in optimizing are private writable pages, for which
vma_wants_writenotify(vma, vma->vm_page_prot) would return false (and
thus MM_CP_DIRTY_ACCT would not be set, and thus your code would
disable the optimization), because of this code at the top of
vma_wants_writenotify:

        /* If it was private or non-writable, the write bit is already clear */
        if ((vm_flags & (VM_WRITE|VM_SHARED)) != ((VM_WRITE|VM_SHARED)))
                return 0;

IIUC, dirty accountable is about whether we can always apply the
optimization no matter what the ref count is, so it isn't suitable for
situations where we need to check the ref count.

Peter


  reply	other threads:[~2021-05-27 23:37 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-05-27 19:04 [PATCH v4] mm: improve mprotect(R|W) efficiency on pages referenced once Peter Collingbourne
2021-05-27 21:41 ` Peter Xu
2021-05-27 23:37   ` Peter Collingbourne [this message]
2021-05-28  1:21     ` Peter Xu
2021-05-28  1:35       ` Peter Collingbourne
2021-05-28 12:32         ` Peter Xu
2021-05-31 22:00           ` Peter Xu
2021-06-01  0:44 ` Andrew Morton

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=CAMn1gO52iJKhSSBMBZNbG956ZmEw2Me5CqzQGDK1jKxszGo_hw@mail.gmail.com \
    --to=pcc@google.com \
    --cc=aarcange@redhat.com \
    --cc=akpm@linux-foundation.org \
    --cc=eugenis@google.com \
    --cc=kostyak@google.com \
    --cc=linux-mm@kvack.org \
    --cc=peterx@redhat.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).