From: Michal Hocko <mhocko@kernel.org> To: David Rientjes <rientjes@google.com> Cc: Andrew Morton <akpm@linux-foundation.org>, Minchan Kim <minchan@kernel.org>, Johannes Weiner <hannes@cmpxchg.org>, Mel Gorman <mgorman@techsingularity.net>, linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: Re: [patch v2] mm, vmscan: avoid thrashing anon lru when free + file is low Date: Wed, 3 May 2017 09:06:56 +0200 [thread overview] Message-ID: <20170503070656.GA8836@dhcp22.suse.cz> (raw) In-Reply-To: <20170503061528.GB1236@dhcp22.suse.cz> On Wed 03-05-17 08:15:28, Michal Hocko wrote: > On Tue 02-05-17 13:41:23, David Rientjes wrote: > > On Tue, 2 May 2017, Michal Hocko wrote: [...] > > > I do agree that blindly > > > scanning anon pages when file pages are low is very suboptimal but this > > > adds yet another heuristic without _any_ numbers. Why cannot we simply > > > treat anon and file pages equally? Something like the following > > > > > > if (pgdatfile + pgdatanon + pgdatfree > 2*total_high_wmark) { > > > scan_balance = SCAN_FILE; > > > if (pgdatfile < pgdatanon) > > > scan_balance = SCAN_ANON; > > > goto out; > > > } > > > > > > > This would be substantially worse than the current code because it > > thrashes the anon lru when anon out numbers file pages rather than at the > > point we fall under the high watermarks for all eligible zones. If you > > tested your suggestion, you could see gigabytes of memory left untouched > > on the file lru. Anonymous memory is more probable to be part of the > > working set. > > This was supposed to be more an example of a direction I was thinking, > definitely not a final patch. I will think more to come up with a > more complete proposal. This is still untested but should be much closer to what I've had in mind. --- diff --git a/mm/vmscan.c b/mm/vmscan.c index 24efcc20af91..bcdad30f942d 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c @@ -2174,8 +2174,14 @@ static void get_scan_count(struct lruvec *lruvec, struct mem_cgroup *memcg, } if (unlikely(pgdatfile + pgdatfree <= total_high_wmark)) { - scan_balance = SCAN_ANON; - goto out; + unsigned long pgdatanon; + + pgdatanon = node_page_state(pgdat, NR_ACTIVE_ANON) + + node_page_state(pgdat, NR_INACTIVE_ANON); + if (pgdatanon + pgdatfree > total_high_wmark) { + scan_balance = SCAN_ANON; + goto out; + } } } -- Michal Hocko SUSE Labs
WARNING: multiple messages have this Message-ID (diff)
From: Michal Hocko <mhocko@kernel.org> To: David Rientjes <rientjes@google.com> Cc: Andrew Morton <akpm@linux-foundation.org>, Minchan Kim <minchan@kernel.org>, Johannes Weiner <hannes@cmpxchg.org>, Mel Gorman <mgorman@techsingularity.net>, linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: Re: [patch v2] mm, vmscan: avoid thrashing anon lru when free + file is low Date: Wed, 3 May 2017 09:06:56 +0200 [thread overview] Message-ID: <20170503070656.GA8836@dhcp22.suse.cz> (raw) In-Reply-To: <20170503061528.GB1236@dhcp22.suse.cz> On Wed 03-05-17 08:15:28, Michal Hocko wrote: > On Tue 02-05-17 13:41:23, David Rientjes wrote: > > On Tue, 2 May 2017, Michal Hocko wrote: [...] > > > I do agree that blindly > > > scanning anon pages when file pages are low is very suboptimal but this > > > adds yet another heuristic without _any_ numbers. Why cannot we simply > > > treat anon and file pages equally? Something like the following > > > > > > if (pgdatfile + pgdatanon + pgdatfree > 2*total_high_wmark) { > > > scan_balance = SCAN_FILE; > > > if (pgdatfile < pgdatanon) > > > scan_balance = SCAN_ANON; > > > goto out; > > > } > > > > > > > This would be substantially worse than the current code because it > > thrashes the anon lru when anon out numbers file pages rather than at the > > point we fall under the high watermarks for all eligible zones. If you > > tested your suggestion, you could see gigabytes of memory left untouched > > on the file lru. Anonymous memory is more probable to be part of the > > working set. > > This was supposed to be more an example of a direction I was thinking, > definitely not a final patch. I will think more to come up with a > more complete proposal. This is still untested but should be much closer to what I've had in mind. --- diff --git a/mm/vmscan.c b/mm/vmscan.c index 24efcc20af91..bcdad30f942d 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c @@ -2174,8 +2174,14 @@ static void get_scan_count(struct lruvec *lruvec, struct mem_cgroup *memcg, } if (unlikely(pgdatfile + pgdatfree <= total_high_wmark)) { - scan_balance = SCAN_ANON; - goto out; + unsigned long pgdatanon; + + pgdatanon = node_page_state(pgdat, NR_ACTIVE_ANON) + + node_page_state(pgdat, NR_INACTIVE_ANON); + if (pgdatanon + pgdatfree > total_high_wmark) { + scan_balance = SCAN_ANON; + goto out; + } } } -- Michal Hocko SUSE Labs -- 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: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
next prev parent reply other threads:[~2017-05-03 7:07 UTC|newest] Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top 2017-04-18 0:06 [patch] mm, vmscan: avoid thrashing anon lru when free + file is low David Rientjes 2017-04-18 0:06 ` David Rientjes 2017-04-18 1:36 ` Minchan Kim 2017-04-18 1:36 ` Minchan Kim 2017-04-18 21:32 ` David Rientjes 2017-04-18 21:32 ` David Rientjes 2017-04-19 0:14 ` Minchan Kim 2017-04-19 0:14 ` Minchan Kim 2017-04-19 23:24 ` David Rientjes 2017-04-19 23:24 ` David Rientjes 2017-04-20 6:09 ` Minchan Kim 2017-04-20 6:09 ` Minchan Kim 2017-05-01 21:34 ` [patch v2] " David Rientjes 2017-05-01 21:34 ` David Rientjes 2017-05-02 8:02 ` Michal Hocko 2017-05-02 8:02 ` Michal Hocko 2017-05-02 20:41 ` David Rientjes 2017-05-02 20:41 ` David Rientjes 2017-05-03 6:15 ` Michal Hocko 2017-05-03 6:15 ` Michal Hocko 2017-05-03 7:06 ` Michal Hocko [this message] 2017-05-03 7:06 ` Michal Hocko 2017-05-03 8:49 ` Michal Hocko 2017-05-03 8:49 ` Michal Hocko 2017-05-03 22:52 ` David Rientjes 2017-05-03 22:52 ` David Rientjes 2017-05-04 11:43 ` Michal Hocko 2017-05-04 11:43 ` Michal Hocko 2017-05-31 15:20 ` Michal Hocko 2017-05-31 15:20 ` Michal Hocko 2017-06-02 20:36 ` Andrew Morton 2017-06-02 20:36 ` Andrew Morton 2017-06-04 22:27 ` David Rientjes 2017-06-04 22:27 ` David Rientjes 2017-04-19 7:04 ` [patch] " Michal Hocko 2017-04-19 7:04 ` Michal Hocko 2017-04-18 7:11 ` Michal Hocko 2017-04-18 7:11 ` Michal Hocko
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20170503070656.GA8836@dhcp22.suse.cz \ --to=mhocko@kernel.org \ --cc=akpm@linux-foundation.org \ --cc=hannes@cmpxchg.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-mm@kvack.org \ --cc=mgorman@techsingularity.net \ --cc=minchan@kernel.org \ --cc=rientjes@google.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.