linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
* [PATCH]vmscan: fix a livelock in kswapd
@ 2011-07-19  7:09 Shaohua Li
  2011-07-19  8:39 ` Mel Gorman
                   ` (2 more replies)
  0 siblings, 3 replies; 10+ messages in thread
From: Shaohua Li @ 2011-07-19  7:09 UTC (permalink / raw)
  To: Andrew Morton; +Cc: mgorman, linux-mm, lkml

I'm running a workload which triggers a lot of swap in a machine with 4 nodes.
After I kill the workload, I found a kswapd livelock. Sometimes kswapd3 or
kswapd2 are keeping running and I can't access filesystem, but most memory is
free. This looks like a regression since commit 08951e545918c159.
Node 2 and 3 have only ZONE_NORMAL, but balance_pgdat() will return 0 for
classzone_idx. The reason is end_zone in balance_pgdat() is 0 by default, if
all zones have watermark ok, end_zone will keep 0.
Later sleeping_prematurely() always returns true. Because this is an order 3
wakeup, and if classzone_idx is 0, both balanced_pages and present_pages
in pgdat_balanced() are 0.
We add a special case here. If a zone has no page, we think it's balanced. This
fixes the livelock.

Signed-off-by: Shaohua Li <shaohua.li@intel.com>

diff --git a/mm/vmscan.c b/mm/vmscan.c
index 5ed24b9..ad4056f 100644
--- a/mm/vmscan.c
+++ b/mm/vmscan.c
@@ -2310,7 +2310,8 @@ static bool pgdat_balanced(pg_data_t *pgdat, unsigned long balanced_pages,
 	for (i = 0; i <= classzone_idx; i++)
 		present_pages += pgdat->node_zones[i].present_pages;
 
-	return balanced_pages > (present_pages >> 2);
+	/* A special case here: if zone has no page, we think it's balanced */
+	return balanced_pages >= (present_pages >> 2);
 }
 
 /* is kswapd sleeping prematurely? */


--
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/ .
Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2011-07-20  5:44 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-07-19  7:09 [PATCH]vmscan: fix a livelock in kswapd Shaohua Li
2011-07-19  8:39 ` Mel Gorman
2011-07-19  8:45 ` Minchan Kim
2011-07-19  8:53   ` Shaohua Li
2011-07-19 16:51     ` Minchan Kim
2011-07-20  0:43       ` Shaohua Li
2011-07-20  4:09         ` Minchan Kim
2011-07-20  5:18           ` Shaohua Li
2011-07-20  5:43             ` Minchan Kim
2011-07-20  5:44 ` Minchan Kim

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox