From: Hugh Dickins <hughd@google.com>
To: Brian Geffon <bgeffon@google.com>
Cc: Andrew Morton <akpm@linux-foundation.org>,
Axel Rasmussen <axelrasmussen@google.com>,
Lokesh Gidra <lokeshgidra@google.com>,
Mike Rapoport <rppt@linux.vnet.ibm.com>,
Peter Xu <peterx@redhat.com>, Hugh Dickins <hughd@google.com>,
"Michael S . Tsirkin" <mst@redhat.com>,
linux-kernel@vger.kernel.org, linux-mm@kvack.org,
Andy Lutomirski <luto@amacapital.net>,
Vlastimil Babka <vbabka@suse.cz>,
Andrea Arcangeli <aarcange@redhat.com>,
Sonny Rao <sonnyrao@google.com>,
Minchan Kim <minchan@kernel.org>,
"Kirill A . Shutemov" <kirill@shutemov.name>,
Dmitry Safonov <dima@arista.com>,
Michael Kerrisk <mtk.manpages@gmail.com>,
Alejandro Colomar <alx.manpages@gmail.com>
Subject: Re: [PATCH] mm: Allow shmem mappings with MREMAP_DONTUNMAP
Date: Sat, 13 Mar 2021 20:19:38 -0800 (PST) [thread overview]
Message-ID: <alpine.LSU.2.11.2103131934290.18112@eggly.anvils> (raw)
In-Reply-To: <20210303175235.3308220-1-bgeffon@google.com>
On Wed, 3 Mar 2021, Brian Geffon wrote:
> Currently MREMAP_DONTUNMAP only accepts private anonymous mappings. This change
> will widen the support to include shmem mappings. The primary use case
> is to support MREMAP_DONTUNMAP on mappings which may have been created from
> a memfd.
>
> Lokesh Gidra who works on the Android JVM, provided an explanation of how such
> a feature will improve Android JVM garbage collection:
> "Android is developing a new garbage collector (GC), based on userfaultfd. The
> garbage collector will use userfaultfd (uffd) on the java heap during compaction.
> On accessing any uncompacted page, the application threads will find it missing,
> at which point the thread will create the compacted page and then use UFFDIO_COPY
> ioctl to get it mapped and then resume execution. Before starting this compaction,
> in a stop-the-world pause the heap will be mremap(MREMAP_DONTUNMAP) so that the
> java heap is ready to receive UFFD_EVENT_PAGEFAULT events after resuming execution.
>
> To speedup mremap operations, pagetable movement was optimized by moving PUD entries
> instead of PTE entries [1]. It was necessary as mremap of even modest sized memory
> ranges also took several milliseconds, and stopping the application for that long
> isn't acceptable in response-time sensitive cases. With UFFDIO_CONTINUE feature [2],
> it will be even more efficient to implement this GC, particularly the 'non-moveable'
> portions of the heap. It will also help in reducing the need to copy (UFFDIO_COPY)
> the pages. However, for this to work, the java heap has to be on a 'shared' vma.
> Currently MREMAP_DONTUNMAP only supports private anonymous mappings, this patch will
> enable using UFFDIO_CONTINUE for the new userfaultfd-based heap compaction."
>
> [1] https://lore.kernel.org/linux-mm/20201215030730.NC3CU98e4%25akpm@linux-foundation.org/
> [2] https://lore.kernel.org/linux-mm/20210302000133.272579-1-axelrasmussen@google.com/
> ---
> mm/mremap.c | 3 +--
> 1 file changed, 1 insertion(+), 2 deletions(-)
>
> diff --git a/mm/mremap.c b/mm/mremap.c
> index ec8f840399ed..6934d199da54 100644
> --- a/mm/mremap.c
> +++ b/mm/mremap.c
> @@ -653,8 +653,7 @@ static struct vm_area_struct *vma_to_resize(unsigned long addr,
> return ERR_PTR(-EINVAL);
> }
>
> - if (flags & MREMAP_DONTUNMAP && (!vma_is_anonymous(vma) ||
> - vma->vm_flags & VM_SHARED))
> + if (flags & MREMAP_DONTUNMAP && !(vma_is_anonymous(vma) || vma_is_shmem(vma)))
> return ERR_PTR(-EINVAL);
>
> if (is_vm_hugetlb_page(vma))
> --
Yet something to improve...
Thanks for extending MREMAP_DONTUNMAP to shmem, but I think this patch
goes in the wrong direction, complicating when it should be generalizing:
the mremap syscall is about rearranging the user's virtual address space,
and is not specific to the underlying anonymous or shmem or file object
(though so far you have only been interested in anonymous, and now shmem).
A better patch would say:
- if (flags & MREMAP_DONTUNMAP && (!vma_is_anonymous(vma) ||
- vma->vm_flags & VM_SHARED))
+ if ((flags & MREMAP_DONTUNMAP) &&
+ (vma->vm_flags & (VM_DONTEXPAND | VM_PFNMAP)))
return ERR_PTR(-EINVAL);
VM_DONTEXPAND is what has long been used on special mappings, to prevent
surprises from mremap changing the size of the mapping: MREMAP_DONTUNMAP
introduced a different way of expanding the mapping, so VM_DONTEXPAND
still seems a reasonable name (I've thrown in VM_PFNMAP there because
it's in the VM_DONTEXPAND test lower down: for safety I guess, and best
if both behave the same - though one says -EINVAL and the other -EFAULT).
With that VM_DONTEXPAND check in, Dmitry's commit cd544fd1dc92
("mremap: don't allow MREMAP_DONTUNMAP on special_mappings and aio")
can still be reverted (as you agreed on 28th December), even though
vma_is_anonymous() will no longer protect it.
Was there an mremap(2) man page update for MREMAP_DONTUNMAP?
Whether or not there was before, it ought to get one now.
Thanks,
Hugh
next prev parent reply other threads:[~2021-03-14 4:19 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-03-03 17:52 Brian Geffon
2021-03-03 18:13 ` Brian Geffon
2021-03-03 19:04 ` Lokesh Gidra
2021-03-14 4:19 ` Hugh Dickins [this message]
2021-03-16 19:18 ` Brian Geffon
2021-03-16 19:31 ` Dmitry Safonov
2021-03-16 20:17 ` Peter Xu
2021-03-19 1:58 ` Hugh Dickins
2021-03-17 19:13 ` [PATCH v2 1/2] mm: Allow non-VM_DONTEXPAND and VM_PFNMAP " Brian Geffon
2021-03-17 19:13 ` [PATCH v2 2/2] Revert "mremap: don't allow MREMAP_DONTUNMAP on special_mappings and aio" Brian Geffon
2021-03-17 20:40 ` [PATCH v2 1/2] mm: Allow non-VM_DONTEXPAND and VM_PFNMAP mappings with MREMAP_DONTUNMAP Peter Xu
2021-03-17 20:44 ` Brian Geffon
2021-03-17 21:18 ` Peter Xu
2021-03-17 21:25 ` Brian Geffon
2021-03-17 21:41 ` [PATCH v3 " Brian Geffon
2021-03-17 21:41 ` [PATCH v3 2/2] Revert "mremap: don't allow MREMAP_DONTUNMAP on special_mappings and aio" Brian Geffon
2021-03-19 1:28 ` Hugh Dickins
2021-03-17 22:03 ` [PATCH v3 1/2] mm: Allow non-VM_DONTEXPAND and VM_PFNMAP mappings with MREMAP_DONTUNMAP Andrew Morton
2021-03-19 1:20 ` Hugh Dickins
2021-03-23 16:26 ` [PATCH v4 1/3] mm: Extend MREMAP_DONTUNMAP to non-anonymous mappings Brian Geffon
2021-03-23 16:26 ` [PATCH v4 2/3] Revert "mremap: don't allow MREMAP_DONTUNMAP on special_mappings and aio" Brian Geffon
2021-03-23 18:16 ` Hugh Dickins
2021-03-23 18:26 ` Brian Geffon
2021-03-23 16:26 ` [PATCH v4 3/3] selftests: Add a MREMAP_DONTUNMAP selftest for shmem Brian Geffon
2021-03-23 16:26 ` [PATCH] mremap.2: MREMAP_DONTUNMAP to reflect to supported mappings Brian Geffon
2021-03-23 18:25 ` [PATCH v5 1/3] mm: Extend MREMAP_DONTUNMAP to non-anonymous mappings Brian Geffon
2021-03-23 18:25 ` [PATCH v5 2/3] Revert "mremap: don't allow MREMAP_DONTUNMAP on special_mappings and aio" Brian Geffon
2021-03-23 19:05 ` Dmitry Safonov
2021-03-23 18:25 ` [PATCH v5 3/3] selftests: Add a MREMAP_DONTUNMAP selftest for shmem Brian Geffon
2021-03-23 18:25 ` [PATCH] mremap.2: MREMAP_DONTUNMAP to reflect to supported mappings Brian Geffon
2021-03-25 21:34 ` Alejandro Colomar (man-pages)
2021-03-26 18:08 ` Brian Geffon
2022-05-10 20:50 ` Brian Geffon
2021-03-23 19:04 ` [PATCH v5 1/3] mm: Extend MREMAP_DONTUNMAP to non-anonymous mappings Dmitry Safonov
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=alpine.LSU.2.11.2103131934290.18112@eggly.anvils \
--to=hughd@google.com \
--cc=aarcange@redhat.com \
--cc=akpm@linux-foundation.org \
--cc=alx.manpages@gmail.com \
--cc=axelrasmussen@google.com \
--cc=bgeffon@google.com \
--cc=dima@arista.com \
--cc=kirill@shutemov.name \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=lokeshgidra@google.com \
--cc=luto@amacapital.net \
--cc=minchan@kernel.org \
--cc=mst@redhat.com \
--cc=mtk.manpages@gmail.com \
--cc=peterx@redhat.com \
--cc=rppt@linux.vnet.ibm.com \
--cc=sonnyrao@google.com \
--cc=vbabka@suse.cz \
/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