From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-it0-f72.google.com (mail-it0-f72.google.com [209.85.214.72]) by kanga.kvack.org (Postfix) with ESMTP id CA0126B0005 for ; Tue, 26 Jul 2016 04:22:04 -0400 (EDT) Received: by mail-it0-f72.google.com with SMTP id j124so8439634ith.1 for ; Tue, 26 Jul 2016 01:22:04 -0700 (PDT) Received: from lgeamrelo12.lge.com (LGEAMRELO12.lge.com. [156.147.23.52]) by mx.google.com with ESMTP id d198si184287iof.179.2016.07.26.01.22.03 for ; Tue, 26 Jul 2016 01:22:04 -0700 (PDT) Date: Tue, 26 Jul 2016 17:26:38 +0900 From: Joonsoo Kim Subject: Re: [PATCH 5/5] mm, vmscan: Account for skipped pages as a partial scan Message-ID: <20160726082638.GD15721@js1304-P5Q-DELUXE> References: <1469110261-7365-1-git-send-email-mgorman@techsingularity.net> <1469110261-7365-6-git-send-email-mgorman@techsingularity.net> <20160726081621.GC15721@js1304-P5Q-DELUXE> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20160726081621.GC15721@js1304-P5Q-DELUXE> Sender: owner-linux-mm@kvack.org List-ID: To: Mel Gorman Cc: Andrew Morton , Johannes Weiner , Minchan Kim , Michal Hocko , Vlastimil Babka , Linux-MM , LKML On Tue, Jul 26, 2016 at 05:16:22PM +0900, Joonsoo Kim wrote: > On Thu, Jul 21, 2016 at 03:11:01PM +0100, Mel Gorman wrote: > > Page reclaim determines whether a pgdat is unreclaimable by examining how > > many pages have been scanned since a page was freed and comparing that to > > the LRU sizes. Skipped pages are not reclaim candidates but contribute to > > scanned. This can prematurely mark a pgdat as unreclaimable and trigger > > an OOM kill. > > > > This patch accounts for skipped pages as a partial scan so that an > > unreclaimable pgdat will still be marked as such but by scaling the cost > > of a skip, it'll avoid the pgdat being marked prematurely. > > > > Signed-off-by: Mel Gorman > > --- > > mm/vmscan.c | 20 ++++++++++++++++++-- > > 1 file changed, 18 insertions(+), 2 deletions(-) > > > > diff --git a/mm/vmscan.c b/mm/vmscan.c > > index 6810d81f60c7..e5af357dd4ac 100644 > > --- a/mm/vmscan.c > > +++ b/mm/vmscan.c > > @@ -1424,7 +1424,7 @@ static unsigned long isolate_lru_pages(unsigned long nr_to_scan, > > LIST_HEAD(pages_skipped); > > > > for (scan = 0; scan < nr_to_scan && nr_taken < nr_to_scan && > > - !list_empty(src); scan++) { > > + !list_empty(src);) { > > struct page *page; > > > > page = lru_to_page(src); > > @@ -1438,6 +1438,12 @@ static unsigned long isolate_lru_pages(unsigned long nr_to_scan, > > continue; > > } > > > > + /* > > + * Account for scanned and skipped separetly to avoid the pgdat > > + * being prematurely marked unreclaimable by pgdat_reclaimable. > > + */ > > + scan++; > > + > > This logic has potential unbounded retry problem. src would not become > empty if __isolate_lru_page() return -EBUSY since we move failed page > to src list again in this case. Oops.. It would not unbounded retry. It would cause needless retry but bounded. Sorry about noise. Thanks. -- 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: email@kvack.org