forked from mirrors/linux
		
	mm: mmap: map MAP_STACK to VM_NOHUGEPAGE
commitefa7df3e3b("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/202312192310.56367035-oliver.sang@intel.com/ Link: https://lkml.kernel.org/r/20231221065943.2803551-2-shy828301@gmail.com Fixes:efa7df3e3b("mm: align larger anonymous mappings on THP boundaries") Signed-off-by: Yang Shi <yang@os.amperecomputing.com> Reported-by: kernel test robot <oliver.sang@intel.com> Tested-by: Oliver Sang <oliver.sang@intel.com> Reviewed-by: Yin Fengwei <fengwei.yin@intel.com> Cc: Rik van Riel <riel@surriel.com> Cc: Matthew Wilcox <willy@infradead.org> Cc: Christopher Lameter <cl@linux.com> Cc: Huang, Ying <ying.huang@intel.com> Cc: <stable@vger.kerenl.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
		
							parent
							
								
									4dca82d141
								
							
						
					
					
						commit
						c4608d1bf7
					
				
					 1 changed files with 1 additions and 0 deletions
				
			
		|  | @ -156,6 +156,7 @@ calc_vm_flag_bits(unsigned long flags) | ||||||
| 	return _calc_vm_trans(flags, MAP_GROWSDOWN,  VM_GROWSDOWN ) | | 	return _calc_vm_trans(flags, MAP_GROWSDOWN,  VM_GROWSDOWN ) | | ||||||
| 	       _calc_vm_trans(flags, MAP_LOCKED,     VM_LOCKED    ) | | 	       _calc_vm_trans(flags, MAP_LOCKED,     VM_LOCKED    ) | | ||||||
| 	       _calc_vm_trans(flags, MAP_SYNC,	     VM_SYNC      ) | | 	       _calc_vm_trans(flags, MAP_SYNC,	     VM_SYNC      ) | | ||||||
|  | 	       _calc_vm_trans(flags, MAP_STACK,	     VM_NOHUGEPAGE) | | ||||||
| 	       arch_calc_vm_flag_bits(flags); | 	       arch_calc_vm_flag_bits(flags); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue
	
	 Yang Shi
						Yang Shi