[to-be-updated] mm-allow-shmem-mappings-with-mremap_dontunmap.patch removed from -mm tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



The patch titled
     Subject: mm: allow shmem mappings with MREMAP_DONTUNMAP
has been removed from the -mm tree.  Its filename was
     mm-allow-shmem-mappings-with-mremap_dontunmap.patch

This patch was dropped because an updated version will be merged

------------------------------------------------------
From: Brian Geffon <bgeffon@xxxxxxxxxx>
Subject: mm: allow shmem mappings with MREMAP_DONTUNMAP

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@xxxxxxxxxxxxxxxxxxxx/
[2] https://lore.kernel.org/linux-mm/20210302000133.272579-1-axelrasmussen@xxxxxxxxxx/
Link: https://lkml.kernel.org/r/20210303175235.3308220-1-bgeffon@xxxxxxxxxx
Signed-off-by: Brian Geffon <bgeffon@xxxxxxxxxx>
Tested-by: Lokesh Gidra <lokeshgidra@xxxxxxxxxx>
Cc: Axel Rasmussen <axelrasmussen@xxxxxxxxxx>
Cc: Mike Rapoport <rppt@xxxxxxxxxxxxxxxxxx>
Cc: Peter Xu <peterx@xxxxxxxxxx>
Cc: Hugh Dickins <hughd@xxxxxxxxxx>
Cc: "Michael S . Tsirkin" <mst@xxxxxxxxxx>
Cc: Andy Lutomirski <luto@xxxxxxxxxxxxxx>
Cc: Vlastimil Babka <vbabka@xxxxxxx>
Cc: Andrea Arcangeli <aarcange@xxxxxxxxxx>
Cc: Sonny Rao <sonnyrao@xxxxxxxxxx>
Cc: Minchan Kim <minchan@xxxxxxxxxx>
Cc: "Kirill A . Shutemov" <kirill@xxxxxxxxxxxxx>
Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx>
---

 mm/mremap.c |    3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

--- a/mm/mremap.c~mm-allow-shmem-mappings-with-mremap_dontunmap
+++ a/mm/mremap.c
@@ -653,8 +653,7 @@ static struct vm_area_struct *vma_to_res
 		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))
_

Patches currently in -mm which might be from bgeffon@xxxxxxxxxx are

mm-extend-mremap_dontunmap-to-non-anonymous-mappings.patch
revert-mremap-dont-allow-mremap_dontunmap-on-special_mappings-and-aio.patch
selftests-add-a-mremap_dontunmap-selftest-for-shmem.patch




[Index of Archives]     [Kernel Archive]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]

  Powered by Linux