From: Mike Kravetz <mike.kravetz@oracle.com>
To: linux-mm@kvack.org, linux-kernel@vger.kernel.org
Cc: Hillf Danton <hdanton@sina.com>, Michal Hocko <mhocko@kernel.org>,
Mel Gorman <mgorman@suse.de>, Vlastimil Babka <vbabka@suse.cz>,
Johannes Weiner <hannes@cmpxchg.org>,
Andrew Morton <akpm@linux-foundation.org>,
Mike Kravetz <mike.kravetz@oracle.com>
Subject: [RFC PATCH 2/3] mm, compaction: use MIN_COMPACT_COSTLY_PRIORITY everywhere for costly orders
Date: Wed, 24 Jul 2019 10:50:13 -0700 [thread overview]
Message-ID: <20190724175014.9935-3-mike.kravetz@oracle.com> (raw)
In-Reply-To: <20190724175014.9935-1-mike.kravetz@oracle.com>
For PAGE_ALLOC_COSTLY_ORDER allocations, MIN_COMPACT_COSTLY_PRIORITY is
minimum (highest priority). Other places in the compaction code key off
of MIN_COMPACT_PRIORITY. Costly order allocations will never get to
MIN_COMPACT_PRIORITY. Therefore, some conditions will never be met for
costly order allocations.
This was observed when hugetlb allocations could stall for minutes or
hours when should_compact_retry() would return true more often then it
should. Specifically, this was in the case where compact_result was
COMPACT_DEFERRED and COMPACT_PARTIAL_SKIPPED and no progress was being
made.
Signed-off-by: Mike Kravetz <mike.kravetz@oracle.com>
---
mm/compaction.c | 18 +++++++++++++-----
1 file changed, 13 insertions(+), 5 deletions(-)
diff --git a/mm/compaction.c b/mm/compaction.c
index 952dc2fb24e5..325b746068d1 100644
--- a/mm/compaction.c
+++ b/mm/compaction.c
@@ -2294,9 +2294,15 @@ static enum compact_result compact_zone_order(struct zone *zone, int order,
.alloc_flags = alloc_flags,
.classzone_idx = classzone_idx,
.direct_compaction = true,
- .whole_zone = (prio == MIN_COMPACT_PRIORITY),
- .ignore_skip_hint = (prio == MIN_COMPACT_PRIORITY),
- .ignore_block_suitable = (prio == MIN_COMPACT_PRIORITY)
+ .whole_zone = ((order > PAGE_ALLOC_COSTLY_ORDER) ?
+ (prio == MIN_COMPACT_COSTLY_PRIORITY) :
+ (prio == MIN_COMPACT_PRIORITY)),
+ .ignore_skip_hint = ((order > PAGE_ALLOC_COSTLY_ORDER) ?
+ (prio == MIN_COMPACT_COSTLY_PRIORITY) :
+ (prio == MIN_COMPACT_PRIORITY)),
+ .ignore_block_suitable = ((order > PAGE_ALLOC_COSTLY_ORDER) ?
+ (prio == MIN_COMPACT_COSTLY_PRIORITY) :
+ (prio == MIN_COMPACT_PRIORITY))
};
struct capture_control capc = {
.cc = &cc,
@@ -2338,6 +2344,7 @@ enum compact_result try_to_compact_pages(gfp_t gfp_mask, unsigned int order,
int may_perform_io = gfp_mask & __GFP_IO;
struct zoneref *z;
struct zone *zone;
+ int min_priority;
enum compact_result rc = COMPACT_SKIPPED;
/*
@@ -2350,12 +2357,13 @@ enum compact_result try_to_compact_pages(gfp_t gfp_mask, unsigned int order,
trace_mm_compaction_try_to_compact_pages(order, gfp_mask, prio);
/* Compact each zone in the list */
+ min_priority = (order > PAGE_ALLOC_COSTLY_ORDER) ?
+ MIN_COMPACT_COSTLY_PRIORITY : MIN_COMPACT_PRIORITY;
for_each_zone_zonelist_nodemask(zone, z, ac->zonelist, ac->high_zoneidx,
ac->nodemask) {
enum compact_result status;
- if (prio > MIN_COMPACT_PRIORITY
- && compaction_deferred(zone, order)) {
+ if (prio > min_priority && compaction_deferred(zone, order)) {
rc = max_t(enum compact_result, COMPACT_DEFERRED, rc);
continue;
}
--
2.20.1
next prev parent reply other threads:[~2019-07-24 17:50 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-07-24 17:50 [RFC PATCH 0/3] fix hugetlb page allocation stalls Mike Kravetz
2019-07-24 17:50 ` [RFC PATCH 1/3] mm, reclaim: make should_continue_reclaim perform dryrun detection Mike Kravetz
2019-07-25 8:05 ` Mel Gorman
2019-07-26 7:40 ` Hillf Danton
2019-07-26 8:12 ` Mel Gorman
2019-07-31 11:08 ` Vlastimil Babka
2019-07-31 12:25 ` Mel Gorman
2019-07-31 21:11 ` Mike Kravetz
2019-08-01 4:22 ` Hillf Danton
2019-08-01 8:44 ` Vlastimil Babka
2019-08-01 3:16 ` Hillf Danton
2019-07-24 17:50 ` Mike Kravetz [this message]
2019-07-25 8:06 ` [RFC PATCH 2/3] mm, compaction: use MIN_COMPACT_COSTLY_PRIORITY everywhere for costly orders Mel Gorman
2019-07-31 12:06 ` Vlastimil Babka
2019-07-31 20:30 ` Mike Kravetz
2019-08-01 13:01 ` Vlastimil Babka
2019-08-01 20:33 ` Mike Kravetz
2019-08-02 10:20 ` Vlastimil Babka
2019-08-02 12:05 ` Vlastimil Babka
2019-08-02 17:44 ` Mike Kravetz
2019-07-24 17:50 ` [RFC PATCH 3/3] hugetlbfs: don't retry when pool page allocations start to fail Mike Kravetz
2019-07-25 8:13 ` Mel Gorman
2019-07-25 17:15 ` Mike Kravetz
2019-07-25 22:43 ` Mel Gorman
2019-07-31 13:23 ` Vlastimil Babka
2019-07-31 21:13 ` Mike Kravetz
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=20190724175014.9935-3-mike.kravetz@oracle.com \
--to=mike.kravetz@oracle.com \
--cc=akpm@linux-foundation.org \
--cc=hannes@cmpxchg.org \
--cc=hdanton@sina.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=mgorman@suse.de \
--cc=mhocko@kernel.org \
--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).