[Devel] [PATCH RHEL7 COMMIT] ms/mm: memcontrol: simplify detecting when the memory+swap limit is hit
Konstantin Khorenko
khorenko at virtuozzo.com
Wed Jan 31 18:48:02 MSK 2018
The commit is pushed to "branch-rh7-3.10.0-693.11.6.vz7.42.x-ovz" and will appear at https://src.openvz.org/scm/ovz/vzkernel.git
after rh7-3.10.0-693.11.6.vz7.42.4
------>
commit 980cb5adaaa6f98851a3364612530d0247c5ce81
Author: Johannes Weiner <hannes at cmpxchg.org>
Date: Wed Jan 31 18:48:01 2018 +0300
ms/mm: memcontrol: simplify detecting when the memory+swap limit is hit
When attempting to charge pages, we first charge the memory counter and
then the memory+swap counter. If one of the counters is at its limit, we
enter reclaim, but if it's the memory+swap counter, reclaim shouldn't swap
because that wouldn't change the situation. However, if the counters have
the same limits, we never get to the memory+swap limit. To know whether
reclaim should swap or not, there is a state flag that indicates whether
the limits are equal and whether hitting the memory limit implies hitting
the memory+swap limit.
Just try the memory+swap counter first.
Signed-off-by: Johannes Weiner <hannes at cmpxchg.org>
Reviewed-by: Vladimir Davydov <vdavydov at parallels.com>
Acked-by: Michal Hocko <mhocko at suse.cz>
Cc: Dave Hansen <dave at sr71.net>
Cc: Greg Thelen <gthelen at google.com>
Signed-off-by: Andrew Morton <akpm at linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds at linux-foundation.org>
https://jira.sw.ru/browse/PSBM-80732
(cherry picked from commit 3fbe724424fb104aaca9973389b4a9df428c3e2a)
Signed-off-by: Andrey Ryabinin <aryabinin at virtuozzo.com>
---
mm/memcontrol.c | 32 +++++---------------------------
1 file changed, 5 insertions(+), 27 deletions(-)
diff --git a/mm/memcontrol.c b/mm/memcontrol.c
index f7036e71edde..5396157488ec 100644
--- a/mm/memcontrol.c
+++ b/mm/memcontrol.c
@@ -340,9 +340,6 @@ struct mem_cgroup {
/* OOM-Killer disable */
int oom_kill_disable;
- /* set when res.limit == memsw.limit */
- bool memsw_is_minimum;
-
#ifdef CONFIG_CLEANCACHE
/*
* cleancache_disabled_toggle: toggled by writing to
@@ -2163,8 +2160,6 @@ static unsigned long mem_cgroup_reclaim(struct mem_cgroup *memcg,
if (flags & MEM_CGROUP_RECLAIM_NOSWAP)
noswap = true;
- if (!(flags & MEM_CGROUP_RECLAIM_SHRINK) && memcg->memsw_is_minimum)
- noswap = true;
for (loop = 0; loop < MEM_CGROUP_MAX_RECLAIM_LOOPS; loop++) {
if (loop)
@@ -3849,7 +3844,6 @@ static int mem_cgroup_resize_limit(struct mem_cgroup *memcg,
{
unsigned long curusage;
unsigned long oldusage;
- unsigned long memswlimit;
bool enlarge = false;
int retry_count;
int ret;
@@ -3870,23 +3864,14 @@ static int mem_cgroup_resize_limit(struct mem_cgroup *memcg,
break;
}
mutex_lock(&memcg_limit_mutex);
- memswlimit = memcg->memsw.limit;
- if (limit > memswlimit) {
+ if (limit > memcg->memsw.limit) {
mutex_unlock(&memcg_limit_mutex);
ret = -EINVAL;
break;
}
-
if (limit > memcg->memory.limit)
enlarge = true;
-
ret = page_counter_limit(&memcg->memory, limit);
- if (!ret) {
- if (memswlimit == limit)
- memcg->memsw_is_minimum = true;
- else
- memcg->memsw_is_minimum = false;
- }
mutex_unlock(&memcg_limit_mutex);
if (!ret)
@@ -3913,7 +3898,6 @@ static int mem_cgroup_resize_memsw_limit(struct mem_cgroup *memcg,
{
unsigned long curusage;
unsigned long oldusage;
- unsigned long memlimit, memswlimit;
bool enlarge = false;
int retry_count;
int ret;
@@ -3929,23 +3913,17 @@ static int mem_cgroup_resize_memsw_limit(struct mem_cgroup *memcg,
ret = -EINTR;
break;
}
+
mutex_lock(&memcg_limit_mutex);
- memlimit = memcg->memory.limit;
- if (limit < memlimit) {
+ if (limit < memcg->memory.limit) {
mutex_unlock(&memcg_limit_mutex);
ret = -EINVAL;
break;
}
- memswlimit = memcg->memsw.limit;
- if (limit > memswlimit)
+
+ if (limit > memcg->memsw.limit)
enlarge = true;
ret = page_counter_limit(&memcg->memsw, limit);
- if (!ret) {
- if (memlimit == limit)
- memcg->memsw_is_minimum = true;
- else
- memcg->memsw_is_minimum = false;
- }
mutex_unlock(&memcg_limit_mutex);
if (!ret)
More information about the Devel
mailing list