Messages in this thread | | | Date | Thu, 4 May 2017 13:43:58 +0200 | From | Michal Hocko <> | Subject | Re: [patch v2] mm, vmscan: avoid thrashing anon lru when free + file is low |
| |
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
| |