From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-lf0-f69.google.com (mail-lf0-f69.google.com [209.85.215.69]) by kanga.kvack.org (Postfix) with ESMTP id 1FBDC28024E for ; Wed, 21 Sep 2016 13:04:06 -0400 (EDT) Received: by mail-lf0-f69.google.com with SMTP id b71so33897172lfg.2 for ; Wed, 21 Sep 2016 10:04:06 -0700 (PDT) Received: from mail-wm0-f68.google.com (mail-wm0-f68.google.com. [74.125.82.68]) by mx.google.com with ESMTPS id d2si31065502wjl.73.2016.09.21.10.04.04 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 21 Sep 2016 10:04:04 -0700 (PDT) Received: by mail-wm0-f68.google.com with SMTP id w84so9692288wmg.0 for ; Wed, 21 Sep 2016 10:04:04 -0700 (PDT) Date: Wed, 21 Sep 2016 19:04:02 +0200 From: Michal Hocko Subject: Re: [PATCH 1/4] Revert "mm, oom: prevent premature OOM killer invocation for high order request" Message-ID: <20160921170402.GE24210@dhcp22.suse.cz> References: <20160906135258.18335-1-vbabka@suse.cz> <20160906135258.18335-2-vbabka@suse.cz> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20160906135258.18335-2-vbabka@suse.cz> Sender: owner-linux-mm@kvack.org List-ID: To: Vlastimil Babka Cc: Andrew Morton , Arkadiusz Miskiewicz , Ralf-Peter Rohbeck , Olaf Hering , linux-kernel@vger.kernel.org, Linus Torvalds , linux-mm@kvack.org, Mel Gorman , Joonsoo Kim , David Rientjes , Rik van Riel On Tue 06-09-16 15:52:55, Vlastimil Babka wrote: > Commit 6b4e3181d7bd ("mm, oom: prevent premature OOM killer invocation for high > order request") was intended as a quick fix of OOM regressions for 4.8 and > stable 4.7.x kernels. For a better long-term solution, we still want to > consider compaction feedback, which should be possible after some more > improvements in the following patches. > > This reverts commit 6b4e3181d7bd5ca5ab6f45929e4a5ffa7ab4ab7f. > > Signed-off-by: Vlastimil Babka > Cc: Michal Hocko > Cc: Mel Gorman > Cc: Joonsoo Kim > Cc: David Rientjes > Cc: Rik van Riel Acked-by: Michal Hocko > --- > mm/page_alloc.c | 51 +++++++++++++++++++++++++++++++++++++++++++++++++-- > 1 file changed, 49 insertions(+), 2 deletions(-) > > diff --git a/mm/page_alloc.c b/mm/page_alloc.c > index ee3997859f14..1df7694f4ec7 100644 > --- a/mm/page_alloc.c > +++ b/mm/page_alloc.c > @@ -3158,6 +3158,54 @@ __alloc_pages_direct_compact(gfp_t gfp_mask, unsigned int order, > return NULL; > } > > +static inline bool > +should_compact_retry(struct alloc_context *ac, int order, int alloc_flags, > + enum compact_result compact_result, > + enum compact_priority *compact_priority, > + int compaction_retries) > +{ > + int max_retries = MAX_COMPACT_RETRIES; > + > + if (!order) > + return false; > + > + /* > + * compaction considers all the zone as desperately out of memory > + * so it doesn't really make much sense to retry except when the > + * failure could be caused by insufficient priority > + */ > + if (compaction_failed(compact_result)) { > + if (*compact_priority > MIN_COMPACT_PRIORITY) { > + (*compact_priority)--; > + return true; > + } > + return false; > + } > + > + /* > + * make sure the compaction wasn't deferred or didn't bail out early > + * due to locks contention before we declare that we should give up. > + * But do not retry if the given zonelist is not suitable for > + * compaction. > + */ > + if (compaction_withdrawn(compact_result)) > + return compaction_zonelist_suitable(ac, order, alloc_flags); > + > + /* > + * !costly requests are much more important than __GFP_REPEAT > + * costly ones because they are de facto nofail and invoke OOM > + * killer to move on while costly can fail and users are ready > + * to cope with that. 1/4 retries is rather arbitrary but we > + * would need much more detailed feedback from compaction to > + * make a better decision. > + */ > + if (order > PAGE_ALLOC_COSTLY_ORDER) > + max_retries /= 4; > + if (compaction_retries <= max_retries) > + return true; > + > + return false; > +} > #else > static inline struct page * > __alloc_pages_direct_compact(gfp_t gfp_mask, unsigned int order, > @@ -3168,8 +3216,6 @@ __alloc_pages_direct_compact(gfp_t gfp_mask, unsigned int order, > return NULL; > } > > -#endif /* CONFIG_COMPACTION */ > - > static inline bool > should_compact_retry(struct alloc_context *ac, unsigned int order, int alloc_flags, > enum compact_result compact_result, > @@ -3196,6 +3242,7 @@ should_compact_retry(struct alloc_context *ac, unsigned int order, int alloc_fla > } > return false; > } > +#endif /* CONFIG_COMPACTION */ > > /* Perform direct synchronous page reclaim */ > static int > -- > 2.9.3 -- Michal Hocko SUSE Labs -- 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: email@kvack.org