From: Vlastimil Babka <vbabka@suse.cz>
To: Michal Hocko <mhocko@kernel.org>
Cc: linux-mm@kvack.org, Andrew Morton <akpm@linux-foundation.org>,
Joonsoo Kim <iamjoonsoo.kim@lge.com>,
Rik van Riel <riel@redhat.com>,
David Rientjes <rientjes@google.com>,
Mel Gorman <mgorman@techsingularity.net>,
Johannes Weiner <hannes@cmpxchg.org>,
Tetsuo Handa <penguin-kernel@i-love.sakura.ne.jp>,
linux-kernel@vger.kernel.org,
Linus Torvalds <torvalds@linux-foundation.org>,
Hugh Dickins <hughd@google.com>
Subject: Re: [RFC 04/13] mm, page_alloc: restructure direct compaction handling in slowpath
Date: Fri, 13 May 2016 10:10:50 +0200 [thread overview]
Message-ID: <57358C0A.4020002@suse.cz> (raw)
In-Reply-To: <20160512132918.GJ4200@dhcp22.suse.cz>
On 05/12/2016 03:29 PM, Michal Hocko wrote:
> On Tue 10-05-16 09:35:54, Vlastimil Babka wrote:
>> This patch attempts to restructure the code with only minimal functional
>> changes. The call to the first compaction and THP-specific checks are now
>> placed above the retry loop, and the "noretry" direct compaction is removed.
>>
>> The initial compaction is additionally restricted only to costly orders, as we
>> can expect smaller orders to be held back by watermarks, and only larger orders
>> to suffer primarily from fragmentation. This better matches the checks in
>> reclaim's shrink_zones().
>>
>> There are two other smaller functional changes. One is that the upgrade from
>> async migration to light sync migration will always occur after the initial
>> compaction.
>
> I do not think this belongs to the patch. There are two reasons. First
> we do not need to do potentially more expensive sync mode when async is
> able to make some progress and the second
My concern was that __GFP_NORETRY non-costly allocations wouldn't
otherwise get a MIGRATE_SYNC_LIGHT pass at all. Previously they would
get it in the noretry: label. So do you think it's a corner case not
worth caring about? Alternatively we could also remove the 'restriction
of initial async compaction to costly orders' from this patch and apply
it separately later. That would also result in the flip to sync_light
after the initial async attempt for these allocations.
> is that with the currently
> fragile compaction implementation this might reintroduce the premature
> OOM for order-2 requests reported by Hugh. Please see
> http://lkml.kernel.org/r/alpine.LSU.2.11.1604141114290.1086@eggly.anvils
Hmm IIRC that involved some wrong conflict resolution in mmotm? I don't
remember what the code exactly did look like, but wasn't the problem
that the initial compaction was async, then the left-over hunk changed
migration_mode to sync_light, and then should_compact_retry() thought
"oh we already failed sync_light, return false" when in fact the
sync_light compaction never happened? Otherwise I don't see how
switching to sync_light "too early" could lead to premature OOMs.
> Your later patch (which I haven't reviewed yet) is then changing this
> considerably
Yes, my other concern with should_compact_retry() after your "mm, oom:
protect !costly allocations some more" is that relying on
compaction_failed() to upgrade the migration mode is unreliable. Async
compaction can easily keep returning as contended, so might never see
the COMPACT_COMPLETE result, if it's e.g. limited to nodes without a
really small zone such as ZONE_DMA.
> but I think it would be safer to not touch the migration
> mode in this - mostly cleanup - patch.
>
>> This is how it has been until recent patch "mm, oom: protect
>> !costly allocations some more", which introduced upgrading the mode based on
>> COMPACT_COMPLETE result, but kept the final compaction always upgraded, which
>> made it even more special. It's better to return to the simpler handling for
>> now, as migration modes will be further modified later in the series.
>>
>> The second change is that once both reclaim and compaction declare it's not
>> worth to retry the reclaim/compact loop, there is no final compaction attempt.
>> As argued above, this is intentional. If that final compaction were to succeed,
>> it would be due to a wrong retry decision, or simply a race with somebody else
>> freeing memory for us.
>>
>> The main outcome of this patch should be simpler code. Logically, the initial
>> compaction without reclaim is the exceptional case to the reclaim/compaction
>> scheme, but prior to the patch, it was the last loop iteration that was
>> exceptional. Now the code matches the logic better. The change also enable the
>> following patches.
>>
>> Signed-off-by: Vlastimil Babka <vbabka@suse.cz>
>
> Other than the above thing I like this patch.
> Acked-by: Michal Hocko <mhocko@suse.com>
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-05-13 8:11 UTC|newest]
Thread overview: 61+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-05-10 7:35 [RFC 00/13] make direct compaction more deterministic Vlastimil Babka
2016-05-10 7:35 ` [RFC 01/13] mm, compaction: don't isolate PageWriteback pages in MIGRATE_SYNC_LIGHT mode Vlastimil Babka
2016-05-11 12:40 ` Michal Hocko
2016-05-10 7:35 ` [RFC 02/13] mm, page_alloc: set alloc_flags only once in slowpath Vlastimil Babka
2016-05-10 11:28 ` Tetsuo Handa
2016-05-10 12:30 ` Vlastimil Babka
2016-05-12 12:41 ` Michal Hocko
2016-05-31 6:20 ` Joonsoo Kim
2016-05-31 7:59 ` Vlastimil Babka
2016-06-02 1:50 ` Joonsoo Kim
2016-05-10 7:35 ` [RFC 03/13] mm, page_alloc: don't retry initial attempt " Vlastimil Babka
2016-05-12 12:48 ` Michal Hocko
2016-05-31 6:25 ` Joonsoo Kim
2016-05-31 12:03 ` Vlastimil Babka
2016-05-10 7:35 ` [RFC 04/13] mm, page_alloc: restructure direct compaction handling " Vlastimil Babka
2016-05-12 13:29 ` Michal Hocko
2016-05-13 8:10 ` Vlastimil Babka [this message]
2016-05-13 8:31 ` Michal Hocko
2016-05-10 7:35 ` [RFC 05/13] mm, page_alloc: make THP-specific decisions more generic Vlastimil Babka
2016-05-12 13:43 ` Michal Hocko
2016-05-10 7:35 ` [RFC 06/13] mm, thp: remove __GFP_NORETRY from khugepaged and madvised allocations Vlastimil Babka
2016-05-12 16:20 ` Michal Hocko
2016-05-13 8:23 ` Vlastimil Babka
2016-05-13 12:05 ` Michal Hocko
2016-05-18 11:59 ` Vlastimil Babka
2016-05-18 15:24 ` Michal Hocko
2016-05-20 13:57 ` Vlastimil Babka
2016-05-23 8:39 ` Michal Hocko
2016-05-10 7:35 ` [RFC 07/13] mm, compaction: introduce direct compaction priority Vlastimil Babka
2016-05-13 12:37 ` Michal Hocko
2016-05-10 7:35 ` [RFC 08/13] mm, compaction: simplify contended compaction handling Vlastimil Babka
2016-05-13 13:09 ` Michal Hocko
2016-05-16 7:10 ` Vlastimil Babka
2016-05-10 7:35 ` [RFC 09/13] mm, compaction: make whole_zone flag ignore cached scanner positions Vlastimil Babka
2016-05-13 13:23 ` Michal Hocko
2016-05-10 7:36 ` [RFC 10/13] mm, compaction: cleanup unused functions Vlastimil Babka
2016-05-10 7:36 ` [RFC 11/13] mm, compaction: add the ultimate direct compaction priority Vlastimil Babka
2016-05-13 13:38 ` Michal Hocko
2016-05-16 7:17 ` Vlastimil Babka
2016-05-16 8:11 ` Michal Hocko
2016-05-18 12:46 ` Vlastimil Babka
2016-05-10 7:36 ` [RFC 12/13] mm, compaction: more reliably increase " Vlastimil Babka
2016-05-10 12:55 ` Vlastimil Babka
2016-05-13 14:15 ` Michal Hocko
2016-05-16 7:31 ` Vlastimil Babka
2016-05-16 8:14 ` Michal Hocko
2016-05-16 9:27 ` Vlastimil Babka
2016-05-16 9:52 ` Michal Hocko
2016-05-31 6:37 ` Joonsoo Kim
2016-05-31 12:07 ` Vlastimil Babka
2016-05-31 12:29 ` Vlastimil Babka
2016-06-02 2:50 ` Joonsoo Kim
2016-05-10 7:36 ` [RFC 13/13] mm, compaction: fix and improve watermark handling Vlastimil Babka
2016-05-16 9:25 ` Michal Hocko
2016-05-16 9:50 ` Vlastimil Babka
2016-05-16 12:30 ` Michal Hocko
2016-05-18 13:50 ` Mel Gorman
2016-05-18 14:27 ` Michal Hocko
2016-05-18 14:40 ` Mel Gorman
2016-05-17 20:01 ` [RFC 00/13] make direct compaction more deterministic Michal Hocko
2016-05-18 7:19 ` 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=57358C0A.4020002@suse.cz \
--to=vbabka@suse.cz \
--cc=akpm@linux-foundation.org \
--cc=hannes@cmpxchg.org \
--cc=hughd@google.com \
--cc=iamjoonsoo.kim@lge.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=mgorman@techsingularity.net \
--cc=mhocko@kernel.org \
--cc=penguin-kernel@i-love.sakura.ne.jp \
--cc=riel@redhat.com \
--cc=rientjes@google.com \
--cc=torvalds@linux-foundation.org \
/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).