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: Hugh Dickins <hughd@google.com>,
	Sergey Senozhatsky <sergey.senozhatsky.work@gmail.com>,
	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>,
	Hillf Danton <hillf.zj@alibaba-inc.com>,
	KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>,
	Joonsoo Kim <js1304@gmail.com>,
	linux-mm@kvack.org, LKML <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH 3/3] mm, oom: protect !costly allocations some more
Date: Wed, 9 Mar 2016 15:07:14 +0100	[thread overview]
Message-ID: <56E02E12.6050802@suse.cz> (raw)
In-Reply-To: <20160309111109.GG27018@dhcp22.suse.cz>

On 03/09/2016 12:11 PM, Michal Hocko wrote:
> Joonsoo has pointed out that this attempt is still not sufficient
> becasuse we might have invoked only a single compaction round which
> is might be not enough. I fully agree with that. Here is my take on
> that. It is again based on the number of retries loop.
> 
> I was also playing with an idea of doing something similar to the
> reclaim retry logic:
> 	if (order) {
> 		if (compaction_made_progress(compact_result)

Progress for compaction would probably mean counting successful
migrations. This would converge towards a definitive false (without
parallel activity) in the current implementation, but probably not for
the proposed redesigns where migration and free scanner initial
positions are not fixed.

> 			no_compact_progress = 0;
> 		else if (compaction_failed(compact_result)
> 			no_compact_progress++;
> 	}
> but it is compaction_failed() part which is not really
> straightforward to define. Is it COMPACT_NO_SUITABLE_PAGE
> resp. COMPACT_NOT_SUITABLE_ZONE sufficient? compact_finished and
> compaction_suitable however hide this from compaction users so it
> seems like we can never see it.

Anything other than COMPACT_PARTIAL is "failed" :) But it doesn't itself
hint at whether retrying makes sense or not. Reclaim is simpler in this
sense...

> Maybe we can update the feedback mechanism from the compaction but
> retries count seems reasonably easy to understand and pragmatic. If
> we cannot form a order page after we tried for N times then it really
> doesn't make much sense to continue and we are oom for this order. I am
> holding my breath to hear from Hugh on this, though. In case it doesn't
> then I would be really interested whether changing MAX_COMPACT_RETRIES
> makes any difference.
> 
> I haven't preserved Tested-by from Sergey to be on the safe side even
> though strictly speaking this should be less prone to high order OOMs
> because we clearly retry more times.
> ---
> From 33f08d6eeb0f5eaf1c73c292f070102ddec5878a Mon Sep 17 00:00:00 2001
> From: Michal Hocko <mhocko@suse.com>
> Date: Wed, 9 Mar 2016 10:57:42 +0100
> Subject: [PATCH] mm, oom: protect !costly allocations some more
> 
> 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
> 	- we haven't completed at least MAX_COMPACT_RETRIES successful
> 	  (either COMPACT_PARTIAL or COMPACT_COMPLETE) compaction
> 	  rounds.
> 
> The first rule ensures that the very last attempt for compaction
> was ignored while the second guarantees that the compaction has done
> some work. Multiple retries might be needed to prevent occasional
> pigggy packing of other contexts to steal the compacted pages while
> the current context manages to retry to allocate them.
> 
> If the given number of successful retries is not sufficient for a
> reasonable workloads we should focus on the collected compaction
> tracepoints data and try to address the issue in the compaction code.
> If this is not feasible we can increase the retries limit.
> 
> Signed-off-by: Michal Hocko <mhocko@suse.com>

Yeah, this could work.
Acked-by: Vlastimil Babka <vbabka@suse.cz>

> ---
>  include/linux/compaction.h | 10 +++++++
>  mm/page_alloc.c            | 68 +++++++++++++++++++++++++++++++++++-----------
>  2 files changed, 62 insertions(+), 16 deletions(-)
> 
> diff --git a/include/linux/compaction.h b/include/linux/compaction.h
> index b167801187e7..7d028ccf440a 100644
> --- a/include/linux/compaction.h
> +++ b/include/linux/compaction.h
> @@ -61,6 +61,12 @@ extern void compaction_defer_reset(struct zone *zone, int order,
>  				bool alloc_success);
>  extern bool compaction_restarting(struct zone *zone, int order);
>  
> +static inline bool compaction_made_progress(enum compact_result result)
> +{
> +	return (compact_result > COMPACT_SKIPPED &&
> +				compact_result < COMPACT_NO_SUITABLE_PAGE)
> +}
> +
>  #else
>  static inline enum compact_result try_to_compact_pages(gfp_t gfp_mask,
>  			unsigned int order, int alloc_flags,
> @@ -93,6 +99,10 @@ static inline bool compaction_deferred(struct zone *zone, int order)
>  	return true;
>  }
>  
> +static inline bool compaction_made_progress(enum compact_result result)
> +{
> +	return false;
> +}
>  #endif /* CONFIG_COMPACTION */
>  
>  #if defined(CONFIG_COMPACTION) && defined(CONFIG_SYSFS) && defined(CONFIG_NUMA)
> diff --git a/mm/page_alloc.c b/mm/page_alloc.c
> index 4acc0aa1aee0..5f1fc3793836 100644
> --- a/mm/page_alloc.c
> +++ b/mm/page_alloc.c
> @@ -2813,34 +2813,33 @@ __alloc_pages_may_oom(gfp_t gfp_mask, unsigned int order,
>  	return page;
>  }
>  
> +
> +/*
> + * Maximum number of compaction retries wit a progress before OOM
> + * killer is consider as the only way to move forward.
> + */
> +#define MAX_COMPACT_RETRIES 16
> +
>  #ifdef CONFIG_COMPACTION
>  /* Try memory compaction for high-order allocations before reclaim */
>  static struct page *
>  __alloc_pages_direct_compact(gfp_t gfp_mask, unsigned int order,
>  		int alloc_flags, const struct alloc_context *ac,
>  		enum migrate_mode mode, int *contended_compaction,
> -		bool *deferred_compaction)
> +		enum compact_result *compact_result)
>  {
> -	enum compact_result compact_result;
>  	struct page *page;
>  
>  	if (!order)
>  		return NULL;
>  
>  	current->flags |= PF_MEMALLOC;
> -	compact_result = try_to_compact_pages(gfp_mask, order, alloc_flags, ac,
> +	*compact_result = try_to_compact_pages(gfp_mask, order, alloc_flags, ac,
>  						mode, contended_compaction);
>  	current->flags &= ~PF_MEMALLOC;
>  
> -	switch (compact_result) {
> -	case COMPACT_DEFERRED:
> -		*deferred_compaction = true;
> -		/* fall-through */
> -	case COMPACT_SKIPPED:
> +	if (*compact_result <= COMPACT_SKIPPED)
>  		return NULL;
> -	default:
> -		break;
> -	}
>  
>  	/*
>  	 * At least in one zone compaction wasn't deferred or skipped, so let's
> @@ -2870,15 +2869,44 @@ __alloc_pages_direct_compact(gfp_t gfp_mask, unsigned int order,
>  
>  	return NULL;
>  }
> +
> +static inline bool
> +should_compact_retry(unsigned int order, enum compact_result compact_result,
> +		     int contended_compaction, int compaction_retries)
> +{
> +	/*
> +	 * !costly allocations are really important and we have to make sure
> +	 * the compaction wasn't deferred or didn't bail out early due to locks
> +	 * contention before we go OOM. Still cap the reclaim retry loops with
> +	 * progress to prevent from looping forever and potential trashing.
> +	 */
> +	if (order && order <= PAGE_ALLOC_COSTLY_ORDER) {
> +		if (compact_result <= COMPACT_SKIPPED)
> +			return true;
> +		if (contended_compaction > COMPACT_CONTENDED_NONE)
> +			return true;
> +		if (compaction_retries <= MAX_COMPACT_RETRIES)
> +			return true;
> +	}
> +
> +	return false;
> +}
>  #else
>  static inline struct page *
>  __alloc_pages_direct_compact(gfp_t gfp_mask, unsigned int order,
>  		int alloc_flags, const struct alloc_context *ac,
>  		enum migrate_mode mode, int *contended_compaction,
> -		bool *deferred_compaction)
> +		enum compact_result *compact_result)
>  {
>  	return NULL;
>  }
> +
> +static inline bool
> +should_compact_retry(unsigned int order, enum compact_result compact_result,
> +		     int contended_compaction, int compaction_retries)
> +{
> +	return false;
> +}
>  #endif /* CONFIG_COMPACTION */
>  
>  /* Perform direct synchronous page reclaim */
> @@ -3118,7 +3146,8 @@ __alloc_pages_slowpath(gfp_t gfp_mask, unsigned int order,
>  	int alloc_flags;
>  	unsigned long did_some_progress;
>  	enum migrate_mode migration_mode = MIGRATE_ASYNC;
> -	bool deferred_compaction = false;
> +	enum compact_result compact_result;
> +	int compaction_retries = 0;
>  	int contended_compaction = COMPACT_CONTENDED_NONE;
>  	int no_progress_loops = 0;
>  
> @@ -3227,10 +3256,13 @@ __alloc_pages_slowpath(gfp_t gfp_mask, unsigned int order,
>  	page = __alloc_pages_direct_compact(gfp_mask, order, alloc_flags, ac,
>  					migration_mode,
>  					&contended_compaction,
> -					&deferred_compaction);
> +					&compact_result);
>  	if (page)
>  		goto got_pg;
>  
> +	if (order && compaction_made_progress(compact_result))
> +		compaction_retries++;
> +
>  	/* Checks for THP-specific high-order allocations */
>  	if (is_thp_gfp_mask(gfp_mask)) {
>  		/*
> @@ -3240,7 +3272,7 @@ __alloc_pages_slowpath(gfp_t gfp_mask, unsigned int order,
>  		 * to heavily disrupt the system, so we fail the allocation
>  		 * instead of entering direct reclaim.
>  		 */
> -		if (deferred_compaction)
> +		if (compact_result == COMPACT_DEFERRED)
>  			goto nopage;
>  
>  		/*
> @@ -3294,6 +3326,10 @@ __alloc_pages_slowpath(gfp_t gfp_mask, unsigned int order,
>  				 did_some_progress > 0, no_progress_loops))
>  		goto retry;
>  
> +	if (should_compact_retry(order, compact_result, contended_compaction,
> +				 compaction_retries))
> +		goto retry;
> +
>  	/* Reclaim has failed us, start killing things */
>  	page = __alloc_pages_may_oom(gfp_mask, order, ac, &did_some_progress);
>  	if (page)
> @@ -3314,7 +3350,7 @@ __alloc_pages_slowpath(gfp_t gfp_mask, unsigned int order,
>  	page = __alloc_pages_direct_compact(gfp_mask, order, alloc_flags,
>  					    ac, migration_mode,
>  					    &contended_compaction,
> -					    &deferred_compaction);
> +					    &compact_result);
>  	if (page)
>  		goto got_pg;
>  nopage:
> 

--
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: Hugh Dickins <hughd@google.com>,
	Sergey Senozhatsky <sergey.senozhatsky.work@gmail.com>,
	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>,
	Hillf Danton <hillf.zj@alibaba-inc.com>,
	KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>,
	Joonsoo Kim <js1304@gmail.com>,
	linux-mm@kvack.org, LKML <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH 3/3] mm, oom: protect !costly allocations some more
Date: Wed, 9 Mar 2016 15:07:14 +0100	[thread overview]
Message-ID: <56E02E12.6050802@suse.cz> (raw)
In-Reply-To: <20160309111109.GG27018@dhcp22.suse.cz>

On 03/09/2016 12:11 PM, Michal Hocko wrote:
> Joonsoo has pointed out that this attempt is still not sufficient
> becasuse we might have invoked only a single compaction round which
> is might be not enough. I fully agree with that. Here is my take on
> that. It is again based on the number of retries loop.
> 
> I was also playing with an idea of doing something similar to the
> reclaim retry logic:
> 	if (order) {
> 		if (compaction_made_progress(compact_result)

Progress for compaction would probably mean counting successful
migrations. This would converge towards a definitive false (without
parallel activity) in the current implementation, but probably not for
the proposed redesigns where migration and free scanner initial
positions are not fixed.

> 			no_compact_progress = 0;
> 		else if (compaction_failed(compact_result)
> 			no_compact_progress++;
> 	}
> but it is compaction_failed() part which is not really
> straightforward to define. Is it COMPACT_NO_SUITABLE_PAGE
> resp. COMPACT_NOT_SUITABLE_ZONE sufficient? compact_finished and
> compaction_suitable however hide this from compaction users so it
> seems like we can never see it.

Anything other than COMPACT_PARTIAL is "failed" :) But it doesn't itself
hint at whether retrying makes sense or not. Reclaim is simpler in this
sense...

> Maybe we can update the feedback mechanism from the compaction but
> retries count seems reasonably easy to understand and pragmatic. If
> we cannot form a order page after we tried for N times then it really
> doesn't make much sense to continue and we are oom for this order. I am
> holding my breath to hear from Hugh on this, though. In case it doesn't
> then I would be really interested whether changing MAX_COMPACT_RETRIES
> makes any difference.
> 
> I haven't preserved Tested-by from Sergey to be on the safe side even
> though strictly speaking this should be less prone to high order OOMs
> because we clearly retry more times.
> ---
> From 33f08d6eeb0f5eaf1c73c292f070102ddec5878a Mon Sep 17 00:00:00 2001
> From: Michal Hocko <mhocko@suse.com>
> Date: Wed, 9 Mar 2016 10:57:42 +0100
> Subject: [PATCH] mm, oom: protect !costly allocations some more
> 
> 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
> 	- we haven't completed at least MAX_COMPACT_RETRIES successful
> 	  (either COMPACT_PARTIAL or COMPACT_COMPLETE) compaction
> 	  rounds.
> 
> The first rule ensures that the very last attempt for compaction
> was ignored while the second guarantees that the compaction has done
> some work. Multiple retries might be needed to prevent occasional
> pigggy packing of other contexts to steal the compacted pages while
> the current context manages to retry to allocate them.
> 
> If the given number of successful retries is not sufficient for a
> reasonable workloads we should focus on the collected compaction
> tracepoints data and try to address the issue in the compaction code.
> If this is not feasible we can increase the retries limit.
> 
> Signed-off-by: Michal Hocko <mhocko@suse.com>

Yeah, this could work.
Acked-by: Vlastimil Babka <vbabka@suse.cz>

> ---
>  include/linux/compaction.h | 10 +++++++
>  mm/page_alloc.c            | 68 +++++++++++++++++++++++++++++++++++-----------
>  2 files changed, 62 insertions(+), 16 deletions(-)
> 
> diff --git a/include/linux/compaction.h b/include/linux/compaction.h
> index b167801187e7..7d028ccf440a 100644
> --- a/include/linux/compaction.h
> +++ b/include/linux/compaction.h
> @@ -61,6 +61,12 @@ extern void compaction_defer_reset(struct zone *zone, int order,
>  				bool alloc_success);
>  extern bool compaction_restarting(struct zone *zone, int order);
>  
> +static inline bool compaction_made_progress(enum compact_result result)
> +{
> +	return (compact_result > COMPACT_SKIPPED &&
> +				compact_result < COMPACT_NO_SUITABLE_PAGE)
> +}
> +
>  #else
>  static inline enum compact_result try_to_compact_pages(gfp_t gfp_mask,
>  			unsigned int order, int alloc_flags,
> @@ -93,6 +99,10 @@ static inline bool compaction_deferred(struct zone *zone, int order)
>  	return true;
>  }
>  
> +static inline bool compaction_made_progress(enum compact_result result)
> +{
> +	return false;
> +}
>  #endif /* CONFIG_COMPACTION */
>  
>  #if defined(CONFIG_COMPACTION) && defined(CONFIG_SYSFS) && defined(CONFIG_NUMA)
> diff --git a/mm/page_alloc.c b/mm/page_alloc.c
> index 4acc0aa1aee0..5f1fc3793836 100644
> --- a/mm/page_alloc.c
> +++ b/mm/page_alloc.c
> @@ -2813,34 +2813,33 @@ __alloc_pages_may_oom(gfp_t gfp_mask, unsigned int order,
>  	return page;
>  }
>  
> +
> +/*
> + * Maximum number of compaction retries wit a progress before OOM
> + * killer is consider as the only way to move forward.
> + */
> +#define MAX_COMPACT_RETRIES 16
> +
>  #ifdef CONFIG_COMPACTION
>  /* Try memory compaction for high-order allocations before reclaim */
>  static struct page *
>  __alloc_pages_direct_compact(gfp_t gfp_mask, unsigned int order,
>  		int alloc_flags, const struct alloc_context *ac,
>  		enum migrate_mode mode, int *contended_compaction,
> -		bool *deferred_compaction)
> +		enum compact_result *compact_result)
>  {
> -	enum compact_result compact_result;
>  	struct page *page;
>  
>  	if (!order)
>  		return NULL;
>  
>  	current->flags |= PF_MEMALLOC;
> -	compact_result = try_to_compact_pages(gfp_mask, order, alloc_flags, ac,
> +	*compact_result = try_to_compact_pages(gfp_mask, order, alloc_flags, ac,
>  						mode, contended_compaction);
>  	current->flags &= ~PF_MEMALLOC;
>  
> -	switch (compact_result) {
> -	case COMPACT_DEFERRED:
> -		*deferred_compaction = true;
> -		/* fall-through */
> -	case COMPACT_SKIPPED:
> +	if (*compact_result <= COMPACT_SKIPPED)
>  		return NULL;
> -	default:
> -		break;
> -	}
>  
>  	/*
>  	 * At least in one zone compaction wasn't deferred or skipped, so let's
> @@ -2870,15 +2869,44 @@ __alloc_pages_direct_compact(gfp_t gfp_mask, unsigned int order,
>  
>  	return NULL;
>  }
> +
> +static inline bool
> +should_compact_retry(unsigned int order, enum compact_result compact_result,
> +		     int contended_compaction, int compaction_retries)
> +{
> +	/*
> +	 * !costly allocations are really important and we have to make sure
> +	 * the compaction wasn't deferred or didn't bail out early due to locks
> +	 * contention before we go OOM. Still cap the reclaim retry loops with
> +	 * progress to prevent from looping forever and potential trashing.
> +	 */
> +	if (order && order <= PAGE_ALLOC_COSTLY_ORDER) {
> +		if (compact_result <= COMPACT_SKIPPED)
> +			return true;
> +		if (contended_compaction > COMPACT_CONTENDED_NONE)
> +			return true;
> +		if (compaction_retries <= MAX_COMPACT_RETRIES)
> +			return true;
> +	}
> +
> +	return false;
> +}
>  #else
>  static inline struct page *
>  __alloc_pages_direct_compact(gfp_t gfp_mask, unsigned int order,
>  		int alloc_flags, const struct alloc_context *ac,
>  		enum migrate_mode mode, int *contended_compaction,
> -		bool *deferred_compaction)
> +		enum compact_result *compact_result)
>  {
>  	return NULL;
>  }
> +
> +static inline bool
> +should_compact_retry(unsigned int order, enum compact_result compact_result,
> +		     int contended_compaction, int compaction_retries)
> +{
> +	return false;
> +}
>  #endif /* CONFIG_COMPACTION */
>  
>  /* Perform direct synchronous page reclaim */
> @@ -3118,7 +3146,8 @@ __alloc_pages_slowpath(gfp_t gfp_mask, unsigned int order,
>  	int alloc_flags;
>  	unsigned long did_some_progress;
>  	enum migrate_mode migration_mode = MIGRATE_ASYNC;
> -	bool deferred_compaction = false;
> +	enum compact_result compact_result;
> +	int compaction_retries = 0;
>  	int contended_compaction = COMPACT_CONTENDED_NONE;
>  	int no_progress_loops = 0;
>  
> @@ -3227,10 +3256,13 @@ __alloc_pages_slowpath(gfp_t gfp_mask, unsigned int order,
>  	page = __alloc_pages_direct_compact(gfp_mask, order, alloc_flags, ac,
>  					migration_mode,
>  					&contended_compaction,
> -					&deferred_compaction);
> +					&compact_result);
>  	if (page)
>  		goto got_pg;
>  
> +	if (order && compaction_made_progress(compact_result))
> +		compaction_retries++;
> +
>  	/* Checks for THP-specific high-order allocations */
>  	if (is_thp_gfp_mask(gfp_mask)) {
>  		/*
> @@ -3240,7 +3272,7 @@ __alloc_pages_slowpath(gfp_t gfp_mask, unsigned int order,
>  		 * to heavily disrupt the system, so we fail the allocation
>  		 * instead of entering direct reclaim.
>  		 */
> -		if (deferred_compaction)
> +		if (compact_result == COMPACT_DEFERRED)
>  			goto nopage;
>  
>  		/*
> @@ -3294,6 +3326,10 @@ __alloc_pages_slowpath(gfp_t gfp_mask, unsigned int order,
>  				 did_some_progress > 0, no_progress_loops))
>  		goto retry;
>  
> +	if (should_compact_retry(order, compact_result, contended_compaction,
> +				 compaction_retries))
> +		goto retry;
> +
>  	/* Reclaim has failed us, start killing things */
>  	page = __alloc_pages_may_oom(gfp_mask, order, ac, &did_some_progress);
>  	if (page)
> @@ -3314,7 +3350,7 @@ __alloc_pages_slowpath(gfp_t gfp_mask, unsigned int order,
>  	page = __alloc_pages_direct_compact(gfp_mask, order, alloc_flags,
>  					    ac, migration_mode,
>  					    &contended_compaction,
> -					    &deferred_compaction);
> +					    &compact_result);
>  	if (page)
>  		goto got_pg;
>  nopage:
> 

  reply	other threads:[~2016-03-09 14:07 UTC|newest]

Thread overview: 299+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-12-15 18:19 [PATCH 0/3] OOM detection rework v4 Michal Hocko
2015-12-15 18:19 ` Michal Hocko
2015-12-15 18:19 ` [PATCH 1/3] mm, oom: rework oom detection Michal Hocko
2015-12-15 18:19   ` Michal Hocko
2016-01-14 22:58   ` David Rientjes
2016-01-14 22:58     ` David Rientjes
2016-01-16  1:07     ` Tetsuo Handa
2016-01-16  1:07       ` Tetsuo Handa
2016-01-19 22:48       ` David Rientjes
2016-01-19 22:48         ` David Rientjes
2016-01-20 11:13         ` Tetsuo Handa
2016-01-20 11:13           ` Tetsuo Handa
2016-01-20 13:13           ` Michal Hocko
2016-01-20 13:13             ` Michal Hocko
2016-04-04  8:23   ` Vladimir Davydov
2016-04-04  8:23     ` Vladimir Davydov
2016-04-04  9:42     ` Michal Hocko
2016-04-04  9:42       ` Michal Hocko
2015-12-15 18:19 ` [PATCH 2/3] mm: throttle on IO only when there are too many dirty and writeback pages Michal Hocko
2015-12-15 18:19   ` Michal Hocko
2016-03-17 11:35   ` Tetsuo Handa
2016-03-17 11:35     ` Tetsuo Handa
2016-03-17 12:01     ` Michal Hocko
2016-03-17 12:01       ` Michal Hocko
2015-12-15 18:19 ` [PATCH 3/3] mm: use watermak checks for __GFP_REPEAT high order allocations Michal Hocko
2015-12-15 18:19   ` Michal Hocko
2015-12-16 23:35 ` [PATCH 0/3] OOM detection rework v4 Andrew Morton
2015-12-16 23:35   ` Andrew Morton
2015-12-18 12:12   ` Michal Hocko
2015-12-18 12:12     ` Michal Hocko
2015-12-16 23:58 ` Andrew Morton
2015-12-16 23:58   ` Andrew Morton
2015-12-18 13:15   ` Michal Hocko
2015-12-18 13:15     ` Michal Hocko
2015-12-18 16:35     ` Johannes Weiner
2015-12-18 16:35       ` Johannes Weiner
2015-12-24 12:41 ` Tetsuo Handa
2015-12-24 12:41   ` Tetsuo Handa
2015-12-28 12:08   ` Tetsuo Handa
2015-12-28 12:08     ` Tetsuo Handa
2015-12-28 14:13     ` Tetsuo Handa
2015-12-28 14:13       ` Tetsuo Handa
2016-01-06 12:44       ` Vlastimil Babka
2016-01-06 12:44         ` Vlastimil Babka
2016-01-08 12:37       ` Michal Hocko
2016-01-08 12:37         ` Michal Hocko
2015-12-29 16:32     ` Michal Hocko
2015-12-29 16:32       ` Michal Hocko
2015-12-30 15:05       ` Tetsuo Handa
2015-12-30 15:05         ` Tetsuo Handa
2016-01-02 15:47         ` Tetsuo Handa
2016-01-02 15:47           ` Tetsuo Handa
2016-01-20 12:24           ` Michal Hocko
2016-01-20 12:24             ` Michal Hocko
2016-01-27 23:18             ` David Rientjes
2016-01-27 23:18               ` David Rientjes
2016-01-28 21:19               ` Michal Hocko
2016-01-28 21:19                 ` Michal Hocko
2015-12-29 16:27   ` Michal Hocko
2015-12-29 16:27     ` Michal Hocko
2016-01-28 20:40 ` [PATCH 4/3] mm, oom: drop the last allocation attempt before out_of_memory Michal Hocko
2016-01-28 20:40   ` Michal Hocko
2016-01-28 21:36   ` Johannes Weiner
2016-01-28 21:36     ` Johannes Weiner
2016-01-28 23:19     ` David Rientjes
2016-01-28 23:19       ` David Rientjes
2016-01-28 23:51       ` Johannes Weiner
2016-01-28 23:51         ` Johannes Weiner
2016-01-29 10:39         ` Tetsuo Handa
2016-01-29 10:39           ` Tetsuo Handa
2016-01-29 15:32         ` Michal Hocko
2016-01-29 15:32           ` Michal Hocko
2016-01-30 12:18           ` Tetsuo Handa
2016-01-30 12:18             ` Tetsuo Handa
2016-01-29 15:23       ` Michal Hocko
2016-01-29 15:23         ` Michal Hocko
2016-01-29 15:24     ` Michal Hocko
2016-01-29 15:24       ` Michal Hocko
2016-01-28 21:19 ` [PATCH 5/3] mm, vmscan: make zone_reclaimable_pages more precise Michal Hocko
2016-01-28 21:19   ` Michal Hocko
2016-01-28 23:20   ` David Rientjes
2016-01-28 23:20     ` David Rientjes
2016-01-29  3:41   ` Hillf Danton
2016-01-29  3:41     ` Hillf Danton
2016-01-29 10:35   ` Tetsuo Handa
2016-01-29 10:35     ` Tetsuo Handa
2016-01-29 15:17     ` Michal Hocko
2016-01-29 15:17       ` Michal Hocko
2016-01-29 21:30       ` Tetsuo Handa
2016-01-29 21:30         ` Tetsuo Handa
2016-02-03 13:27 ` [PATCH 0/3] OOM detection rework v4 Michal Hocko
2016-02-03 13:27   ` Michal Hocko
2016-02-03 22:58   ` David Rientjes
2016-02-03 22:58     ` David Rientjes
2016-02-04 12:57     ` Michal Hocko
2016-02-04 12:57       ` Michal Hocko
2016-02-04 13:10       ` Tetsuo Handa
2016-02-04 13:10         ` Tetsuo Handa
2016-02-04 13:39         ` Michal Hocko
2016-02-04 13:39           ` Michal Hocko
2016-02-04 14:24           ` Michal Hocko
2016-02-04 14:24             ` Michal Hocko
2016-02-07  4:09           ` Tetsuo Handa
2016-02-07  4:09             ` Tetsuo Handa
2016-02-15 20:06             ` Michal Hocko
2016-02-15 20:06               ` Michal Hocko
2016-02-16 13:10               ` Tetsuo Handa
2016-02-16 13:10                 ` Tetsuo Handa
2016-02-16 15:19                 ` Michal Hocko
2016-02-16 15:19                   ` Michal Hocko
2016-02-25  3:47   ` Hugh Dickins
2016-02-25  3:47     ` Hugh Dickins
2016-02-25  6:48     ` Sergey Senozhatsky
2016-02-25  6:48       ` Sergey Senozhatsky
2016-02-25  9:17       ` Hillf Danton
2016-02-25  9:17         ` Hillf Danton
2016-02-25  9:27         ` Michal Hocko
2016-02-25  9:27           ` Michal Hocko
2016-02-25  9:48           ` Hillf Danton
2016-02-25  9:48             ` Hillf Danton
2016-02-25 11:02             ` Sergey Senozhatsky
2016-02-25 11:02               ` Sergey Senozhatsky
2016-02-25  9:23     ` Michal Hocko
2016-02-25  9:23       ` Michal Hocko
2016-02-26  6:32       ` Hugh Dickins
2016-02-26  6:32         ` Hugh Dickins
2016-02-26  7:54         ` Hillf Danton
2016-02-26  7:54           ` Hillf Danton
2016-02-26  9:24           ` Michal Hocko
2016-02-26  9:24             ` Michal Hocko
2016-02-26 10:27             ` Hillf Danton
2016-02-26 10:27               ` Hillf Danton
2016-02-26 13:49               ` Michal Hocko
2016-02-26 13:49                 ` Michal Hocko
2016-02-26  9:33         ` Michal Hocko
2016-02-26  9:33           ` Michal Hocko
2016-02-29 21:02       ` Michal Hocko
2016-02-29 21:02         ` Michal Hocko
2016-03-02  2:19         ` Joonsoo Kim
2016-03-02  2:19           ` Joonsoo Kim
2016-03-02  9:50           ` Michal Hocko
2016-03-02  9:50             ` Michal Hocko
2016-03-02 13:32             ` Joonsoo Kim
2016-03-02 13:32               ` Joonsoo Kim
2016-03-02 14:06               ` Michal Hocko
2016-03-02 14:06                 ` Michal Hocko
2016-03-02 14:34                 ` Joonsoo Kim
2016-03-02 14:34                   ` Joonsoo Kim
2016-03-03  9:26                   ` Michal Hocko
2016-03-03  9:26                     ` Michal Hocko
2016-03-03 10:29                     ` Tetsuo Handa
2016-03-03 10:29                       ` Tetsuo Handa
2016-03-03 14:10                     ` Joonsoo Kim
2016-03-03 14:10                       ` Joonsoo Kim
2016-03-03 15:25                       ` Michal Hocko
2016-03-03 15:25                         ` Michal Hocko
2016-03-04  5:23                         ` Joonsoo Kim
2016-03-04  5:23                           ` Joonsoo Kim
2016-03-04 15:15                           ` Michal Hocko
2016-03-04 15:15                             ` Michal Hocko
2016-03-04 17:39                             ` Michal Hocko
2016-03-04 17:39                               ` Michal Hocko
2016-03-07  5:23                             ` Joonsoo Kim
2016-03-07  5:23                               ` Joonsoo Kim
2016-03-03 15:50                       ` Vlastimil Babka
2016-03-03 15:50                         ` Vlastimil Babka
2016-03-03 16:26                         ` Michal Hocko
2016-03-03 16:26                           ` Michal Hocko
2016-03-04  7:10                         ` Joonsoo Kim
2016-03-04  7:10                           ` Joonsoo Kim
2016-03-02 15:01             ` Minchan Kim
2016-03-02 15:01               ` Minchan Kim
2016-03-07 16:08         ` [PATCH] mm, oom: protect !costly allocations some more (was: Re: [PATCH 0/3] OOM detection rework v4) Michal Hocko
2016-03-07 16:08           ` Michal Hocko
2016-03-08  3:51           ` Sergey Senozhatsky
2016-03-08  3:51             ` Sergey Senozhatsky
2016-03-08  9:08             ` Michal Hocko
2016-03-08  9:08               ` Michal Hocko
2016-03-08  9:24               ` Sergey Senozhatsky
2016-03-08  9:24                 ` Sergey Senozhatsky
2016-03-08  9:24           ` [PATCH] mm, oom: protect !costly allocations some more Vlastimil Babka
2016-03-08  9:24             ` Vlastimil Babka
2016-03-08  9:32             ` Sergey Senozhatsky
2016-03-08  9:32               ` Sergey Senozhatsky
2016-03-08  9:46             ` Michal Hocko
2016-03-08  9:46               ` Michal Hocko
2016-03-08  9:52               ` Vlastimil Babka
2016-03-08  9:52                 ` Vlastimil Babka
2016-03-08 10:10                 ` Michal Hocko
2016-03-08 10:10                   ` Michal Hocko
2016-03-08 11:12                   ` Vlastimil Babka
2016-03-08 11:12                     ` Vlastimil Babka
2016-03-08 12:22                     ` Michal Hocko
2016-03-08 12:22                       ` Michal Hocko
2016-03-08 12:29                       ` Vlastimil Babka
2016-03-08 12:29                         ` Vlastimil Babka
2016-03-08  9:58           ` [PATCH] mm, oom: protect !costly allocations some more (was: Re: [PATCH 0/3] OOM detection rework v4) Sergey Senozhatsky
2016-03-08  9:58             ` Sergey Senozhatsky
2016-03-08 13:57             ` Michal Hocko
2016-03-08 13:57               ` Michal Hocko
2016-03-08 10:36           ` Hugh Dickins
2016-03-08 13:42           ` [PATCH 0/2] oom rework: high order enahncements Michal Hocko
2016-03-08 13:42             ` Michal Hocko
2016-03-08 13:42             ` [PATCH 1/3] mm, compaction: change COMPACT_ constants into enum Michal Hocko
2016-03-08 13:42               ` Michal Hocko
2016-03-08 14:19               ` Vlastimil Babka
2016-03-08 14:19                 ` Vlastimil Babka
2016-03-09  3:55               ` Hillf Danton
2016-03-09  3:55                 ` Hillf Danton
2016-03-08 13:42             ` [PATCH 2/3] mm, compaction: cover all compaction mode in compact_zone Michal Hocko
2016-03-08 13:42               ` Michal Hocko
2016-03-08 14:22               ` Vlastimil Babka
2016-03-08 14:22                 ` Vlastimil Babka
2016-03-09  3:57               ` Hillf Danton
2016-03-09  3:57                 ` Hillf Danton
2016-03-08 13:42             ` [PATCH 3/3] mm, oom: protect !costly allocations some more Michal Hocko
2016-03-08 13:42               ` Michal Hocko
2016-03-08 14:34               ` Vlastimil Babka
2016-03-08 14:34                 ` Vlastimil Babka
2016-03-08 14:48                 ` Michal Hocko
2016-03-08 14:48                   ` Michal Hocko
2016-03-08 15:03                   ` Vlastimil Babka
2016-03-08 15:03                     ` Vlastimil Babka
2016-03-09 11:11               ` Michal Hocko
2016-03-09 11:11                 ` Michal Hocko
2016-03-09 14:07                 ` Vlastimil Babka [this message]
2016-03-09 14:07                   ` Vlastimil Babka
2016-03-11 12:17                 ` Hugh Dickins
2016-03-11 12:17                   ` Hugh Dickins
2016-03-11 13:06                   ` Michal Hocko
2016-03-11 13:06                     ` Michal Hocko
2016-03-11 19:08                     ` Hugh Dickins
2016-03-11 19:08                       ` Hugh Dickins
2016-03-14 16:21                       ` Michal Hocko
2016-03-14 16:21                         ` Michal Hocko
2016-03-08 15:19           ` [PATCH] mm, oom: protect !costly allocations some more (was: Re: [PATCH 0/3] OOM detection rework v4) Joonsoo Kim
2016-03-08 15:19             ` Joonsoo Kim
2016-03-08 16:05             ` Michal Hocko
2016-03-08 16:05               ` Michal Hocko
2016-03-08 17:03               ` Joonsoo Kim
2016-03-08 17:03                 ` Joonsoo Kim
2016-03-09 10:41                 ` Michal Hocko
2016-03-09 10:41                   ` Michal Hocko
2016-03-11 14:53                   ` Joonsoo Kim
2016-03-11 14:53                     ` Joonsoo Kim
2016-03-11 15:20                     ` Michal Hocko
2016-03-11 15:20                       ` Michal Hocko
2016-02-29 20:35     ` [PATCH 0/3] OOM detection rework v4 Michal Hocko
2016-03-01  7:29       ` Hugh Dickins
2016-03-01  7:29         ` Hugh Dickins
2016-03-01 13:38         ` Michal Hocko
2016-03-01 13:38           ` Michal Hocko
2016-03-01 14:40           ` Michal Hocko
2016-03-01 14:40             ` Michal Hocko
2016-03-01 18:14           ` Vlastimil Babka
2016-03-01 18:14             ` Vlastimil Babka
2016-03-02  2:55             ` Joonsoo Kim
2016-03-02  2:55               ` Joonsoo Kim
2016-03-02 12:37               ` Michal Hocko
2016-03-02 12:37                 ` Michal Hocko
2016-03-02 14:06                 ` Joonsoo Kim
2016-03-02 14:06                   ` Joonsoo Kim
2016-03-02 12:24             ` Michal Hocko
2016-03-02 13:00               ` Michal Hocko
2016-03-02 13:22               ` Vlastimil Babka
2016-03-02 13:22                 ` Vlastimil Babka
2016-03-02  2:28           ` Joonsoo Kim
2016-03-02  2:28             ` Joonsoo Kim
2016-03-02 12:39             ` Michal Hocko
2016-03-02 12:39               ` Michal Hocko
2016-03-03  9:54           ` Hugh Dickins
2016-03-03 12:32             ` Michal Hocko
2016-03-03 12:32               ` Michal Hocko
2016-03-03 20:57               ` Hugh Dickins
2016-03-03 20:57                 ` Hugh Dickins
2016-03-04  7:41                 ` Vlastimil Babka
2016-03-04  7:41                   ` Vlastimil Babka
2016-03-04  7:53             ` Joonsoo Kim
2016-03-04  7:53               ` Joonsoo Kim
2016-03-04 12:28             ` Michal Hocko
2016-03-04 12:28               ` Michal Hocko
2016-03-11 10:45 ` Tetsuo Handa
2016-03-11 10:45   ` Tetsuo Handa
2016-03-11 13:08   ` Michal Hocko
2016-03-11 13:08     ` Michal Hocko
2016-03-11 13:32     ` Tetsuo Handa
2016-03-11 13:32       ` Tetsuo Handa
2016-03-11 15:28       ` Michal Hocko
2016-03-11 15:28         ` Michal Hocko
2016-03-11 16:49         ` Tetsuo Handa
2016-03-11 16:49           ` Tetsuo Handa
2016-03-11 17:00           ` Michal Hocko
2016-03-11 17:00             ` Michal Hocko
2016-03-11 17:20             ` Tetsuo Handa
2016-03-11 17:20               ` Tetsuo Handa
2016-03-12  4:08               ` Tetsuo Handa
2016-03-12  4:08                 ` Tetsuo Handa
2016-03-13 14:41                 ` Tetsuo Handa
2016-03-13 14:41                   ` Tetsuo Handa

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=56E02E12.6050802@suse.cz \
    --to=vbabka@suse.cz \
    --cc=akpm@linux-foundation.org \
    --cc=hannes@cmpxchg.org \
    --cc=hillf.zj@alibaba-inc.com \
    --cc=hughd@google.com \
    --cc=js1304@gmail.com \
    --cc=kamezawa.hiroyu@jp.fujitsu.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=mgorman@suse.de \
    --cc=mhocko@kernel.org \
    --cc=penguin-kernel@I-love.SAKURA.ne.jp \
    --cc=rientjes@google.com \
    --cc=sergey.senozhatsky.work@gmail.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.