[PATCH 2/2] mm: vmscan: correct use of pgdat_balanced in sleeping_prematurely

Herton Ronaldo Krzesinski herton.krzesinski at canonical.com
Fri Jun 17 12:17:33 UTC 2011


On Fri, Jun 17, 2011 at 11:06:53AM +0100, Colin King wrote:
> From: Johannes Weiner <hannes at cmpxchg.org>
> 
> There are a few reports of people experiencing hangs when copying large
> amounts of data with kswapd using a large amount of CPU which appear to be
> due to recent reclaim changes.  SLUB using high orders is the trigger but
> not the root cause as SLUB has been using high orders for a while.  The
> root cause was bugs introduced into reclaim which are addressed by the
> following two patches.
> 
> Patch 1 corrects logic introduced by commit 1741c877 ("mm: kswapd:
>         keep kswapd awake for high-order allocations until a percentage of
>         the node is balanced") to allow kswapd to go to sleep when
>         balanced for high orders.
> 
> Patch 2 notes that it is possible for kswapd to miss every
>         cond_resched() and updates shrink_slab() so it'll at least reach
>         that scheduling point.
> 
> Chris Wood reports that these two patches in isolation are sufficient to
> prevent the system hanging.  AFAIK, they should also resolve similar hangs
> experienced by James Bottomley.
> 
> This patch:
> 
> Johannes Weiner poined out that the logic in commit 1741c877 ("mm: kswapd:
> keep kswapd awake for high-order allocations until a percentage of the
> node is balanced") is backwards.  Instead of allowing kswapd to go to
> sleep when balancing for high order allocations, it keeps it kswapd
> running uselessly.
> 
> Signed-off-by: Mel Gorman <mgorman at suse.de>
> Reviewed-by: Rik van Riel <riel at redhat.com>
> Signed-off-by: Johannes Weiner <hannes at cmpxchg.org>
> Reviewed-by: Wu Fengguang <fengguang.wu at intel.com>
> Cc: James Bottomley <James.Bottomley at HansenPartnership.com>
> Tested-by: Colin King <colin.king at canonical.com>
> Cc: Raghavendra D Prabhu <raghu.prabhu13 at gmail.com>
> Cc: Jan Kara <jack at suse.cz>
> Cc: Chris Mason <chris.mason at oracle.com>
> Cc: Christoph Lameter <cl at linux.com>
> Cc: Pekka Enberg <penberg at kernel.org>
> Cc: Rik van Riel <riel at redhat.com>
> Reviewed-by: Minchan Kim <minchan.kim at gmail.com>
> Reviewed-by: Wu Fengguang <fengguang.wu at intel.com>
> Cc: <stable at kernel.org>		[2.6.38+]
> Signed-off-by: Andrew Morton <akpm at linux-foundation.org>
> Signed-off-by: Linus Torvalds <torvalds at linux-foundation.org>
> ---
>  mm/vmscan.c |    2 +-
>  1 files changed, 1 insertions(+), 1 deletions(-)
> 
> diff --git a/mm/vmscan.c b/mm/vmscan.c
> index 648aab8..a74bf72 100644
> --- a/mm/vmscan.c
> +++ b/mm/vmscan.c
> @@ -2291,7 +2291,7 @@ static bool sleeping_prematurely(pg_data_t *pgdat, int order, long remaining,
>  	 * must be balanced
>  	 */
>  	if (order)
> -		return pgdat_balanced(pgdat, balanced, classzone_idx);
> +		return !pgdat_balanced(pgdat, balanced, classzone_idx);
>  	else
>  		return !all_zones_ok;
>  }

Acked-by: Herton Ronaldo Krzesinski <herton.krzesinski at canonical.com>

> -- 
> 1.7.0.4
> 
> 
> -- 
> kernel-team mailing list
> kernel-team at lists.ubuntu.com
> https://lists.ubuntu.com/mailman/listinfo/kernel-team
> 

-- 
[]'s
Herton




More information about the kernel-team mailing list