linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] mm: align larger anonymous mappings on THP boundaries
@ 2022-08-08 20:46 Rik van Riel
  2022-08-08 22:09 ` Andrew Morton
  2022-08-09 17:16 ` Yang Shi
  0 siblings, 2 replies; 5+ messages in thread
From: Rik van Riel @ 2022-08-08 20:46 UTC (permalink / raw)
  To: Andrew Morton; +Cc: linux-mm, kernel-team, Matthew Wilcox

Align larger anonymous memory mappings on THP boundaries by
going through thp_get_unmapped_area if THPs are enabled for
the current process.

With this patch, larger anonymous mappings are now THP aligned
when checking in /proc/PID/maps, but only when THP is enabled
for that process.

Signed-off-by: Rik van Riel <riel@surriel.com>
---
 mm/mmap.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/mm/mmap.c b/mm/mmap.c
index c035020d0c89..3a9d19cec690 100644
--- a/mm/mmap.c
+++ b/mm/mmap.c
@@ -2229,6 +2229,9 @@ get_unmapped_area(struct file *file, unsigned long addr, unsigned long len,
 		 */
 		pgoff = 0;
 		get_area = shmem_get_unmapped_area;
+	} else if (test_bit(MMF_VM_HUGEPAGE, &current->mm->flags)) {
+		/* Ensures that larger anonymous mappings are THP aligned. */
+		get_area = thp_get_unmapped_area;
 	}
 
 	addr = get_area(file, addr, len, pgoff, flags);
-- 
2.37.1



^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH] mm: align larger anonymous mappings on THP boundaries
  2022-08-08 20:46 [PATCH] mm: align larger anonymous mappings on THP boundaries Rik van Riel
@ 2022-08-08 22:09 ` Andrew Morton
  2022-08-09  0:59   ` Rik van Riel
  2022-08-09 17:16 ` Yang Shi
  1 sibling, 1 reply; 5+ messages in thread
From: Andrew Morton @ 2022-08-08 22:09 UTC (permalink / raw)
  To: Rik van Riel; +Cc: linux-mm, kernel-team, Matthew Wilcox

On Mon, 8 Aug 2022 16:46:58 -0400 Rik van Riel <riel@surriel.com> wrote:

> Align larger anonymous memory mappings on THP boundaries by
> going through thp_get_unmapped_area if THPs are enabled for
> the current process.
> 
> With this patch, larger anonymous mappings are now THP aligned
> when checking in /proc/PID/maps, but only when THP is enabled
> for that process.
> 

What are the runtime effects of this change?


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] mm: align larger anonymous mappings on THP boundaries
  2022-08-08 22:09 ` Andrew Morton
@ 2022-08-09  0:59   ` Rik van Riel
  0 siblings, 0 replies; 5+ messages in thread
From: Rik van Riel @ 2022-08-09  0:59 UTC (permalink / raw)
  To: Andrew Morton; +Cc: linux-mm, kernel-team, Matthew Wilcox

[-- Attachment #1: Type: text/plain, Size: 735 bytes --]

On Mon, 2022-08-08 at 15:09 -0700, Andrew Morton wrote:
> On Mon, 8 Aug 2022 16:46:58 -0400 Rik van Riel <riel@surriel.com>
> wrote:
> 
> > Align larger anonymous memory mappings on THP boundaries by
> > going through thp_get_unmapped_area if THPs are enabled for
> > the current process.
> > 
> > With this patch, larger anonymous mappings are now THP aligned
> > when checking in /proc/PID/maps, but only when THP is enabled
> > for that process.
> > 
> 
> What are the runtime effects of this change?

The runtime effect is that when a malloc library
allocates an arena that is a multiple of 2MB in size,
the entire arena can be mapped using THPs, resulting in
a lower TLB miss rate.

-- 
All Rights Reversed.

[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] mm: align larger anonymous mappings on THP boundaries
  2022-08-08 20:46 [PATCH] mm: align larger anonymous mappings on THP boundaries Rik van Riel
  2022-08-08 22:09 ` Andrew Morton
@ 2022-08-09 17:16 ` Yang Shi
  2022-08-09 17:36   ` Rik van Riel
  1 sibling, 1 reply; 5+ messages in thread
