* [PATCH hotfix 6.12] mm, mmap: limit THP aligment of anonymous mappings to PMD-aligned sizes
[not found] <2050f0d4-57b0-481d-bab8-05e8d48fed0c@leemhuis.info>
@ 2024-10-24 15:12 ` Vlastimil Babka
2024-10-24 15:13 ` kernel test robot
` (2 more replies)
0 siblings, 3 replies; 9+ messages in thread
From: Vlastimil Babka @ 2024-10-24 15:12 UTC (permalink / raw)
To: Andrew Morton, Liam R. Howlett, Lorenzo Stoakes
Cc: Jann Horn, Thorsten Leemhuis, linux-mm, linux-kernel,
Petr Tesarik, Vlastimil Babka, Michael Matz,
Gabriel Krisman Bertazi, Matthias Bodenbinder, stable,
Rik van Riel, Yang Shi
Since commit efa7df3e3bb5 ("mm: align larger anonymous mappings on THP
boundaries") a mmap() of anonymous memory without a specific address
hint and of at least PMD_SIZE will be aligned to PMD so that it can
benefit from a THP backing page.
However this change has been shown to regress some workloads
significantly. [1] reports regressions in various spec benchmarks, with
up to 600% slowdown of the cactusBSSN benchmark on some platforms. The
benchmark seems to create many mappings of 4632kB, which would have
merged to a large THP-backed area before commit efa7df3e3bb5 and now
they are fragmented to multiple areas each aligned to PMD boundary with
gaps between. The regression then seems to be caused mainly due to the
benchmark's memory access pattern suffering from TLB or cache aliasing
due to the aligned boundaries of the individual areas.
Another known regression bisected to commit efa7df3e3bb5 is darktable
[2] [3] and early testing suggests this patch fixes the regression there
as well.
To fix the regression but still try to benefit from THP-friendly
anonymous mapping alignment, add a condition that the size of the
mapping must be a multiple of PMD size instead of at least PMD size. In
case of many odd-sized mapping like the cactusBSSN creates, those will
stop being aligned and with gaps between, and instead naturally merge
again.
Reported-by: Michael Matz <matz@suse.de>
Debugged-by: Gabriel Krisman Bertazi <gabriel@krisman.be>
Closes: https://bugzilla.suse.com/show_bug.cgi?id=1229012 [1]
Reported-by: Matthias Bodenbinder <matthias@bodenbinder.de>
Closes: https://bugzilla.kernel.org/show_bug.cgi?id=219366 [2]
Closes: https://lore.kernel.org/all/2050f0d4-57b0-481d-bab8-05e8d48fed0c@leemhuis.info/ [3]
Fixes: efa7df3e3bb5 ("mm: align larger anonymous mappings on THP boundaries")
Cc: <stable@vger.kernel.org>
Cc: Rik van Riel <riel@surriel.com>
Cc: Yang Shi <yang@os.amperecomputing.com>
Signed-off-by: Vlastimil Babka <vbabka@suse.cz>
---
mm/mmap.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/mm/mmap.c b/mm/mmap.c
index 9c0fb43064b5..a5297cfb1dfc 100644
--- a/mm/mmap.c
+++ b/mm/mmap.c
@@ -900,7 +900,8 @@ __get_unmapped_area(struct file *file, unsigned long addr, unsigned long len,
if (get_area) {
addr = get_area(file, addr, len, pgoff, flags);
- } else if (IS_ENABLED(CONFIG_TRANSPARENT_HUGEPAGE)) {
+ } else if (IS_ENABLED(CONFIG_TRANSPARENT_HUGEPAGE)
+ && IS_ALIGNED(len, PMD_SIZE)) {
/* Ensures that larger anonymous mappings are THP aligned. */
addr = thp_get_unmapped_area_vmflags(file, addr, len,
pgoff, flags, vm_flags);
--
2.47.0
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH hotfix 6.12] mm, mmap: limit THP aligment of anonymous mappings to PMD-aligned sizes
2024-10-24 15:12 ` [PATCH hotfix 6.12] mm, mmap: limit THP aligment of anonymous mappings to PMD-aligned sizes Vlastimil Babka
@ 2024-10-24 15:13 ` kernel test robot
2024-10-24 15:22 ` Vlastimil Babka
2024-10-24 15:47 ` Lorenzo Stoakes
2024-10-24 18:32 ` Yang Shi
2 siblings, 1 reply; 9+ messages in thread
From: kernel test robot @ 2024-10-24 15:13 UTC (permalink / raw)
To: Vlastimil Babka; +Cc: stable, oe-kbuild-all
Hi,
Thanks for your patch.
FYI: kernel test robot notices the stable kernel rule is not satisfied.
The check is based on https://www.kernel.org/doc/html/latest/process/stable-kernel-rules.html#option-3
Rule: The upstream commit ID must be specified with a separate line above the commit text.
Subject: [PATCH hotfix 6.12] mm, mmap: limit THP aligment of anonymous mappings to PMD-aligned sizes
Link: https://lore.kernel.org/stable/20241024151228.101841-2-vbabka%40suse.cz
Please ignore this mail if the patch is not relevant for upstream.
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH hotfix 6.12] mm, mmap: limit THP aligment of anonymous mappings to PMD-aligned sizes
2024-10-24 15:13 ` kernel test robot
@ 2024-10-24 15:22 ` Vlastimil Babka
0 siblings, 0 replies; 9+ messages in thread
From: Vlastimil Babka @ 2024-10-24 15:22 UTC (permalink / raw)
To: kernel test robot; +Cc: stable, oe-kbuild-all
On 10/24/24 17:13, kernel test robot wrote:
> Hi,
Hi,
> Thanks for your patch.
>
> FYI: kernel test robot notices the stable kernel rule is not satisfied.
>
> The check is based on https://www.kernel.org/doc/html/latest/process/stable-kernel-rules.html#option-3
But this submission follows Option 1, which the check probably didn't recognize?
Vlastimil
> Rule: The upstream commit ID must be specified with a separate line above the commit text.
> Subject: [PATCH hotfix 6.12] mm, mmap: limit THP aligment of anonymous mappings to PMD-aligned sizes
> Link: https://lore.kernel.org/stable/20241024151228.101841-2-vbabka%40suse.cz
>
> Please ignore this mail if the patch is not relevant for upstream.
>
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH hotfix 6.12] mm, mmap: limit THP aligment of anonymous mappings to PMD-aligned sizes
2024-10-24 15:12 ` [PATCH hotfix 6.12] mm, mmap: limit THP aligment of anonymous mappings to PMD-aligned sizes Vlastimil Babka
2024-10-24 15:13 ` kernel test robot
@ 2024-10-24 15:47 ` Lorenzo Stoakes
2024-10-24 16:00 ` Lorenzo Stoakes
` (2 more replies)
2024-10-24 18:32 ` Yang Shi
2 siblings, 3 replies; 9+ messages in thread
From: Lorenzo Stoakes @ 2024-10-24 15:47 UTC (permalink / raw)
To: Vlastimil Babka
Cc: Andrew Morton, Liam R. Howlett, Jann Horn, Thorsten Leemhuis,
linux-mm, linux-kernel, Petr Tesarik, Michael Matz,
Gabriel Krisman Bertazi, Matthias Bodenbinder, stable,
Rik van Riel, Yang Shi
On Thu, Oct 24, 2024 at 05:12:29PM +0200, Vlastimil Babka wrote:
> Since commit efa7df3e3bb5 ("mm: align larger anonymous mappings on THP
> boundaries") a mmap() of anonymous memory without a specific address
> hint and of at least PMD_SIZE will be aligned to PMD so that it can
> benefit from a THP backing page.
>
> However this change has been shown to regress some workloads
> significantly. [1] reports regressions in various spec benchmarks, with
> up to 600% slowdown of the cactusBSSN benchmark on some platforms. The
Ugh god.
> benchmark seems to create many mappings of 4632kB, which would have
> merged to a large THP-backed area before commit efa7df3e3bb5 and now
> they are fragmented to multiple areas each aligned to PMD boundary with
> gaps between. The regression then seems to be caused mainly due to the
> benchmark's memory access pattern suffering from TLB or cache aliasing
> due to the aligned boundaries of the individual areas.
Any more details on precisely why?
>
> Another known regression bisected to commit efa7df3e3bb5 is darktable
> [2] [3] and early testing suggests this patch fixes the regression there
> as well.
Good!
>
> To fix the regression but still try to benefit from THP-friendly
> anonymous mapping alignment, add a condition that the size of the
> mapping must be a multiple of PMD size instead of at least PMD size. In
> case of many odd-sized mapping like the cactusBSSN creates, those will
> stop being aligned and with gaps between, and instead naturally merge
> again.
>
Seems like the original logic just padded the length by PMD size and checks
for overflow, assuming that [pgoff << PAGE_SHIFT, pgoff << PAGE_SHIFT +
len) contains at least one PMD-sized block.
Which I guess results in potentially getting mis-sized empty spaces that
now can't be PMD-merged at the bits that 'overhang' the PMD-sized/aligned
bit?
Which is yeah, not great and would explain this (correct me if my
understanding is wrong).
> Reported-by: Michael Matz <matz@suse.de>
> Debugged-by: Gabriel Krisman Bertazi <gabriel@krisman.be>
> Closes: https://bugzilla.suse.com/show_bug.cgi?id=1229012 [1]
> Reported-by: Matthias Bodenbinder <matthias@bodenbinder.de>
> Closes: https://bugzilla.kernel.org/show_bug.cgi?id=219366 [2]
> Closes: https://lore.kernel.org/all/2050f0d4-57b0-481d-bab8-05e8d48fed0c@leemhuis.info/ [3]
> Fixes: efa7df3e3bb5 ("mm: align larger anonymous mappings on THP boundaries")
> Cc: <stable@vger.kernel.org>
> Cc: Rik van Riel <riel@surriel.com>
> Cc: Yang Shi <yang@os.amperecomputing.com>
> Signed-off-by: Vlastimil Babka <vbabka@suse.cz>
> ---
> mm/mmap.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/mm/mmap.c b/mm/mmap.c
> index 9c0fb43064b5..a5297cfb1dfc 100644
> --- a/mm/mmap.c
> +++ b/mm/mmap.c
> @@ -900,7 +900,8 @@ __get_unmapped_area(struct file *file, unsigned long addr, unsigned long len,
>
> if (get_area) {
> addr = get_area(file, addr, len, pgoff, flags);
> - } else if (IS_ENABLED(CONFIG_TRANSPARENT_HUGEPAGE)) {
> + } else if (IS_ENABLED(CONFIG_TRANSPARENT_HUGEPAGE)
> + && IS_ALIGNED(len, PMD_SIZE)) {
So doing this feels right but...
Hm this seems like it belongs in __thp_get_unmapped_area() which does a bunch of
checks up front returning 0 if they fail, which then results in it peforming the
normal get unmapped area logic.
That also has a bunch of (offset) alignment checks as well overflow checks
so it would seem the natural place to also check length?
> /* Ensures that larger anonymous mappings are THP aligned. */
> addr = thp_get_unmapped_area_vmflags(file, addr, len,
> pgoff, flags, vm_flags);
> --
> 2.47.0
>
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH hotfix 6.12] mm, mmap: limit THP aligment of anonymous mappings to PMD-aligned sizes
2024-10-24 15:47 ` Lorenzo Stoakes
@ 2024-10-24 16:00 ` Lorenzo Stoakes
2024-10-24 16:04 ` Vlastimil Babka
2024-10-28 13:45 ` Michael Matz
2 siblings, 0 replies; 9+ messages in thread
From: Lorenzo Stoakes @ 2024-10-24 16:00 UTC (permalink / raw)
To: Vlastimil Babka
Cc: Andrew Morton, Liam R. Howlett, Jann Horn, Thorsten Leemhuis,
linux-mm, linux-kernel, Petr Tesarik, Michael Matz,
Gabriel Krisman Bertazi, Matthias Bodenbinder, stable,
Rik van Riel, Yang Shi
On Thu, Oct 24, 2024 at 04:47:54PM +0100, Lorenzo Stoakes wrote:
[snip]
> > diff --git a/mm/mmap.c b/mm/mmap.c
> > index 9c0fb43064b5..a5297cfb1dfc 100644
> > --- a/mm/mmap.c
> > +++ b/mm/mmap.c
> > @@ -900,7 +900,8 @@ __get_unmapped_area(struct file *file, unsigned long addr, unsigned long len,
> >
> > if (get_area) {
> > addr = get_area(file, addr, len, pgoff, flags);
> > - } else if (IS_ENABLED(CONFIG_TRANSPARENT_HUGEPAGE)) {
> > + } else if (IS_ENABLED(CONFIG_TRANSPARENT_HUGEPAGE)
> > + && IS_ALIGNED(len, PMD_SIZE)) {
>
> So doing this feels right but...
>
> Hm this seems like it belongs in __thp_get_unmapped_area() which does a bunch of
> checks up front returning 0 if they fail, which then results in it peforming the
> normal get unmapped area logic.
>
> That also has a bunch of (offset) alignment checks as well overflow checks
> so it would seem the natural place to also check length?
>
OK having said that, I see this function is referenced from a bunch of fs
stuff we probably don't want to potentially break by enforcing this
requirement there (at least in this fix).
So disregard that and since this looks otherwise good to me, feel free to add:
Reviewed-by: Lorenzo Stoakes <lorenzo.stoakes@oracle.com>
> > /* Ensures that larger anonymous mappings are THP aligned. */
> > addr = thp_get_unmapped_area_vmflags(file, addr, len,
> > pgoff, flags, vm_flags);
> > --
> > 2.47.0
> >
Thanks!
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH hotfix 6.12] mm, mmap: limit THP aligment of anonymous mappings to PMD-aligned sizes
2024-10-24 15:47 ` Lorenzo Stoakes
2024-10-24 16:00 ` Lorenzo Stoakes
@ 2024-10-24 16:04 ` Vlastimil Babka
2024-10-24 16:17 ` Lorenzo Stoakes
2024-10-28 13:45 ` Michael Matz
2 siblings, 1 reply; 9+ messages in thread
From: Vlastimil Babka @ 2024-10-24 16:04 UTC (permalink / raw)
To: Lorenzo Stoakes
Cc: Andrew Morton, Liam R. Howlett, Jann Horn, Thorsten Leemhuis,
linux-mm, linux-kernel, Petr Tesarik, Michael Matz,
Gabriel Krisman Bertazi, Matthias Bodenbinder, stable,
Rik van Riel, Yang Shi, Matthew Wilcox
On 10/24/24 17:47, Lorenzo Stoakes wrote:
> On Thu, Oct 24, 2024 at 05:12:29PM +0200, Vlastimil Babka wrote:
>> Since commit efa7df3e3bb5 ("mm: align larger anonymous mappings on THP
>> boundaries") a mmap() of anonymous memory without a specific address
>> hint and of at least PMD_SIZE will be aligned to PMD so that it can
>> benefit from a THP backing page.
>>
>> However this change has been shown to regress some workloads
>> significantly. [1] reports regressions in various spec benchmarks, with
>> up to 600% slowdown of the cactusBSSN benchmark on some platforms. The
>
> Ugh god.
>
>> benchmark seems to create many mappings of 4632kB, which would have
>> merged to a large THP-backed area before commit efa7df3e3bb5 and now
>> they are fragmented to multiple areas each aligned to PMD boundary with
>> gaps between. The regression then seems to be caused mainly due to the
>> benchmark's memory access pattern suffering from TLB or cache aliasing
>> due to the aligned boundaries of the individual areas.
>
> Any more details on precisely why?
The experiments performed in [1] didn't seem conclusive enough for me to say
that with enough confidence :) Generally speaking if there are multiple
addresses with the same virtual or physical offset accesssed rapidly, they
can alias in the TLB or processor caches due to limited associativity and
cause thrashing. Aligning the mappings to same 2MB boundary can cause such
aliasing.
>>
>> Another known regression bisected to commit efa7df3e3bb5 is darktable
>> [2] [3] and early testing suggests this patch fixes the regression there
>> as well.
>
> Good!
>
>>
>> To fix the regression but still try to benefit from THP-friendly
>> anonymous mapping alignment, add a condition that the size of the
>> mapping must be a multiple of PMD size instead of at least PMD size. In
>> case of many odd-sized mapping like the cactusBSSN creates, those will
>> stop being aligned and with gaps between, and instead naturally merge
>> again.
>>
>
> Seems like the original logic just padded the length by PMD size and checks
> for overflow, assuming that [pgoff << PAGE_SHIFT, pgoff << PAGE_SHIFT +
> len) contains at least one PMD-sized block.
>
> Which I guess results in potentially getting mis-sized empty spaces that
> now can't be PMD-merged at the bits that 'overhang' the PMD-sized/aligned
> bit?
>
> Which is yeah, not great and would explain this (correct me if my
> understanding is wrong).
>
>> Reported-by: Michael Matz <matz@suse.de>
>> Debugged-by: Gabriel Krisman Bertazi <gabriel@krisman.be>
>> Closes: https://bugzilla.suse.com/show_bug.cgi?id=1229012 [1]
>> Reported-by: Matthias Bodenbinder <matthias@bodenbinder.de>
>> Closes: https://bugzilla.kernel.org/show_bug.cgi?id=219366 [2]
>> Closes: https://lore.kernel.org/all/2050f0d4-57b0-481d-bab8-05e8d48fed0c@leemhuis.info/ [3]
>> Fixes: efa7df3e3bb5 ("mm: align larger anonymous mappings on THP boundaries")
>> Cc: <stable@vger.kernel.org>
>> Cc: Rik van Riel <riel@surriel.com>
>> Cc: Yang Shi <yang@os.amperecomputing.com>
>> Signed-off-by: Vlastimil Babka <vbabka@suse.cz>
>> ---
>> mm/mmap.c | 3 ++-
>> 1 file changed, 2 insertions(+), 1 deletion(-)
>>
>> diff --git a/mm/mmap.c b/mm/mmap.c
>> index 9c0fb43064b5..a5297cfb1dfc 100644
>> --- a/mm/mmap.c
>> +++ b/mm/mmap.c
>> @@ -900,7 +900,8 @@ __get_unmapped_area(struct file *file, unsigned long addr, unsigned long len,
>>
>> if (get_area) {
>> addr = get_area(file, addr, len, pgoff, flags);
>> - } else if (IS_ENABLED(CONFIG_TRANSPARENT_HUGEPAGE)) {
>> + } else if (IS_ENABLED(CONFIG_TRANSPARENT_HUGEPAGE)
>> + && IS_ALIGNED(len, PMD_SIZE)) {
>
> So doing this feels right but...
>
> Hm this seems like it belongs in __thp_get_unmapped_area() which does a bunch of
> checks up front returning 0 if they fail, which then results in it peforming the
> normal get unmapped area logic.
>
> That also has a bunch of (offset) alignment checks as well overflow checks
> so it would seem the natural place to also check length?
Petr suggested the same, but changing __thp_get_unmapped_area() affects FS
THP's and the proposed check seemed wrong to me:
https://lore.kernel.org/all/9d7c73f6-1e1a-458b-93c6-3b44959022e0@suse.cz/
While it could be fixed, I'm still not sure if we want to restrict FS THPs
the same as anonymous THPs. AFAIU even small mappings of a range from a file
should be aligned properly to make it possible for a large range from the
same file (that includes the smaller range) mapped elsewhere to be THP
backed? I mean we can investigate it further, but for the regression fix to
backported to stable kernels it seemed more safe to address only the case
that was changed by commit efa7df3e3bb5 specifically, i.e. anonymous mappings.
>> /* Ensures that larger anonymous mappings are THP aligned. */
>> addr = thp_get_unmapped_area_vmflags(file, addr, len,
>> pgoff, flags, vm_flags);
>> --
>> 2.47.0
>>
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH hotfix 6.12] mm, mmap: limit THP aligment of anonymous mappings to PMD-aligned sizes
2024-10-24 16:04 ` Vlastimil Babka
@ 2024-10-24 16:17 ` Lorenzo Stoakes
0 siblings, 0 replies; 9+ messages in thread
From: Lorenzo Stoakes @ 2024-10-24 16:17 UTC (permalink / raw)
To: Vlastimil Babka
Cc: Andrew Morton, Liam R. Howlett, Jann Horn, Thorsten Leemhuis,
linux-mm, linux-kernel, Petr Tesarik, Michael Matz,
Gabriel Krisman Bertazi, Matthias Bodenbinder, stable,
Rik van Riel, Yang Shi, Matthew Wilcox
On Thu, Oct 24, 2024 at 06:04:41PM +0200, Vlastimil Babka wrote:
> Petr suggested the same, but changing __thp_get_unmapped_area() affects FS
> THP's and the proposed check seemed wrong to me:
>
> https://lore.kernel.org/all/9d7c73f6-1e1a-458b-93c6-3b44959022e0@suse.cz/
>
> While it could be fixed, I'm still not sure if we want to restrict FS THPs
> the same as anonymous THPs. AFAIU even small mappings of a range from a file
> should be aligned properly to make it possible for a large range from the
> same file (that includes the smaller range) mapped elsewhere to be THP
> backed? I mean we can investigate it further, but for the regression fix to
> backported to stable kernels it seemed more safe to address only the case
> that was changed by commit efa7df3e3bb5 specifically, i.e. anonymous mappings.
>
Ack, yeah totally agreed - sorry I missed the fs usage before, see my 2nd
reply. I had wrongly assumed this was only used in 1 place, where it would
be sensible to move the check, however with fs using it of course it's not.
Gave an R-b tag on other reply so this patch LGTM! :)
Cheers for finding this utterly critical fix!
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH hotfix 6.12] mm, mmap: limit THP aligment of anonymous mappings to PMD-aligned sizes
2024-10-24 15:12 ` [PATCH hotfix 6.12] mm, mmap: limit THP aligment of anonymous mappings to PMD-aligned sizes Vlastimil Babka
2024-10-24 15:13 ` kernel test robot
2024-10-24 15:47 ` Lorenzo Stoakes
@ 2024-10-24 18:32 ` Yang Shi
2 siblings, 0 replies; 9+ messages in thread
From: Yang Shi @ 2024-10-24 18:32 UTC (permalink / raw)
To: Vlastimil Babka, Andrew Morton, Liam R. Howlett, Lorenzo Stoakes
Cc: Jann Horn, Thorsten Leemhuis, linux-mm, linux-kernel,
Petr Tesarik, Michael Matz, Gabriel Krisman Bertazi,
Matthias Bodenbinder, stable, Rik van Riel
On 10/24/24 8:12 AM, Vlastimil Babka wrote:
> Since commit efa7df3e3bb5 ("mm: align larger anonymous mappings on THP
> boundaries") a mmap() of anonymous memory without a specific address
> hint and of at least PMD_SIZE will be aligned to PMD so that it can
> benefit from a THP backing page.
>
> However this change has been shown to regress some workloads
> significantly. [1] reports regressions in various spec benchmarks, with
> up to 600% slowdown of the cactusBSSN benchmark on some platforms. The
> benchmark seems to create many mappings of 4632kB, which would have
> merged to a large THP-backed area before commit efa7df3e3bb5 and now
> they are fragmented to multiple areas each aligned to PMD boundary with
> gaps between. The regression then seems to be caused mainly due to the
> benchmark's memory access pattern suffering from TLB or cache aliasing
> due to the aligned boundaries of the individual areas.
>
> Another known regression bisected to commit efa7df3e3bb5 is darktable
> [2] [3] and early testing suggests this patch fixes the regression there
> as well.
>
> To fix the regression but still try to benefit from THP-friendly
> anonymous mapping alignment, add a condition that the size of the
> mapping must be a multiple of PMD size instead of at least PMD size. In
> case of many odd-sized mapping like the cactusBSSN creates, those will
> stop being aligned and with gaps between, and instead naturally merge
> again.
Thanks for debugging this. The fix makes sense to me. Reviewed-by: Yang
Shi <yang@os.amperecomputing.com>
>
> Reported-by: Michael Matz <matz@suse.de>
> Debugged-by: Gabriel Krisman Bertazi <gabriel@krisman.be>
> Closes: https://bugzilla.suse.com/show_bug.cgi?id=1229012 [1]
> Reported-by: Matthias Bodenbinder <matthias@bodenbinder.de>
> Closes: https://bugzilla.kernel.org/show_bug.cgi?id=219366 [2]
> Closes: https://lore.kernel.org/all/2050f0d4-57b0-481d-bab8-05e8d48fed0c@leemhuis.info/ [3]
> Fixes: efa7df3e3bb5 ("mm: align larger anonymous mappings on THP boundaries")
> Cc: <stable@vger.kernel.org>
> Cc: Rik van Riel <riel@surriel.com>
> Cc: Yang Shi <yang@os.amperecomputing.com>
> Signed-off-by: Vlastimil Babka <vbabka@suse.cz>
> ---
> mm/mmap.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/mm/mmap.c b/mm/mmap.c
> index 9c0fb43064b5..a5297cfb1dfc 100644
> --- a/mm/mmap.c
> +++ b/mm/mmap.c
> @@ -900,7 +900,8 @@ __get_unmapped_area(struct file *file, unsigned long addr, unsigned long len,
>
> if (get_area) {
> addr = get_area(file, addr, len, pgoff, flags);
> - } else if (IS_ENABLED(CONFIG_TRANSPARENT_HUGEPAGE)) {
> + } else if (IS_ENABLED(CONFIG_TRANSPARENT_HUGEPAGE)
> + && IS_ALIGNED(len, PMD_SIZE)) {
> /* Ensures that larger anonymous mappings are THP aligned. */
> addr = thp_get_unmapped_area_vmflags(file, addr, len,
> pgoff, flags, vm_flags);
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH hotfix 6.12] mm, mmap: limit THP aligment of anonymous mappings to PMD-aligned sizes
2024-10-24 15:47 ` Lorenzo Stoakes
2024-10-24 16:00 ` Lorenzo Stoakes
2024-10-24 16:04 ` Vlastimil Babka
@ 2024-10-28 13:45 ` Michael Matz
2 siblings, 0 replies; 9+ messages in thread
From: Michael Matz @ 2024-10-28 13:45 UTC (permalink / raw)
To: Lorenzo Stoakes
Cc: Vlastimil Babka, Andrew Morton, Liam R. Howlett, Jann Horn,
Thorsten Leemhuis, linux-mm, linux-kernel, Petr Tesarik,
Gabriel Krisman Bertazi, Matthias Bodenbinder, stable,
Rik van Riel, Yang Shi
Hello,
On Thu, 24 Oct 2024, Lorenzo Stoakes wrote:
> > benchmark seems to create many mappings of 4632kB, which would have
> > merged to a large THP-backed area before commit efa7df3e3bb5 and now
> > they are fragmented to multiple areas each aligned to PMD boundary with
> > gaps between. The regression then seems to be caused mainly due to the
> > benchmark's memory access pattern suffering from TLB or cache aliasing
> > due to the aligned boundaries of the individual areas.
>
> Any more details on precisely why?
Anything we found out and theorized about is in the suse bugreport. I
think the best theory is TLB aliasing when the mixing^Whash function in
the given hardware uses too few bits, and most of them in the low 21-12
bits of an address. Of course that then still depends on the particular
access pattern. cactuBSSN has about 20 memory streams in the hot loops,
and the accesses are fairly regular from step to step (plus/minus certain
strides in 3D arrays). When their start addresses all differ only in the
upper bits, you will hit TLB aliasing from time to time, and when the
dimensions/strides are just right it occurs often, the N-way associativity
doesn't save you anymore and you will hit it very very hard.
It was interesting to see how broad the range of CPUs and vendors was that
exhibited the problem (in various degrees of severity, from 50% to 600%
slowdown), and how more recent CPUs don't show the symptom anymore. I
guess the micro-arch guys eventually convinced P&R management that hashing
another bit or two is worthwhile the silicon :-)
Ciao,
Michael.
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2024-10-28 13:45 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <2050f0d4-57b0-481d-bab8-05e8d48fed0c@leemhuis.info>
2024-10-24 15:12 ` [PATCH hotfix 6.12] mm, mmap: limit THP aligment of anonymous mappings to PMD-aligned sizes Vlastimil Babka
2024-10-24 15:13 ` kernel test robot
2024-10-24 15:22 ` Vlastimil Babka
2024-10-24 15:47 ` Lorenzo Stoakes
2024-10-24 16:00 ` Lorenzo Stoakes
2024-10-24 16:04 ` Vlastimil Babka
2024-10-24 16:17 ` Lorenzo Stoakes
2024-10-28 13:45 ` Michael Matz
2024-10-24 18:32 ` Yang Shi
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox