From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751284AbdFBUgo (ORCPT ); Fri, 2 Jun 2017 16:36:44 -0400 Received: from mail.linuxfoundation.org ([140.211.169.12]:41336 "EHLO mail.linuxfoundation.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750918AbdFBUgn (ORCPT ); Fri, 2 Jun 2017 16:36:43 -0400 Date: Fri, 2 Jun 2017 13:36:37 -0700 From: Andrew Morton To: David Rientjes Cc: Minchan Kim , Johannes Weiner , Mel Gorman , linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: Re: [patch v2] mm, vmscan: avoid thrashing anon lru when free + file is low Message-Id: <20170602133637.7f6b49fbb740fb70e3b2307d@linux-foundation.org> In-Reply-To: References: <20170418013659.GD21354@bbox> <20170419001405.GA13364@bbox> <20170420060904.GA3720@bbox> X-Mailer: Sylpheed 3.4.1 (GTK+ 2.24.23; x86_64-pc-linux-gnu) Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, 1 May 2017 14:34:21 -0700 (PDT) David Rientjes wrote: > The purpose of the code that commit 623762517e23 ("revert 'mm: vmscan: do > not swap anon pages just because free+file is low'") reintroduces is to > prefer swapping anonymous memory rather than trashing the file lru. > > If the anonymous inactive lru for the set of eligible zones is considered > low, however, or the length of the list for the given reclaim priority > does not allow for effective anonymous-only reclaiming, then avoid > forcing SCAN_ANON. Forcing SCAN_ANON will end up thrashing the small > list and leave unreclaimed memory on the file lrus. > > If the inactive list is insufficient, fallback to balanced reclaim so the > file lru doesn't remain untouched. > --- a/mm/vmscan.c~mm-vmscan-avoid-thrashing-anon-lru-when-free-file-is-low-fix +++ a/mm/vmscan.c @@ -2233,7 +2233,7 @@ static void get_scan_count(struct lruvec * anonymous pages on the LRU in eligible zones. * Otherwise, the small LRU gets thrashed. */ - if (!inactive_list_is_low(lruvec, false, sc, false) && + if (!inactive_list_is_low(lruvec, false, memcg, sc, false) && lruvec_lru_size(lruvec, LRU_INACTIVE_ANON, sc->reclaim_idx) >> sc->priority) { scan_balance = SCAN_ANON; Worried. Did you send the correct version?