From: Yang Shi @ 2022-08-09 17:16 UTC (permalink / raw)
  To: Rik van Riel; +Cc: Andrew Morton, linux-mm, kernel-team, Matthew Wilcox

On Mon, Aug 8, 2022 at 1:47 PM Rik van Riel <riel@surriel.com> wrote:
>
> Align larger anonymous memory mappings on THP boundaries by
> going through thp_get_unmapped_area if THPs are enabled for
> the current process.
>
> With this patch, larger anonymous mappings are now THP aligned
> when checking in /proc/PID/maps, but only when THP is enabled
> for that process.
>
> Signed-off-by: Rik van Riel <riel@surriel.com>
> ---
>  mm/mmap.c | 3 +++
>  1 file changed, 3 insertions(+)
>
> diff --git a/mm/mmap.c b/mm/mmap.c
> index c035020d0c89..3a9d19cec690 100644
> --- a/mm/mmap.c
> +++ b/mm/mmap.c
> @@ -2229,6 +2229,9 @@ get_unmapped_area(struct file *file, unsigned long addr, unsigned long len,
>                  */
>                 pgoff = 0;
>                 get_area = shmem_get_unmapped_area;
> +       } else if (test_bit(MMF_VM_HUGEPAGE, &current->mm->flags)) {

There is a kind of chicken & egg problem here, MMF_VM_HUGEPAGE is not
going to be set if there is no THP eligible vma even though THP is
enabled.

> +               /* Ensures that larger anonymous mappings are THP aligned. */
> +               get_area = thp_get_unmapped_area;
>         }
>
>         addr = get_area(file, addr, len, pgoff, flags);
> --
> 2.37.1
>
>


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] mm: align larger anonymous mappings on THP boundaries
  2022-08-09 17:16 ` Yang Shi
@ 2022-08-09 17:36   ` Rik van Riel
  0 siblings, 0 replies; 5+ messages in thread
From: Rik van Riel @ 2022-08-09 17:36 UTC (permalink / raw)
  To: Yang Shi; +Cc: Andrew Morton, linux-mm, kernel-team, Matthew Wilcox

[-- Attachment #1: Type: text/plain, Size: 1735 bytes --]

On Tue, 2022-08-09 at 10:16 -0700, Yang Shi wrote:
> On Mon, Aug 8, 2022 at 1:47 PM Rik van Riel <riel@surriel.com> wrote:
> > 
> > Align larger anonymous memory mappings on THP boundaries by
> > going through thp_get_unmapped_area if THPs are enabled for
> > the current process.
> > 
> > With this patch, larger anonymous mappings are now THP aligned
> > when checking in /proc/PID/maps, but only when THP is enabled
> > for that process.
> > 
> > Signed-off-by: Rik van Riel <riel@surriel.com>
> > ---
> >  mm/mmap.c | 3 +++
> >  1 file changed, 3 insertions(+)
> > 
> > diff --git a/mm/mmap.c b/mm/mmap.c
> > index c035020d0c89..3a9d19cec690 100644
> > --- a/mm/mmap.c
> > +++ b/mm/mmap.c
> > @@ -2229,6 +2229,9 @@ get_unmapped_area(struct file *file, unsigned
> > long addr, unsigned long len,
> >                  */
> >                 pgoff = 0;
> >                 get_area = shmem_get_unmapped_area;
> > +       } else if (test_bit(MMF_VM_HUGEPAGE, &current->mm->flags))
> > {
> 
> There is a kind of chicken & egg problem here, MMF_VM_HUGEPAGE is not
> going to be set if there is no THP eligible vma even though THP is
> enabled.

With THP enabled=always, we should always end up with getting
MMF_VM_HUGEPAGE set after the first VMA, but you are right that:

1) The first VMA might not get the proper alignment, and
2) with THP enabled=madvise we might get a whole bunch of
   mis-aligned VMAs on which a subsequent madvise would
   not create the desired THPs.

You are right that that condition should just be removed,
and we should decide alignment based on VMA size alone.

Let me send a v2.

-- 
All Rights Reversed.

[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2022-08-09 17:36 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-08-08 20:46 [PATCH] mm: align larger anonymous mappings on THP boundaries Rik van Riel
2022-08-08 22:09 ` Andrew Morton
2022-08-09  0:59   ` Rik van Riel
2022-08-09 17:16 ` Yang Shi
2022-08-09 17:36   ` Rik van Riel

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).