]> git.baikalelectronics.ru Git - kernel.git/commit
mm, thp: restore node-local hugepage allocations
authorDavid Rientjes <rientjes@google.com>
Wed, 5 Dec 2018 23:45:54 +0000 (15:45 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Wed, 5 Dec 2018 23:45:54 +0000 (15:45 -0800)
commita5e0fbdc3c8b84974958e34345569b8da1efd6ee
treedc0a5493ab599b25d7b5b09b6352ab4733e5591a
parent3962b58c7cab47122b29343da4cbda357a7ff715
mm, thp: restore node-local hugepage allocations

This is a full revert of 2057d2a0e27d ("mm: thp: relax __GFP_THISNODE for
MADV_HUGEPAGE mappings") and a partial revert of 14565bed95cc ("mm, thp:
consolidate THP gfp handling into alloc_hugepage_direct_gfpmask").

By not setting __GFP_THISNODE, applications can allocate remote hugepages
when the local node is fragmented or low on memory when either the thp
defrag setting is "always" or the vma has been madvised with
MADV_HUGEPAGE.

Remote access to hugepages often has much higher latency than local pages
of the native page size.  On Haswell, 2057d2a0e27d was shown to have a
13.9% access regression after this commit for binaries that remap their
text segment to be backed by transparent hugepages.

The intent of 2057d2a0e27d is to address an issue where a local node is
low on memory or fragmented such that a hugepage cannot be allocated.  In
every scenario where this was described as a fix, there is abundant and
unfragmented remote memory available to allocate from, even with a greater
access latency.

If remote memory is also low or fragmented, not setting __GFP_THISNODE was
also measured on Haswell to have a 40% regression in allocation latency.

Restore __GFP_THISNODE for thp allocations.

Fixes: 2057d2a0e27d ("mm: thp: relax __GFP_THISNODE for MADV_HUGEPAGE mappings")
Fixes: 14565bed95cc ("mm, thp: consolidate THP gfp handling into alloc_hugepage_direct_gfpmask")
Cc: Andrea Arcangeli <aarcange@redhat.com>
Cc: Mel Gorman <mgorman@techsingularity.net>
Cc: Vlastimil Babka <vbabka@suse.cz>
Cc: Michal Hocko <mhocko@kernel.org>
Cc: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: David Rientjes <rientjes@google.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
include/linux/mempolicy.h
mm/huge_memory.c
mm/mempolicy.c