From: David Rientjes <rientjes@google.com>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: Jonathan Corbet <corbet@lwn.net>,
"Kirill A. Shutemov" <kirill.shutemov@linux.intel.com>,
Vlastimil Babka <vbabka@suse.cz>,
Mel Gorman <mgorman@techsingularity.net>,
linux-kernel@vger.kernel.org, linux-mm@kvack.org
Subject: [patch] mm, thp: always direct reclaim for MADV_HUGEPAGE even when deferred
Date: Wed, 21 Dec 2016 16:21:54 -0800 (PST) [thread overview]
Message-ID: <alpine.DEB.2.10.1612211621210.100462@chino.kir.corp.google.com> (raw)
Currently, when defrag is set to "madvise", thp allocations will direct
reclaim. However, when defrag is set to "defer", all thp allocations do
not attempt reclaim regardless of MADV_HUGEPAGE.
This patch always directly reclaims for MADV_HUGEPAGE regions when defrag
is not set to "never." The idea is that MADV_HUGEPAGE regions really
want to be backed by hugepages and are willing to endure the latency at
fault as it was the default behavior prior to commit 444eb2a449ef ("mm:
thp: set THP defrag by default to madvise and add a stall-free defrag
option").
In this form, "defer" is a stronger, more heavyweight version of
"madvise".
Signed-off-by: David Rientjes <rientjes@google.com>
---
Documentation/vm/transhuge.txt | 7 +++++--
mm/huge_memory.c | 10 ++++++----
2 files changed, 11 insertions(+), 6 deletions(-)
diff --git a/Documentation/vm/transhuge.txt b/Documentation/vm/transhuge.txt
--- a/Documentation/vm/transhuge.txt
+++ b/Documentation/vm/transhuge.txt
@@ -121,8 +121,11 @@ to utilise them.
"defer" means that an application will wake kswapd in the background
to reclaim pages and wake kcompact to compact memory so that THP is
-available in the near future. It's the responsibility of khugepaged
-to then install the THP pages later.
+available in the near future, unless it is for a region where
+madvise(MADV_HUGEPAGE) has been used, in which case direct reclaim will be
+used. Kcompactd will attempt to make hugepages available for allocation in
+the near future and khugepaged will try to collapse existing memory into
+hugepages later.
"madvise" will enter direct reclaim like "always" but only for regions
that are have used madvise(MADV_HUGEPAGE). This is the default behaviour.
diff --git a/mm/huge_memory.c b/mm/huge_memory.c
--- a/mm/huge_memory.c
+++ b/mm/huge_memory.c
@@ -619,15 +619,17 @@ static int __do_huge_pmd_anonymous_page(struct vm_fault *vmf, struct page *page,
*/
static inline gfp_t alloc_hugepage_direct_gfpmask(struct vm_area_struct *vma)
{
- bool vma_madvised = !!(vma->vm_flags & VM_HUGEPAGE);
+ const bool vma_madvised = !!(vma->vm_flags & VM_HUGEPAGE);
if (test_bit(TRANSPARENT_HUGEPAGE_DEFRAG_REQ_MADV_FLAG,
&transparent_hugepage_flags) && vma_madvised)
return GFP_TRANSHUGE;
else if (test_bit(TRANSPARENT_HUGEPAGE_DEFRAG_KSWAPD_FLAG,
- &transparent_hugepage_flags))
- return GFP_TRANSHUGE_LIGHT | __GFP_KSWAPD_RECLAIM;
- else if (test_bit(TRANSPARENT_HUGEPAGE_DEFRAG_DIRECT_FLAG,
+ &transparent_hugepage_flags)) {
+ return GFP_TRANSHUGE_LIGHT |
+ (vma_madvised ? __GFP_DIRECT_RECLAIM :
+ __GFP_KSWAPD_RECLAIM);
+ } else if (test_bit(TRANSPARENT_HUGEPAGE_DEFRAG_DIRECT_FLAG,
&transparent_hugepage_flags))
return GFP_TRANSHUGE | (vma_madvised ? 0 : __GFP_NORETRY);
next reply other threads:[~2016-12-22 0:21 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-12-22 0:21 David Rientjes [this message]
2016-12-22 8:31 ` [patch] mm, thp: always direct reclaim for MADV_HUGEPAGE even when deferred Kirill A. Shutemov
2016-12-22 10:00 ` Michal Hocko
2016-12-22 21:05 ` David Rientjes
2016-12-23 8:51 ` Michal Hocko
2016-12-23 10:01 ` David Rientjes
2016-12-23 11:18 ` Michal Hocko
2016-12-23 22:46 ` David Rientjes
2016-12-26 9:02 ` Michal Hocko
2016-12-27 0:53 ` David Rientjes
2016-12-27 2:32 ` Kirill A. Shutemov
2016-12-27 9:41 ` Michal Hocko
2016-12-27 21:36 ` David Rientjes
2016-12-28 8:48 ` Michal Hocko
2016-12-28 21:33 ` David Rientjes
2016-12-29 8:24 ` Michal Hocko
2016-12-30 12:36 ` Mel Gorman
2016-12-30 12:56 ` Michal Hocko
2016-12-30 14:08 ` Mel Gorman
2016-12-30 22:30 ` David Rientjes
2017-01-03 10:37 ` Mel Gorman
2017-01-03 21:57 ` David Rientjes
2017-01-04 10:12 ` Mel Gorman
2017-01-04 21:53 ` David Rientjes
2017-01-02 8:38 ` Vlastimil Babka
2017-01-03 22:44 ` David Rientjes
2017-01-04 8:32 ` Vlastimil Babka
2017-01-04 9:46 ` Michal Hocko
2017-01-04 22:04 ` David Rientjes
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=alpine.DEB.2.10.1612211621210.100462@chino.kir.corp.google.com \
--to=rientjes@google.com \
--cc=akpm@linux-foundation.org \
--cc=corbet@lwn.net \
--cc=kirill.shutemov@linux.intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=mgorman@techsingularity.net \
--cc=vbabka@suse.cz \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).