[PATCH v1] mm:memcg: skip memcg of current in mem_cgroup_soft_limit_reclaim

From: Zhaoyang Huang
Date: Fri Aug 03 2018 - 01:48:19 EST


for the soft_limit reclaim has more directivity than global reclaim, we
have current memcg be skipped to avoid potential page thrashing.

Signed-off-by: Zhaoyang Huang <zhaoyang.huang@xxxxxxxxxxxxxx>
---
mm/memcontrol.c | 11 ++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/mm/memcontrol.c b/mm/memcontrol.c
index 8c0280b..9d09e95 100644
--- a/mm/memcontrol.c
+++ b/mm/memcontrol.c
@@ -2537,12 +2537,21 @@ unsigned long mem_cgroup_soft_limit_reclaim(pg_data_t *pgdat, int order,
mz = mem_cgroup_largest_soft_limit_node(mctz);
if (!mz)
break;
-
+ /*
+ * skip current memcg to avoid page thrashing, for the
+ * mem_cgroup_soft_reclaim has more directivity than
+ * global reclaim.
+ */
+ if (get_mem_cgroup_from_mm(current->mm) == mz->memcg) {
+ reclaimed = 0;
+ goto next;
+ }
nr_scanned = 0;
reclaimed = mem_cgroup_soft_reclaim(mz->memcg, pgdat,
gfp_mask, &nr_scanned);
nr_reclaimed += reclaimed;
*total_scanned += nr_scanned;
+next:
spin_lock_irq(&mctz->lock);
__mem_cgroup_remove_exceeded(mz, mctz);

--
1.9.1