diff mbox series

[-V11,8/9] mm/vmscan: never demote for memcg reclaim

Message ID 20210721063926.3024591-8-ying.huang@intel.com (mailing list archive)
State New
Headers show
Series [-V11,1/9] mm/numa: automatically generate node migration order | expand

Commit Message

Huang, Ying July 21, 2021, 6:39 a.m. UTC
From: Dave Hansen <dave.hansen@linux.intel.com>

Global reclaim aims to reduce the amount of memory used on a given node or
set of nodes.  Migrating pages to another node serves this purpose.

memcg reclaim is different.  Its goal is to reduce the total memory
consumption of the entire memcg, across all nodes.  Migration does not
assist memcg reclaim because it just moves page contents between nodes
rather than actually reducing memory consumption.

Link: https://lkml.kernel.org/r/20210715055145.195411-9-ying.huang@intel.com
Signed-off-by: Dave Hansen <dave.hansen@linux.intel.com>
Signed-off-by: "Huang, Ying" <ying.huang@intel.com>
Suggested-by: Yang Shi <yang.shi@linux.alibaba.com>
Reviewed-by: Yang Shi <shy828301@gmail.com>
Cc: Michal Hocko <mhocko@suse.com>
Cc: Wei Xu <weixugc@google.com>
Cc: Oscar Salvador <osalvador@suse.de>
Cc: Zi Yan <ziy@nvidia.com>
Cc: David Rientjes <rientjes@google.com>
Cc: Dan Williams <dan.j.williams@intel.com>
Cc: David Hildenbrand <david@redhat.com>
Cc: Greg Thelen <gthelen@google.com>
Cc: Keith Busch <kbusch@kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
---
 mm/vmscan.c | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

Comments

Zi Yan July 21, 2021, 9:38 p.m. UTC | #1
On 21 Jul 2021, at 2:39, Huang Ying wrote:

> From: Dave Hansen <dave.hansen@linux.intel.com>
>
> Global reclaim aims to reduce the amount of memory used on a given node or
> set of nodes.  Migrating pages to another node serves this purpose.
>
> memcg reclaim is different.  Its goal is to reduce the total memory
> consumption of the entire memcg, across all nodes.  Migration does not
> assist memcg reclaim because it just moves page contents between nodes
> rather than actually reducing memory consumption.
>
> Link: https://lkml.kernel.org/r/20210715055145.195411-9-ying.huang@intel.com
> Signed-off-by: Dave Hansen <dave.hansen@linux.intel.com>
> Signed-off-by: "Huang, Ying" <ying.huang@intel.com>
> Suggested-by: Yang Shi <yang.shi@linux.alibaba.com>
> Reviewed-by: Yang Shi <shy828301@gmail.com>
> Cc: Michal Hocko <mhocko@suse.com>
> Cc: Wei Xu <weixugc@google.com>
> Cc: Oscar Salvador <osalvador@suse.de>
> Cc: Zi Yan <ziy@nvidia.com>
> Cc: David Rientjes <rientjes@google.com>
> Cc: Dan Williams <dan.j.williams@intel.com>
> Cc: David Hildenbrand <david@redhat.com>
> Cc: Greg Thelen <gthelen@google.com>
> Cc: Keith Busch <kbusch@kernel.org>
> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
> ---
>  mm/vmscan.c | 9 +++++++--
>  1 file changed, 7 insertions(+), 2 deletions(-)

LGTM. Reviewed-by: Zi Yan <ziy@nvidia.com>.

Should this be folded into Patch 4 when can_demote() is introduced?


—
Best Regards,
Yan, Zi
Dave Hansen July 21, 2021, 9:58 p.m. UTC | #2
On 7/21/21 2:38 PM, Zi Yan wrote:
> On 21 Jul 2021, at 2:39, Huang Ying wrote:
>> From: Dave Hansen <dave.hansen@linux.intel.com>
>>
>> Global reclaim aims to reduce the amount of memory used on a
>> given node or set of nodes.  Migrating pages to another node
>> serves this purpose.
>>
>> memcg reclaim is different.  Its goal is to reduce the total
>> memory consumption of the entire memcg, across all nodes.
>> Migration does not assist memcg reclaim because it just moves
>> page contents between nodes rather than actually reducing memory
>> consumption.
...
> Should this be folded into Patch 4 when can_demote() is
> introduced?

I guess it could be.  But, it's logically separate since it has its
own justification which is rather discrete.

I think it's best to keep it separate.
Zi Yan July 21, 2021, 9:59 p.m. UTC | #3
On 21 Jul 2021, at 17:58, Dave Hansen wrote:

> On 7/21/21 2:38 PM, Zi Yan wrote:
>> On 21 Jul 2021, at 2:39, Huang Ying wrote:
>>> From: Dave Hansen <dave.hansen@linux.intel.com>
>>>
>>> Global reclaim aims to reduce the amount of memory used on a
>>> given node or set of nodes.  Migrating pages to another node
>>> serves this purpose.
>>>
>>> memcg reclaim is different.  Its goal is to reduce the total
>>> memory consumption of the entire memcg, across all nodes.
>>> Migration does not assist memcg reclaim because it just moves
>>> page contents between nodes rather than actually reducing memory
>>> consumption.
> ...
>> Should this be folded into Patch 4 when can_demote() is
>> introduced?
>
> I guess it could be.  But, it's logically separate since it has its
> own justification which is rather discrete.
>
> I think it's best to keep it separate.

Sure. I am OK with it.

—
Best Regards,
Yan, Zi
Yang Shi July 21, 2021, 10:03 p.m. UTC | #4
On Wed, Jul 21, 2021 at 2:58 PM Dave Hansen <dave.hansen@intel.com> wrote:
>
> On 7/21/21 2:38 PM, Zi Yan wrote:
> > On 21 Jul 2021, at 2:39, Huang Ying wrote:
> >> From: Dave Hansen <dave.hansen@linux.intel.com>
> >>
> >> Global reclaim aims to reduce the amount of memory used on a
> >> given node or set of nodes.  Migrating pages to another node
> >> serves this purpose.
> >>
> >> memcg reclaim is different.  Its goal is to reduce the total
> >> memory consumption of the entire memcg, across all nodes.
> >> Migration does not assist memcg reclaim because it just moves
> >> page contents between nodes rather than actually reducing memory
> >> consumption.
> ...
> > Should this be folded into Patch 4 when can_demote() is
> > introduced?
>
> I guess it could be.  But, it's logically separate since it has its
> own justification which is rather discrete.
>
> I think it's best to keep it separate.

Yes, I agree.
diff mbox series

Patch

diff --git a/mm/vmscan.c b/mm/vmscan.c
index 67a320c6571d..60179903ed9e 100644
--- a/mm/vmscan.c
+++ b/mm/vmscan.c
@@ -521,8 +521,13 @@  static long add_nr_deferred(long nr, struct shrinker *shrinker,
 
 static bool can_demote(int nid, struct scan_control *sc)
 {
-	if (sc && sc->no_demotion)
-		return false;
+	if (sc) {
+		if (sc->no_demotion)
+			return false;
+		/* It is pointless to do demotion in memcg reclaim */
+		if (cgroup_reclaim(sc))
+			return false;
+	}
 	if (next_demotion_node(nid) == NUMA_NO_NODE)
 		return false;