ACK: [SRU][B/E/F][PATCH 1/1] hugetlbfs: take read_lock on i_mmap for PMD sharing

Juerg Haefliger juerg.haefliger at canonical.com
Wed Jul 1 07:24:40 UTC 2020


On Thu,  4 Jun 2020 17:39:31 +0800
Gavin Guo <gavin.guo at canonical.com> wrote:

> From: Waiman Long <longman at redhat.com>
> 
> BugLink: https://bugs.launchpad.net/bugs/1882039
> 
> A customer with large SMP systems (up to 16 sockets) with application
> that uses large amount of static hugepages (~500-1500GB) are
> experiencing random multisecond delays.  These delays were caused by the
> long time it took to scan the VMA interval tree with mmap_sem held.
> 
> The sharing of huge PMD does not require changes to the i_mmap at all.
> Therefore, we can just take the read lock and let other threads
> searching for the right VMA share it in parallel.  Once the right VMA is
> found, either the PMD lock (2M huge page for x86-64) or the
> mm->page_table_lock will be acquired to perform the actual PMD sharing.
> 
> Lock contention, if present, will happen in the spinlock.  That is much
> better than contention in the rwsem where the time needed to scan the
> the interval tree is indeterminate.
> 
> With this patch applied, the customer is seeing significant performance
> improvement over the unpatched kernel.
> 
> Link: http://lkml.kernel.org/r/20191107211809.9539-1-longman@redhat.com
> Signed-off-by: Waiman Long <longman at redhat.com>
> Suggested-by: Mike Kravetz <mike.kravetz at oracle.com>
> Reviewed-by: Mike Kravetz <mike.kravetz at oracle.com>
> Cc: Davidlohr Bueso <dave at stgolabs.net>
> Cc: Peter Zijlstra <peterz at infradead.org>
> Cc: Ingo Molnar <mingo at redhat.com>
> Cc: Will Deacon <will.deacon at arm.com>
> Cc: Matthew Wilcox <willy at infradead.org>
> Signed-off-by: Andrew Morton <akpm at linux-foundation.org>
> Signed-off-by: Linus Torvalds <torvalds at linux-foundation.org>
> (cherry picked from commit 930668c34408ba983049322e04f13f03b6f1fafa)
> Signed-off-by: Gavin Guo <gavin.guo at canonical.com>

Acked-by: Juerg Haefliger <juergh at canonical.com>


> ---
>  mm/hugetlb.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/mm/hugetlb.c b/mm/hugetlb.c
> index 2af1831596f2..9c871b47ef86 100644
> --- a/mm/hugetlb.c
> +++ b/mm/hugetlb.c
> @@ -4891,7 +4891,7 @@ pte_t *huge_pmd_share(struct mm_struct *mm, unsigned long addr, pud_t *pud)
>  	if (!vma_shareable(vma, addr))
>  		return (pte_t *)pmd_alloc(mm, pud, addr);
>  
> -	i_mmap_lock_write(mapping);
> +	i_mmap_lock_read(mapping);
>  	vma_interval_tree_foreach(svma, &mapping->i_mmap, idx, idx) {
>  		if (svma == vma)
>  			continue;
> @@ -4921,7 +4921,7 @@ pte_t *huge_pmd_share(struct mm_struct *mm, unsigned long addr, pud_t *pud)
>  	spin_unlock(ptl);
>  out:
>  	pte = (pte_t *)pmd_alloc(mm, pud, addr);
> -	i_mmap_unlock_write(mapping);
> +	i_mmap_unlock_read(mapping);
>  	return pte;
>  }
>  

-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 833 bytes
Desc: OpenPGP digital signature
URL: <https://lists.ubuntu.com/archives/kernel-team/attachments/20200701/a4c85c54/attachment.sig>


More information about the kernel-team mailing list