From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932397AbdEDLoS (ORCPT ); Thu, 4 May 2017 07:44:18 -0400 Received: from mx2.suse.de ([195.135.220.15]:47171 "EHLO mx1.suse.de" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1753021AbdEDLoL (ORCPT ); Thu, 4 May 2017 07:44:11 -0400 Date: Thu, 4 May 2017 13:43:58 +0200 From: Michal Hocko To: David Rientjes Cc: Andrew Morton , 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: <20170504114358.GD31540@dhcp22.suse.cz> References: <20170419001405.GA13364@bbox> <20170420060904.GA3720@bbox> <20170502080246.GD14593@dhcp22.suse.cz> <20170503061528.GB1236@dhcp22.suse.cz> <20170503070656.GA8836@dhcp22.suse.cz> <20170503084952.GD8836@dhcp22.suse.cz> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.23 (2014-03-12) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Wed 03-05-17 15:52:04, David Rientjes wrote: > On Wed, 3 May 2017, Michal Hocko wrote: [...] > > /* > > - * If there is enough inactive page cache, i.e. if the size of the > > - * inactive list is greater than that of the active list *and* the > > - * inactive list actually has some pages to scan on this priority, we > > - * do not reclaim anything from the anonymous working set right now. > > - * Without the second condition we could end up never scanning an > > - * lruvec even if it has plenty of old anonymous pages unless the > > - * system is under heavy pressure. > > + * Make sure there are enough pages on the biased LRU before we go > > + * and do an exclusive reclaim from that list, i.e. if the > > + * size of the inactive list is greater than that of the active list > > + * *and* the inactive list actually has some pages to scan on this > > + * priority. > > + * Without the second condition we could end up never scanning other > > + * lruvecs even if they have plenty of old pages unless the system is > > + * under heavy pressure. > > */ > > - if (!inactive_list_is_low(lruvec, true, memcg, sc, false) && > > - lruvec_lru_size(lruvec, LRU_INACTIVE_FILE, sc->reclaim_idx) >> sc->priority) { > > - scan_balance = SCAN_FILE; > > + lru = LRU_INACTIVE_ANON + LRU_FILE * (scan_balance == SCAN_FILE); > > This part seems to complicate the logic since it determines the lru under > test based on the current setting of scan_balance. I think I prefer > individual heuristics with well written comments, but others may feel > differently about this. I do not claim the code would more obvious than before but it gets rid of the duplication which is usually a good thing. This size check has the same reasoning regardless of the type of the LRU. But I am not going to insist... > > + if (!inactive_list_is_low(lruvec, is_file_lru(lru), memcg, sc, false) && > > + lruvec_lru_size(lruvec, lru, sc->reclaim_idx) >> sc->priority) > > goto out; > > - } > > > > scan_balance = SCAN_FRACT; > > -- Michal Hocko SUSE Labs