Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754065AbcCHOsi (ORCPT ); Tue, 8 Mar 2016 09:48:38 -0500 Received: from mail-wm0-f65.google.com ([74.125.82.65]:32830 "EHLO mail-wm0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751516AbcCHOsa (ORCPT ); Tue, 8 Mar 2016 09:48:30 -0500 Date: Tue, 8 Mar 2016 15:48:27 +0100 From: Michal Hocko To: Vlastimil Babka Cc: Andrew Morton , Hugh Dickins , Sergey Senozhatsky , Linus Torvalds , Johannes Weiner , Mel Gorman , David Rientjes , Tetsuo Handa , Hillf Danton , KAMEZAWA Hiroyuki , Joonsoo Kim , linux-mm@kvack.org, LKML Subject: Re: [PATCH 3/3] mm, oom: protect !costly allocations some more Message-ID: <20160308144827.GK13542@dhcp22.suse.cz> References: <20160307160838.GB5028@dhcp22.suse.cz> <1457444565-10524-1-git-send-email-mhocko@kernel.org> <1457444565-10524-4-git-send-email-mhocko@kernel.org> <56DEE2FD.4000105@suse.cz> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <56DEE2FD.4000105@suse.cz> User-Agent: Mutt/1.5.24 (2015-08-30) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2810 Lines: 58 On Tue 08-03-16 15:34:37, Vlastimil Babka wrote: > On 03/08/2016 02:42 PM, Michal Hocko wrote: > > From: Michal Hocko > > > > should_reclaim_retry will give up retries for higher order allocations > > if none of the eligible zones has any requested or higher order pages > > available even if we pass the watermak check for order-0. This is done > > because there is no guarantee that the reclaimable and currently free > > pages will form the required order. > > > > This can, however, lead to situations were the high-order request (e.g. > > order-2 required for the stack allocation during fork) will trigger > > OOM too early - e.g. after the first reclaim/compaction round. Such a > > system would have to be highly fragmented and there is no guarantee > > further reclaim/compaction attempts would help but at least make sure > > that the compaction was active before we go OOM and keep retrying even > > if should_reclaim_retry tells us to oom if the last compaction round > > was either inactive (deferred, skipped or bailed out early due to > > contention) or it told us to continue. > > > > Signed-off-by: Michal Hocko > > --- > > include/linux/compaction.h | 5 +++++ > > mm/page_alloc.c | 53 ++++++++++++++++++++++++++++++++-------------- > > 2 files changed, 42 insertions(+), 16 deletions(-) > > > > diff --git a/include/linux/compaction.h b/include/linux/compaction.h > > index b167801187e7..49e04326dcb8 100644 > > --- a/include/linux/compaction.h > > +++ b/include/linux/compaction.h > > @@ -14,6 +14,11 @@ enum compact_result { > > /* compaction should continue to another pageblock */ > > COMPACT_CONTINUE, > > /* > > + * whoever is calling compaction should retry because it was either > > + * not active or it tells us there is more work to be done. > > + */ > > + COMPACT_SHOULD_RETRY = COMPACT_CONTINUE, > > Hmm, I'm not sure about this. AFAIK compact_zone() doesn't ever return > COMPACT_CONTINUE, and thus try_to_compact_pages() also doesn't. This > overloading of CONTINUE only applies to compaction_suitable(). But the > value that should_compact_retry() is testing comes only from > try_to_compact_pages(). So this is not wrong, but perhaps a bit misleading? Well the idea was that I wanted to cover all the _possible_ cases where compaction might want to tell us "please try again even when the last round wasn't really successful". COMPACT_CONTINUE might not be returned right now but we can come up with that in the future. It sounds like a sensible feedback to me. But maybe there would be a better name for such a feedback. I confess this is a bit oom-rework centric name... Also I find it better to hide details behind a more generic name. I am open to suggestions here, of course. -- Michal Hocko SUSE Labs