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
> >

Reply via email to