| From: Mike Kravetz <mike.kravetz@oracle.com> |
| Subject: hugetlb: lazy page table copies in fork() |
| Date: Tue, 21 Jun 2022 16:56:20 -0700 |
| |
| Lazy page table copying at fork time was introduced with commit |
| d992895ba2b2 ("[PATCH] Lazy page table copies in fork()"). At the time, |
| hugetlb was very new and did not support page faulting. As a result, it |
| was excluded. When full page fault support was added for hugetlb, the |
| exclusion was not removed. |
| |
| Simply remove the check that prevents lazy copying of hugetlb page tables |
| at fork. Of course, like other mappings this only applies to shared |
| mappings. |
| |
| Lazy page table copying at fork will be less advantageous for hugetlb |
| mappings because: |
| - There are fewer page table entries with hugetlb |
| - hugetlb pmds can be shared instead of copied |
| |
| In any case, completely eliminating the copy at fork time should speed |
| things up. |
| |
| Link: https://lkml.kernel.org/r/20220621235620.291305-5-mike.kravetz@oracle.com |
| Signed-off-by: Mike Kravetz <mike.kravetz@oracle.com> |
| Acked-by: Muchun Song <songmuchun@bytedance.com> |
| Acked-by: David Hildenbrand <david@redhat.com> |
| Cc: "Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com> |
| Cc: Anshuman Khandual <anshuman.khandual@arm.com> |
| Cc: Baolin Wang <baolin.wang@linux.alibaba.com> |
| Cc: Catalin Marinas <catalin.marinas@arm.com> |
| Cc: Christian Borntraeger <borntraeger@linux.ibm.com> |
| Cc: James Houghton <jthoughton@google.com> |
| Cc: kernel test robot <lkp@intel.com> |
| Cc: Michal Hocko <mhocko@suse.com> |
| Cc: Mina Almasry <almasrymina@google.com> |
| Cc: Naoya Horiguchi <naoya.horiguchi@linux.dev> |
| Cc: Paul Walmsley <paul.walmsley@sifive.com> |
| Cc: Peter Xu <peterx@redhat.com> |
| Cc: Rolf Eike Beer <eike-kernel@sf-tec.de> |
| Cc: Will Deacon <will@kernel.org> |
| Signed-off-by: Andrew Morton <akpm@linux-foundation.org> |
| --- |
| |
| mm/memory.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| --- a/mm/memory.c~hugetlb-lazy-page-table-copies-in-fork |
| +++ a/mm/memory.c |
| @@ -1253,7 +1253,7 @@ vma_needs_copy(struct vm_area_struct *ds |
| if (userfaultfd_wp(dst_vma)) |
| return true; |
| |
| - if (src_vma->vm_flags & (VM_HUGETLB | VM_PFNMAP | VM_MIXEDMAP)) |
| + if (src_vma->vm_flags & (VM_PFNMAP | VM_MIXEDMAP)) |
| return true; |
| |
| if (src_vma->anon_vma) |
| _ |