On Wed, Mar 3, 2021 at 10:13 AM Brian Geffon <bgef...@google.com> wrote: > > I apologize, this patch didn't include my signed off by, here it is: > > Signed-off-by: Brian Geffon <bgef...@google.com> > > > On Wed, Mar 3, 2021 at 9:53 AM Brian Geffon <bgef...@google.com> 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%25a...@linux-foundation.org/ > > [2] > > https://lore.kernel.org/linux-mm/20210302000133.272579-1-axelrasmus...@google.com/
Thanks for the patch, Brian. I've tested mremap(MREMAP_DONTUNMAP) on a memfd memory range. Tested-by: Lokesh Gidra <lokeshgi...@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)) > > -- > > 2.31.0.rc0.254.gbdcc3b1a9d-goog > >