All of lore.kernel.org
 help / color / mirror / Atom feed
From: Vlastimil Babka <vbabka@suse.cz>
To: Michal Hocko <mhocko@kernel.org>,
	Andrew Morton <akpm@linux-foundation.org>
Cc: Linus Torvalds <torvalds@linux-foundation.org>,
	Johannes Weiner <hannes@cmpxchg.org>,
	Mel Gorman <mgorman@suse.de>,
	David Rientjes <rientjes@google.com>,
	Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>,
	Joonsoo Kim <js1304@gmail.com>,
	Hillf Danton <hillf.zj@alibaba-inc.com>,
	linux-mm@kvack.org, LKML <linux-kernel@vger.kernel.org>,
	Michal Hocko <mhocko@suse.com>
Subject: Re: [PATCH 14/14] mm, oom, compaction: prevent from should_compact_retry looping for ever for costly orders
Date: Thu, 28 Apr 2016 10:59:22 +0200	[thread overview]
Message-ID: <5721D0EA.3020205@suse.cz> (raw)
In-Reply-To: <1461181647-8039-15-git-send-email-mhocko@kernel.org>

On 04/20/2016 09:47 PM, Michal Hocko wrote:
> From: Michal Hocko <mhocko@suse.com>
>
> "mm: consider compaction feedback also for costly allocation" has
> removed the upper bound for the reclaim/compaction retries based on the
> number of reclaimed pages for costly orders. While this is desirable
> the patch did miss a mis interaction between reclaim, compaction and the
> retry logic.

Hmm perhaps reversing the order of patches 13 and 14 would be a bit 
safer wrt future bisections then? Add compaction_zonelist_suitable() 
first with the reasoning, and then immediately use it in the other patch.

