Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757151Ab1ETRXU (ORCPT ); Fri, 20 May 2011 13:23:20 -0400 Received: from cantor2.suse.de ([195.135.220.15]:35015 "EHLO mx2.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751956Ab1ETRXT (ORCPT ); Fri, 20 May 2011 13:23:19 -0400 Date: Fri, 20 May 2011 18:23:14 +0100 From: Mel Gorman To: Minchan Kim Cc: Andrew Barry , Andrew Morton , linux-mm , Rik van Riel , KOSAKI Motohiro , Johannes Weiner , linux kernel mailing list Subject: Re: Unending loop in __alloc_pages_slowpath following OOM-kill; rfc: patch. Message-ID: <20110520172314.GW5279@suse.de> References: <4DCDA347.9080207@cray.com> <4DD2991B.5040707@cray.com> <20110520164924.GB2386@barrios-desktop> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-15 Content-Disposition: inline In-Reply-To: <20110520164924.GB2386@barrios-desktop> User-Agent: Mutt/1.5.21 (2010-09-15) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2159 Lines: 46 On Sat, May 21, 2011 at 01:49:24AM +0900, Minchan Kim wrote: > > > From 8bd3f16736548375238161d1bd85f7d7c381031f Mon Sep 17 00:00:00 2001 > From: Minchan Kim > Date: Sat, 21 May 2011 01:37:41 +0900 > Subject: [PATCH] Prevent unending loop in __alloc_pages_slowpath > > From: Andrew Barry > > I believe I found a problem in __alloc_pages_slowpath, which allows a process to > get stuck endlessly looping, even when lots of memory is available. > > Running an I/O and memory intensive stress-test I see a 0-order page allocation > with __GFP_IO and __GFP_WAIT, running on a system with very little free memory. > Right about the same time that the stress-test gets killed by the OOM-killer, > the utility trying to allocate memory gets stuck in __alloc_pages_slowpath even > though most of the systems memory was freed by the oom-kill of the stress-test. > > The utility ends up looping from the rebalance label down through the > wait_iff_congested continiously. Because order=0, __alloc_pages_direct_compact > skips the call to get_page_from_freelist. Because all of the reclaimable memory > on the system has already been reclaimed, __alloc_pages_direct_reclaim skips the > call to get_page_from_freelist. Since there is no __GFP_FS flag, the block with > __alloc_pages_may_oom is skipped. The loop hits the wait_iff_congested, then > jumps back to rebalance without ever trying to get_page_from_freelist. This loop > repeats infinitely. > > The test case is pretty pathological. Running a mix of I/O stress-tests that do > a lot of fork() and consume all of the system memory, I can pretty reliably hit > this on 600 nodes, in about 12 hours. 32GB/node. > > Signed-off-by: Andrew Barry > Reviewed-by: Minchan Kim > Cc: Mel Gorman Acked-by: Mel Gorman -- Mel Gorman SUSE Labs -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/