Skip to content

Commit c4608d1

Browse files
Yang Shiakpm00
authored andcommitted
mm: mmap: map MAP_STACK to VM_NOHUGEPAGE
commit efa7df3 ("mm: align larger anonymous mappings on THP boundaries") incured regression for stress-ng pthread benchmark [1]. It is because THP get allocated to pthread's stack area much more possible than before. Pthread's stack area is allocated by mmap without VM_GROWSDOWN or VM_GROWSUP flag, so kernel can't tell whether it is a stack area or not. The MAP_STACK flag is used to mark the stack area, but it is a no-op on Linux. Mapping MAP_STACK to VM_NOHUGEPAGE to prevent from allocating THP for such stack area. With this change the stack area looks like: fffd18e10000-fffd19610000 rw-p 00000000 00:00 0 Size: 8192 kB KernelPageSize: 4 kB MMUPageSize: 4 kB Rss: 12 kB Pss: 12 kB Pss_Dirty: 12 kB Shared_Clean: 0 kB Shared_Dirty: 0 kB Private_Clean: 0 kB Private_Dirty: 12 kB Referenced: 12 kB Anonymous: 12 kB KSM: 0 kB LazyFree: 0 kB AnonHugePages: 0 kB ShmemPmdMapped: 0 kB FilePmdMapped: 0 kB Shared_Hugetlb: 0 kB Private_Hugetlb: 0 kB Swap: 0 kB SwapPss: 0 kB Locked: 0 kB THPeligible: 0 VmFlags: rd wr mr mw me ac nh The "nh" flag is set. [1] https://lore.kernel.org/linux-mm/[email protected]/ Link: https://lkml.kernel.org/r/[email protected] Fixes: efa7df3 ("mm: align larger anonymous mappings on THP boundaries") Signed-off-by: Yang Shi <[email protected]> Reported-by: kernel test robot <[email protected]> Tested-by: Oliver Sang <[email protected]> Reviewed-by: Yin Fengwei <[email protected]> Cc: Rik van Riel <[email protected]> Cc: Matthew Wilcox <[email protected]> Cc: Christopher Lameter <[email protected]> Cc: Huang, Ying <[email protected]> Cc: <[email protected]> Signed-off-by: Andrew Morton <[email protected]>
1 parent 4dca82d commit c4608d1

File tree

1 file changed

+1
-0
lines changed

1 file changed

+1
-0
lines changed

include/linux/mman.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,7 @@ calc_vm_flag_bits(unsigned long flags)
156156
return _calc_vm_trans(flags, MAP_GROWSDOWN, VM_GROWSDOWN ) |
157157
_calc_vm_trans(flags, MAP_LOCKED, VM_LOCKED ) |
158158
_calc_vm_trans(flags, MAP_SYNC, VM_SYNC ) |
159+
_calc_vm_trans(flags, MAP_STACK, VM_NOHUGEPAGE) |
159160
arch_calc_vm_flag_bits(flags);
160161
}
161162

0 commit comments

Comments
 (0)