> The direct reclaim tries to get zones over min watermark
> while compaction backs off and returns COMPACT_SKIPPED when all zones
> are below low watermark + 1<<order gap. If we are getting really close
> to OOM then __compaction_suitable can keep returning COMPACT_SKIPPED a
> high order request (e.g. hugetlb order-9) while the reclaim is not able
> to release enough pages to get us over low watermark. The reclaim is
> still able to make some progress (usually trashing over few remaining
> pages) so we are not able to break out from the loop.
>
> I have seen this happening with the same test described in "mm: consider
> compaction feedback also for costly allocation" on a swapless system.
> The original problem got resolved by "vmscan: consider classzone_idx in
> compaction_ready" but it shows how things might go wrong when we
> approach the oom event horizont.
>
> The reason why compaction requires being over low rather than min
> watermark is not clear to me. This check was there essentially since
> 56de7263fcf3 ("mm: compaction: direct compact when a high-order
> allocation fails"). It is clearly an implementation detail though and we
> shouldn't pull it into the generic retry logic while we should be able
> to cope with such eventuality. The only place in should_compact_retry
> where we retry without any upper bound is for compaction_withdrawn()
> case.
>
> Introduce compaction_zonelist_suitable function which checks the given
> zonelist and returns true only if there is at least one zone which would
> would unblock __compaction_suitable if more memory got reclaimed. In
> this implementation it checks __compaction_suitable with NR_FREE_PAGES
> plus part of the reclaimable memory as the target for the watermark check.
> The reclaimable memory is reduced linearly by the allocation order. The
> idea is that we do not want to reclaim all the remaining memory for a
> single allocation request just unblock __compaction_suitable which
> doesn't guarantee we will make a further progress.
>
> The new helper is then used if compaction_withdrawn() feedback was
> provided so we do not retry if there is no outlook for a further
> progress. !costly requests shouldn't be affected much - e.g. order-2
> pages would require to have at least 64kB on the reclaimable LRUs while
> order-9 would need at least 32M which should be enough to not lock up.
>
> [vbabka@suse.cz: fix classzone_idx vs. high_zoneidx usage in
> compaction_zonelist_suitable]
> Signed-off-by: Michal Hocko <mhocko@suse.com>

Acked-by: Vlastimil Babka <vbabka@suse.cz>

--
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>

WARNING: multiple messages have this Message-ID (diff)
From: Vlastimil Babka <vbabka@suse.cz>
To: Michal Hocko <mhocko@kernel.org>,
	Andrew Morton <akpm@linux-foundation.org>
Cc: Linus Torvalds <torvalds@linux-foundation.org>,
	Johannes Weiner <hannes@cmpxchg.org>,
	Mel Gorman <mgorman@suse.de>,
	David Rientjes <rientjes@google.com>,
	Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>,
	Joonsoo Kim <js1304@gmail.com>,
	Hillf Danton <hillf.zj@alibaba-inc.com>,
	linux-mm@kvack.org, LKML <linux-kernel@vger.kernel.org>,
	Michal Hocko <mhocko@suse.com>
Subject: Re: [PATCH 14/14] mm, oom, compaction: prevent from should_compact_retry looping for ever for costly orders
Date: Thu, 28 Apr 2016 10:59:22 +0200	[thread overview]
Message-ID: <5721D0EA.3020205@suse.cz> (raw)
In-Reply-To: <1461181647-8039-15-git-send-email-mhocko@kernel.org>

On 04/20/2016 09:47 PM, Michal Hocko wrote:
> From: Michal Hocko <mhocko@suse.com>
>
> "mm: consider compaction feedback also for costly allocation" has
> removed the upper bound for the reclaim/compaction retries based on the
> number of reclaimed pages for costly orders. While this is desirable
> the patch did miss a mis interaction between reclaim, compaction and the
> retry logic.

Hmm perhaps reversing the order of patches 13 and 14 would be a bit 
safer wrt future bisections then? Add compaction_zonelist_suitable() 
first with the reasoning, and then immediately use it in the other patch.

> The direct reclaim tries to get zones over min watermark
> while compaction backs off and returns COMPACT_SKIPPED when all zones
> are below low watermark + 1<<order gap. If we are getting really close
> to OOM then __compaction_suitable can keep returning COMPACT_SKIPPED a
> high order request (e.g. hugetlb order-9) while the reclaim is not able
> to release enough pages to get us over low watermark. The reclaim is
> still able to make some progress (usually trashing over few remaining
> pages) so we are not able to break out from the loop.
>
> I have seen this happening with the same test described in "mm: consider
> compaction feedback also for costly allocation" on a swapless system.
> The original problem got resolved by "vmscan: consider classzone_idx in
> compaction_ready" but it shows how things might go wrong when we
> approach the oom event horizont.
>
> The reason why compaction requires being over low rather than min
> watermark is not clear to me. This check was there essentially since
> 56de7263fcf3 ("mm: compaction: direct compact when a high-order
> allocation fails"). It is clearly an implementation detail though and we
> shouldn't pull it into the generic retry logic while we should be able
> to cope with such eventuality. The only place in should_compact_retry
> where we retry without any upper bound is for compaction_withdrawn()
> case.
>
> Introduce compaction_zonelist_suitable function which checks the given
> zonelist and returns true only if there is at least one zone which would
> would unblock __compaction_suitable if more memory got reclaimed. In
> this implementation it checks __compaction_suitable with NR_FREE_PAGES
> plus part of the reclaimable memory as the target for the watermark check.
> The reclaimable memory is reduced linearly by the allocation order. The
> idea is that we do not want to reclaim all the remaining memory for a
> single allocation request just unblock __compaction_suitable which
> doesn't guarantee we will make a further progress.
>
> The new helper is then used if compaction_withdrawn() feedback was
> provided so we do not retry if there is no outlook for a further
> progress. !costly requests shouldn't be affected much - e.g. order-2
> pages would require to have at least 64kB on the reclaimable LRUs while
> order-9 would need at least 32M which should be enough to not lock up.
>
> [vbabka@suse.cz: fix classzone_idx vs. high_zoneidx usage in
> compaction_zonelist_suitable]
> Signed-off-by: Michal Hocko <mhocko@suse.com>

Acked-by: Vlastimil Babka <vbabka@suse.cz>

  parent reply	other threads:[~2016-04-28  8:59 UTC|newest]

Thread overview: 120+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-04-20 19:47 [PATCH 0.14] oom detection rework v6 Michal Hocko
2016-04-20 19:47 ` Michal Hocko
2016-04-20 19:47 ` [PATCH 01/14] vmscan: consider classzone_idx in compaction_ready Michal Hocko
2016-04-20 19:47   ` Michal Hocko
2016-04-21  3:32   ` Hillf Danton
2016-04-21  3:32     ` Hillf Danton
2016-05-04 13:56   ` Michal Hocko
2016-05-04 13:56     ` Michal Hocko
2016-04-20 19:47 ` [PATCH 02/14] mm, compaction: change COMPACT_ constants into enum Michal Hocko
2016-04-20 19:47   ` Michal Hocko
2016-04-20 19:47 ` [PATCH 03/14] mm, compaction: cover all compaction mode in compact_zone Michal Hocko
2016-04-20 19:47   ` Michal Hocko
2016-04-20 19:47 ` [PATCH 04/14] mm, compaction: distinguish COMPACT_DEFERRED from COMPACT_SKIPPED Michal Hocko
2016-04-20 19:47   ` Michal Hocko
2016-04-21  7:08   ` Hillf Danton
2016-04-21  7:08     ` Hillf Danton
2016-04-20 19:47 ` [PATCH 05/14] mm, compaction: distinguish between full and partial COMPACT_COMPLETE Michal Hocko
2016-04-20 19:47   ` Michal Hocko
2016-04-21  6:39   ` Hillf Danton
2016-04-21  6:39     ` Hillf Danton
2016-04-20 19:47 ` [PATCH 06/14] mm, compaction: Update compaction_result ordering Michal Hocko
2016-04-20 19:47   ` Michal Hocko
2016-04-21  6:45   ` Hillf Danton
2016-04-21  6:45     ` Hillf Danton
2016-04-20 19:47 ` [PATCH 07/14] mm, compaction: Simplify __alloc_pages_direct_compact feedback interface Michal Hocko
2016-04-20 19:47   ` Michal Hocko
2016-04-21  6:50   ` Hillf Danton
2016-04-21  6:50     ` Hillf Danton
2016-04-20 19:47 ` [PATCH 08/14] mm, compaction: Abstract compaction feedback to helpers Michal Hocko
2016-04-20 19:47   ` Michal Hocko
2016-04-21  6:57   ` Hillf Danton
2016-04-21  6:57     ` Hillf Danton
2016-04-28  8:47   ` Vlastimil Babka
2016-04-28  8:47     ` Vlastimil Babka
2016-04-20 19:47 ` [PATCH 09/14] mm: use compaction feedback for thp backoff conditions Michal Hocko
2016-04-20 19:47   ` Michal Hocko
2016-04-21  7:05   ` Hillf Danton
2016-04-21  7:05     ` Hillf Danton
2016-04-28  8:53   ` Vlastimil Babka
2016-04-28  8:53     ` Vlastimil Babka
2016-04-28 12:35     ` Michal Hocko
2016-04-28 12:35       ` Michal Hocko
2016-04-29  9:16       ` Vlastimil Babka
2016-04-29  9:16         ` Vlastimil Babka
2016-04-29  9:28         ` Michal Hocko
2016-04-29  9:28           ` Michal Hocko
2016-04-20 19:47 ` [PATCH 10/14] mm, oom: rework oom detection Michal Hocko
2016-04-20 19:47   ` Michal Hocko
2016-04-20 19:47 ` [PATCH 11/14] mm: throttle on IO only when there are too many dirty and writeback pages Michal Hocko
2016-04-20 19:47   ` Michal Hocko
2016-04-20 19:47 ` [PATCH 12/14] mm, oom: protect !costly allocations some more Michal Hocko
2016-04-20 19:47   ` Michal Hocko
2016-04-21  8:03   ` Hillf Danton
2016-04-21  8:03     ` Hillf Danton
2016-05-04  6:01   ` Joonsoo Kim
2016-05-04  6:01     ` Joonsoo Kim
2016-05-04  6:31     ` Joonsoo Kim
2016-05-04  6:31       ` Joonsoo Kim
2016-05-04  8:56       ` Michal Hocko
2016-05-04  8:56         ` Michal Hocko
2016-05-04 14:57         ` Joonsoo Kim
2016-05-04 14:57           ` Joonsoo Kim
2016-05-04 18:19           ` Michal Hocko
2016-05-04 18:19             ` Michal Hocko
2016-05-04  8:53     ` Michal Hocko
2016-05-04  8:53       ` Michal Hocko
2016-05-04 14:39       ` Joonsoo Kim
2016-05-04 14:39         ` Joonsoo Kim
2016-05-04 18:20         ` Michal Hocko
2016-05-04 18:20           ` Michal Hocko
2016-04-20 19:47 ` [PATCH 13/14] mm: consider compaction feedback also for costly allocation Michal Hocko
2016-04-20 19:47   ` Michal Hocko
2016-04-21  8:13   ` Hillf Danton
2016-04-21  8:13     ` Hillf Danton
2016-04-20 19:47 ` [PATCH 14/14] mm, oom, compaction: prevent from should_compact_retry looping for ever for costly orders Michal Hocko
2016-04-20 19:47   ` Michal Hocko
2016-04-21  8:24   ` Hillf Danton
2016-04-21  8:24     ` Hillf Danton
2016-04-28  8:59   ` Vlastimil Babka [this message]
2016-04-28  8:59     ` Vlastimil Babka
2016-04-28 12:39     ` Michal Hocko
2016-04-28 12:39       ` Michal Hocko
2016-05-04  6:27   ` Joonsoo Kim
2016-05-04  6:27     ` Joonsoo Kim
2016-05-04  9:04     ` Michal Hocko
2016-05-04  9:04       ` Michal Hocko
2016-05-04 15:14       ` Joonsoo Kim
2016-05-04 15:14         ` Joonsoo Kim
2016-05-04 19:22         ` Michal Hocko
2016-05-04 19:22           ` Michal Hocko
2016-05-04  5:45 ` [PATCH 0.14] oom detection rework v6 Joonsoo Kim
2016-05-04  5:45   ` Joonsoo Kim
2016-05-04  8:12   ` Vlastimil Babka
2016-05-04  8:12     ` Vlastimil Babka
2016-05-04  8:32     ` Joonsoo Kim
2016-05-04  8:32       ` Joonsoo Kim
2016-05-04  8:50     ` Michal Hocko
2016-05-04  8:50       ` Michal Hocko
2016-05-04  8:47   ` Michal Hocko
2016-05-04  8:47     ` Michal Hocko
2016-05-04 14:32     ` Joonsoo Kim
2016-05-04 14:32       ` Joonsoo Kim
2016-05-04 18:16       ` Michal Hocko
2016-05-04 18:16         ` Michal Hocko
2016-05-10  6:41         ` Joonsoo Kim
2016-05-10  6:41           ` Joonsoo Kim
2016-05-10  7:09           ` Vlastimil Babka
2016-05-10  7:09             ` Vlastimil Babka
2016-05-10  8:00             ` Joonsoo Kim
2016-05-10  8:00               ` Joonsoo Kim
2016-05-10  9:44               ` Michal Hocko
2016-05-10  9:44                 ` Michal Hocko
2016-05-10  9:43           ` Michal Hocko
2016-05-10  9:43             ` Michal Hocko
2016-05-12  2:23             ` Joonsoo Kim
2016-05-12  2:23               ` Joonsoo Kim
2016-05-12  5:19               ` Joonsoo Kim
2016-05-12  5:19                 ` Joonsoo Kim
2016-05-12 10:59               ` Michal Hocko
2016-05-12 10:59                 ` Michal Hocko

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=5721D0EA.3020205@suse.cz \
    --to=vbabka@suse.cz \
    --cc=akpm@linux-foundation.org \
    --cc=hannes@cmpxchg.org \
    --cc=hillf.zj@alibaba-inc.com \
    --cc=js1304@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=mgorman@suse.de \
    --cc=mhocko@kernel.org \
    --cc=mhocko@suse.com \
    --cc=penguin-kernel@I-love.SAKURA.ne.jp \
    --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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.