Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756266AbcDLJbO (ORCPT ); Tue, 12 Apr 2016 05:31:14 -0400 Received: from mx2.suse.de ([195.135.220.15]:41881 "EHLO mx2.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753372AbcDLJbM (ORCPT ); Tue, 12 Apr 2016 05:31:12 -0400 Subject: Re: mmotm woes, mainly compaction To: Hugh Dickins , Michal Hocko References: Cc: Andrew Morton , Michal Hocko , linux-kernel@vger.kernel.org, linux-mm@kvack.org, Joonsoo Kim From: Vlastimil Babka Message-ID: <570CC05C.6070308@suse.cz> Date: Tue, 12 Apr 2016 11:31:08 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.7.1 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2867 Lines: 68 On 04/12/2016 09:18 AM, Hugh Dickins wrote: > 3. /proc/sys/vm/stat_refresh warns nr_isolated_anon and nr_isolated_file > go increasingly negative under compaction: which would add delay when > should be none, or no delay when should delay. putback_movable_pages() > decrements the NR_ISOLATED counts which acct_isolated() increments, > so isolate_migratepages_block() needs to acct before putback in that > special case, and isolate_migratepages_range() can always do the acct > itself, leaving migratepages putback to caller like most other places. Sigh, looks like I notoriously suck at the nr_isolated_* accounting. The isolate_migratepages_range() is also due to my 3.18 commit. Back then, Joonsoo caught the problem for compaction side, but CMA issue remains. Sorry and thanks. ----8<---- >From 8aa6e765d4f931718386e13290d43348e34f0e76 Mon Sep 17 00:00:00 2001 From: Hugh Dickins Date: Tue, 12 Apr 2016 11:14:49 +0200 Subject: [PATCH] mm, cma: prevent nr_isolated_* counters from going negative /proc/sys/vm/stat_refresh warns nr_isolated_anon and nr_isolated_file go increasingly negative under compaction: which would add delay when should be none, or no delay when should delay. The bug in compaction was due to a recent mmotm patch, but much older instance of the bug was also noticed in isolate_migratepages_range() which is used for CMA and gigantic hugepage allocations. The bug is caused by putback_movable_pages() in an error path decrementing the isolated counters without them being previously incremented by acct_isolated(). Fix isolate_migratepages_range() by removing the error-path putback, thus reaching acct_isolated() with migratepages still isolated, and leaving putback to caller like most other places do. [vbabka@suse.cz: expanded the changelog] Fixes: edc2ca612496 ("mm, compaction: move pageblock checks up from isolate_migratepages_range()") Cc: stable@vger.kernel.org #3.18+ Cc: Joonsoo Kim Signed-off-by: Hugh Dickins Signed-off-by: Vlastimil Babka --- mm/compaction.c | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/mm/compaction.c b/mm/compaction.c index ab649fba3d88..c0be38f634d3 100644 --- a/mm/compaction.c +++ b/mm/compaction.c @@ -930,16 +930,8 @@ isolate_migratepages_range(struct compact_control *cc, unsigned long start_pfn, pfn = isolate_migratepages_block(cc, pfn, block_end_pfn, ISOLATE_UNEVICTABLE); - /* - * In case of fatal failure, release everything that might - * have been isolated in the previous iteration, and signal - * the failure back to caller. - */ - if (!pfn) { - putback_movable_pages(&cc->migratepages); - cc->nr_migratepages = 0; + if (!pfn) break; - } if (cc->nr_migratepages == COMPACT_CLUSTER_MAX) break; -- 2.8.1