From: Joonsoo Kim <iamjoonsoo.kim@lge.com>
To: Vlastimil Babka <vbabka@suse.cz>
Cc: Andrew Morton <akpm@linux-foundation.org>,
Michal Hocko <mhocko@kernel.org>,
Mel Gorman <mgorman@techsingularity.net>,
David Rientjes <rientjes@google.com>,
Rik van Riel <riel@redhat.com>,
linux-mm@kvack.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v6 05/11] mm, compaction: add the ultimate direct compaction priority
Date: Tue, 16 Aug 2016 14:58:57 +0900 [thread overview]
Message-ID: <20160816055857.GB17448@js1304-P5Q-DELUXE> (raw)
In-Reply-To: <20160810091226.6709-6-vbabka@suse.cz>
On Wed, Aug 10, 2016 at 11:12:20AM +0200, Vlastimil Babka wrote:
> During reclaim/compaction loop, it's desirable to get a final answer from
> unsuccessful compaction so we can either fail the allocation or invoke the OOM
> killer. However, heuristics such as deferred compaction or pageblock skip bits
> can cause compaction to skip parts or whole zones and lead to premature OOM's,
> failures or excessive reclaim/compaction retries.
>
> To remedy this, we introduce a new direct compaction priority called
> COMPACT_PRIO_SYNC_FULL, which instructs direct compaction to:
>
> - ignore deferred compaction status for a zone
> - ignore pageblock skip hints
> - ignore cached scanner positions and scan the whole zone
>
> The new priority should get eventually picked up by should_compact_retry() and
> this should improve success rates for costly allocations using __GFP_REPEAT,
> such as hugetlbfs allocations, and reduce some corner-case OOM's for non-costly
> allocations.
>
> Signed-off-by: Vlastimil Babka <vbabka@suse.cz>
> Acked-by: Michal Hocko <mhocko@suse.com>
> ---
> include/linux/compaction.h | 3 ++-
> mm/compaction.c | 5 ++++-
> 2 files changed, 6 insertions(+), 2 deletions(-)
>
> diff --git a/include/linux/compaction.h b/include/linux/compaction.h
> index e88c037afe47..a1fba9994728 100644
> --- a/include/linux/compaction.h
> +++ b/include/linux/compaction.h
> @@ -6,8 +6,9 @@
> * Lower value means higher priority, analogically to reclaim priority.
> */
> enum compact_priority {
> + COMPACT_PRIO_SYNC_FULL,
> + MIN_COMPACT_PRIORITY = COMPACT_PRIO_SYNC_FULL,
> COMPACT_PRIO_SYNC_LIGHT,
> - MIN_COMPACT_PRIORITY = COMPACT_PRIO_SYNC_LIGHT,
> DEF_COMPACT_PRIORITY = COMPACT_PRIO_SYNC_LIGHT,
> COMPACT_PRIO_ASYNC,
> INIT_COMPACT_PRIORITY = COMPACT_PRIO_ASYNC
> diff --git a/mm/compaction.c b/mm/compaction.c
> index a144f58f7193..ae4f40afcca1 100644
> --- a/mm/compaction.c
> +++ b/mm/compaction.c
> @@ -1644,6 +1644,8 @@ 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 == COMPACT_PRIO_SYNC_FULL),
> + .ignore_skip_hint = (prio == COMPACT_PRIO_SYNC_FULL)
> };
> INIT_LIST_HEAD(&cc.freepages);
> INIT_LIST_HEAD(&cc.migratepages);
> @@ -1689,7 +1691,8 @@ enum compact_result try_to_compact_pages(gfp_t gfp_mask, unsigned int order,
> ac->nodemask) {
> enum compact_result status;
>
> - if (compaction_deferred(zone, order)) {
> + if (prio > COMPACT_PRIO_SYNC_FULL
> + && compaction_deferred(zone, order)) {
> rc = max_t(enum compact_result, COMPACT_DEFERRED, rc);
> continue;
Could we provide prio to compaction_deferred() and do the decision in
that that function?
BTW, in kcompactd, compaction_deferred() is checked but
.ignore_skip_hint=true. Is there any reason? If we can remove
compaction_deferred() for kcompactd, we can check .ignore_skip_hint
to determine if defer is needed or not.
Thanks.
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
next prev parent reply other threads:[~2016-08-16 5:53 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-08-10 9:12 [PATCH v6 00/11] make direct compaction more deterministic Vlastimil Babka
2016-08-10 9:12 ` [PATCH v6 01/11] mm, compaction: make whole_zone flag ignore cached scanner positions Vlastimil Babka
2016-08-10 9:12 ` [PATCH v6 02/11] mm, compaction: cleanup unused functions Vlastimil Babka
2016-08-10 9:12 ` [PATCH v6 03/11] mm, compaction: rename COMPACT_PARTIAL to COMPACT_SUCCESS Vlastimil Babka
2016-08-18 9:01 ` Michal Hocko
2016-08-10 9:12 ` [PATCH v6 04/11] mm, compaction: don't recheck watermarks after COMPACT_SUCCESS Vlastimil Babka
2016-08-16 6:12 ` Joonsoo Kim
2016-08-16 6:11 ` Vlastimil Babka
2016-08-18 11:59 ` Vlastimil Babka
2016-08-18 9:03 ` Michal Hocko
2016-08-10 9:12 ` [PATCH v6 05/11] mm, compaction: add the ultimate direct compaction priority Vlastimil Babka
2016-08-16 5:58 ` Joonsoo Kim [this message]
2016-08-18 12:23 ` Vlastimil Babka
2016-08-10 9:12 ` [PATCH v6 06/11] mm, compaction: more reliably increase " Vlastimil Babka
2016-08-16 6:07 ` Joonsoo Kim
2016-08-16 6:31 ` Vlastimil Babka
2016-08-18 9:10 ` Michal Hocko
2016-08-18 9:44 ` Vlastimil Babka
2016-08-18 9:48 ` Michal Hocko
2016-08-10 9:12 ` [PATCH v6 07/11] mm, compaction: use correct watermark when checking compaction success Vlastimil Babka
2016-08-10 9:12 ` [PATCH v6 08/11] mm, compaction: create compact_gap wrapper Vlastimil Babka
2016-08-16 6:15 ` Joonsoo Kim
2016-08-16 6:15 ` Vlastimil Babka
2016-08-16 6:41 ` Joonsoo Kim
2016-08-18 12:13 ` Vlastimil Babka
2016-08-10 9:12 ` [PATCH v6 09/11] mm, compaction: use proper alloc_flags in __compaction_suitable() Vlastimil Babka
2016-08-10 9:12 ` [PATCH v6 10/11] mm, compaction: require only min watermarks for non-costly orders Vlastimil Babka
2016-08-16 6:16 ` Joonsoo Kim
2016-08-16 6:36 ` Vlastimil Babka
2016-08-16 6:46 ` Joonsoo Kim
2016-08-18 12:20 ` Vlastimil Babka
2016-08-10 9:12 ` [PATCH v6 11/11] mm, vmscan: make compaction_ready() more accurate and readable Vlastimil Babka
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=20160816055857.GB17448@js1304-P5Q-DELUXE \
--to=iamjoonsoo.kim@lge.com \
--cc=akpm@linux-foundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=mgorman@techsingularity.net \
--cc=mhocko@kernel.org \
--cc=riel@redhat.com \
--cc=rientjes@google.com \
--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).