From: Dave Hansen <dave.hansen@linux.intel.com> To: linux-kernel@vger.kernel.org Cc: linux-mm@kvack.org, Dave Hansen <dave.hansen@linux.intel.com>, rientjes@google.com, ying.huang@intel.com, dan.j.williams@intel.com, david@redhat.com, osalvador@suse.de Subject: [RFC][PATCH 10/13] mm/vmscan: add helper for querying ability to age anonymous pages Date: Mon, 25 Jan 2021 16:34:31 -0800 [thread overview] Message-ID: <20210126003431.19BDC239@viggo.jf.intel.com> (raw) In-Reply-To: <20210126003411.2AC51464@viggo.jf.intel.com> From: Dave Hansen <dave.hansen@linux.intel.com> Anonymous pages are kept on their own LRU(s). These lists could theoretically always be scanned and maintained. But, without swap, there is currently nothing the kernel can *do* with the results of a scanned, sorted LRU for anonymous pages. A check for '!total_swap_pages' currently serves as a valid check as to whether anonymous LRUs should be maintained. However, another method will be added shortly: page demotion. Abstract out the 'total_swap_pages' checks into a helper, give it a logically significant name, and check for the possibility of page demotion. Signed-off-by: Dave Hansen <dave.hansen@linux.intel.com> Cc: David Rientjes <rientjes@google.com> Cc: Huang Ying <ying.huang@intel.com> Cc: Dan Williams <dan.j.williams@intel.com> Cc: David Hildenbrand <david@redhat.com> Cc: osalvador <osalvador@suse.de> --- b/mm/vmscan.c | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff -puN mm/vmscan.c~mm-vmscan-anon-can-be-aged mm/vmscan.c --- a/mm/vmscan.c~mm-vmscan-anon-can-be-aged 2021-01-25 16:23:17.044866690 -0800 +++ b/mm/vmscan.c 2021-01-25 16:23:17.053866690 -0800 @@ -2508,6 +2508,26 @@ out: } } +/* + * Anonymous LRU management is a waste if there is + * ultimately no way to reclaim the memory. + */ +bool anon_should_be_aged(struct lruvec *lruvec) +{ + struct pglist_data *pgdat = lruvec_pgdat(lruvec); + + /* Aging the anon LRU is valuable if swap is present: */ + if (total_swap_pages > 0) + return true; + + /* Also valuable if anon pages can be demoted: */ + if (next_demotion_node(pgdat->node_id) >= 0) + return true; + + /* No way to reclaim anon pages. Should not age anon LRUs: */ + return false; +} + static void shrink_lruvec(struct lruvec *lruvec, struct scan_control *sc) { unsigned long nr[NR_LRU_LISTS]; @@ -2617,7 +2637,8 @@ static void shrink_lruvec(struct lruvec * Even if we did not try to evict anon pages at all, we want to * rebalance the anon lru active/inactive ratio. */ - if (total_swap_pages && inactive_is_low(lruvec, LRU_INACTIVE_ANON)) + if (anon_should_be_aged(lruvec) && + inactive_is_low(lruvec, LRU_INACTIVE_ANON)) shrink_active_list(SWAP_CLUSTER_MAX, lruvec, sc, LRU_ACTIVE_ANON); } @@ -3446,10 +3467,11 @@ static void age_active_anon(struct pglis struct mem_cgroup *memcg; struct lruvec *lruvec; - if (!total_swap_pages) + lruvec = mem_cgroup_lruvec(NULL, pgdat); + + if (!anon_should_be_aged(lruvec)) return; - lruvec = mem_cgroup_lruvec(NULL, pgdat); if (!inactive_is_low(lruvec, LRU_INACTIVE_ANON)) return; _
WARNING: multiple messages have this Message-ID (diff)
From: Dave Hansen <dave.hansen@linux.intel.com> To: linux-kernel@vger.kernel.org Cc: linux-mm@kvack.org,Dave Hansen <dave.hansen@linux.intel.com>,rientjes@google.com,ying.huang@intel.com,dan.j.williams@intel.com,david@redhat.com,osalvador@suse.de Subject: [RFC][PATCH 10/13] mm/vmscan: add helper for querying ability to age anonymous pages Date: Mon, 25 Jan 2021 16:34:31 -0800 [thread overview] Message-ID: <20210126003431.19BDC239@viggo.jf.intel.com> (raw) In-Reply-To: <20210126003411.2AC51464@viggo.jf.intel.com> From: Dave Hansen <dave.hansen@linux.intel.com> Anonymous pages are kept on their own LRU(s). These lists could theoretically always be scanned and maintained. But, without swap, there is currently nothing the kernel can *do* with the results of a scanned, sorted LRU for anonymous pages. A check for '!total_swap_pages' currently serves as a valid check as to whether anonymous LRUs should be maintained. However, another method will be added shortly: page demotion. Abstract out the 'total_swap_pages' checks into a helper, give it a logically significant name, and check for the possibility of page demotion. Signed-off-by: Dave Hansen <dave.hansen@linux.intel.com> Cc: David Rientjes <rientjes@google.com> Cc: Huang Ying <ying.huang@intel.com> Cc: Dan Williams <dan.j.williams@intel.com> Cc: David Hildenbrand <david@redhat.com> Cc: osalvador <osalvador@suse.de> --- b/mm/vmscan.c | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff -puN mm/vmscan.c~mm-vmscan-anon-can-be-aged mm/vmscan.c --- a/mm/vmscan.c~mm-vmscan-anon-can-be-aged 2021-01-25 16:23:17.044866690 -0800 +++ b/mm/vmscan.c 2021-01-25 16:23:17.053866690 -0800 @@ -2508,6 +2508,26 @@ out: } } +/* + * Anonymous LRU management is a waste if there is + * ultimately no way to reclaim the memory. + */ +bool anon_should_be_aged(struct lruvec *lruvec) +{ + struct pglist_data *pgdat = lruvec_pgdat(lruvec); + + /* Aging the anon LRU is valuable if swap is present: */ + if (total_swap_pages > 0) + return true; + + /* Also valuable if anon pages can be demoted: */ + if (next_demotion_node(pgdat->node_id) >= 0) + return true; + + /* No way to reclaim anon pages. Should not age anon LRUs: */ + return false; +} + static void shrink_lruvec(struct lruvec *lruvec, struct scan_control *sc) { unsigned long nr[NR_LRU_LISTS]; @@ -2617,7 +2637,8 @@ static void shrink_lruvec(struct lruvec * Even if we did not try to evict anon pages at all, we want to * rebalance the anon lru active/inactive ratio. */ - if (total_swap_pages && inactive_is_low(lruvec, LRU_INACTIVE_ANON)) + if (anon_should_be_aged(lruvec) && + inactive_is_low(lruvec, LRU_INACTIVE_ANON)) shrink_active_list(SWAP_CLUSTER_MAX, lruvec, sc, LRU_ACTIVE_ANON); } @@ -3446,10 +3467,11 @@ static void age_active_anon(struct pglis struct mem_cgroup *memcg; struct lruvec *lruvec; - if (!total_swap_pages) + lruvec = mem_cgroup_lruvec(NULL, pgdat); + + if (!anon_should_be_aged(lruvec)) return; - lruvec = mem_cgroup_lruvec(NULL, pgdat); if (!inactive_is_low(lruvec, LRU_INACTIVE_ANON)) return; _
next prev parent reply other threads:[~2021-01-26 10:27 UTC|newest] Thread overview: 67+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-01-26 0:34 [RFC][PATCH 00/13] [v5] Migrate Pages in lieu of discard Dave Hansen 2021-01-26 0:34 ` Dave Hansen 2021-01-26 0:34 ` [RFC][PATCH 01/13] mm/vmscan: restore zone_reclaim_mode ABI Dave Hansen 2021-01-26 0:34 ` Dave Hansen 2021-02-10 9:42 ` Oscar Salvador 2021-01-26 0:34 ` [RFC][PATCH 02/13] mm/vmscan: move RECLAIM* bits to uapi header Dave Hansen 2021-01-26 0:34 ` Dave Hansen 2021-02-10 9:44 ` Oscar Salvador 2021-01-26 0:34 ` [RFC][PATCH 03/13] mm/vmscan: replace implicit RECLAIM_ZONE checks with explicit checks Dave Hansen 2021-01-26 0:34 ` Dave Hansen 2021-01-31 1:10 ` David Rientjes 2021-01-31 1:10 ` David Rientjes 2021-02-10 9:54 ` Oscar Salvador 2021-01-26 0:34 ` [RFC][PATCH 04/13] mm/numa: node demotion data structure and lookup Dave Hansen 2021-01-26 0:34 ` Dave Hansen 2021-01-31 1:19 ` David Rientjes 2021-01-31 1:19 ` David Rientjes 2021-02-01 17:49 ` Dave Hansen 2021-01-26 0:34 ` [RFC][PATCH 05/13] mm/numa: automatically generate node migration order Dave Hansen 2021-01-26 0:34 ` Dave Hansen 2021-01-29 20:46 ` Yang Shi 2021-01-29 20:46 ` Yang Shi 2021-02-01 19:13 ` Dave Hansen 2021-02-02 11:43 ` Oscar Salvador 2021-02-02 17:46 ` Yang Shi 2021-02-02 17:46 ` Yang Shi 2021-02-03 0:43 ` Dave Hansen 2021-02-04 0:26 ` Yang Shi 2021-02-04 0:26 ` Yang Shi 2021-01-26 0:34 ` [RFC][PATCH 06/13] mm/migrate: update migration order during on hotplug events Dave Hansen 2021-01-26 0:34 ` Dave Hansen 2021-01-29 20:59 ` Yang Shi 2021-01-29 20:59 ` Yang Shi 2021-02-02 11:42 ` Oscar Salvador 2021-02-09 23:45 ` Dave Hansen 2021-02-10 8:55 ` Oscar Salvador 2021-01-26 0:34 ` [RFC][PATCH 07/13] mm/migrate: make migrate_pages() return nr_succeeded Dave Hansen 2021-01-26 0:34 ` Dave Hansen 2021-01-29 21:04 ` Yang Shi 2021-01-29 21:04 ` Yang Shi 2021-02-09 23:41 ` Dave Hansen 2021-01-26 0:34 ` [RFC][PATCH 08/13] mm/migrate: demote pages during reclaim Dave Hansen 2021-01-26 0:34 ` Dave Hansen 2021-02-02 11:55 ` Oscar Salvador 2021-02-02 22:45 ` Yang Shi 2021-02-02 22:45 ` Yang Shi 2021-02-02 22:56 ` Dave Hansen 2021-02-02 18:22 ` Yang Shi 2021-02-02 18:22 ` Yang Shi 2021-02-02 18:34 ` Dave Hansen 2021-01-26 0:34 ` [RFC][PATCH 09/13] mm/vmscan: add page demotion counter Dave Hansen 2021-01-26 0:34 ` Dave Hansen 2021-01-26 0:34 ` Dave Hansen [this message] 2021-01-26 0:34 ` [RFC][PATCH 10/13] mm/vmscan: add helper for querying ability to age anonymous pages Dave Hansen 2021-01-26 0:34 ` [RFC][PATCH 11/13] mm/vmscan: Consider anonymous pages without swap Dave Hansen 2021-01-26 0:34 ` Dave Hansen 2021-02-02 18:56 ` Yang Shi 2021-02-02 18:56 ` Yang Shi 2021-02-02 21:35 ` Dave Hansen 2021-02-02 22:35 ` Yang Shi 2021-02-02 22:35 ` Yang Shi 2021-01-26 0:34 ` [RFC][PATCH 12/13] mm/vmscan: never demote for memcg reclaim Dave Hansen 2021-01-26 0:34 ` Dave Hansen 2021-01-26 0:34 ` [RFC][PATCH 13/13] mm/migrate: new zone_reclaim_mode to enable reclaim migration Dave Hansen 2021-01-26 0:34 ` Dave Hansen 2021-01-31 1:13 ` [RFC][PATCH 00/13] [v5] Migrate Pages in lieu of discard David Rientjes 2021-01-31 1:13 ` David Rientjes
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=20210126003431.19BDC239@viggo.jf.intel.com \ --to=dave.hansen@linux.intel.com \ --cc=dan.j.williams@intel.com \ --cc=david@redhat.com \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-mm@kvack.org \ --cc=osalvador@suse.de \ --cc=rientjes@google.com \ --cc=ying.huang@intel.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.