From: Roman Gushchin <guro@fb.com>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: Johannes Weiner <hannes@cmpxchg.org>,
Michal Hocko <mhocko@kernel.org>, Tejun Heo <tj@kernel.org>,
linux-mm@kvack.org, kernel-team@fb.com,
linux-kernel@vger.kernel.org, Roman Gushchin <guro@fb.com>,
Vladimir Davydov <vdavydov.dev@gmail.com>,
Greg Thelen <gthelen@google.com>, Shuah Khan <shuah@kernel.org>,
Andrew Morton <akpm@linuxfoundation.org>
Subject: [PATCH v2 3/3] mm, memcg: don't skip memory guarantee calculations
Date: Mon, 11 Jun 2018 10:54:18 -0700 [thread overview]
Message-ID: <20180611175418.7007-4-guro@fb.com> (raw)
In-Reply-To: <20180611175418.7007-1-guro@fb.com>
There are two cases when effective memory guarantee calculation is
mistakenly skipped:
1) If memcg is a child of the root cgroup, and the root cgroup is not
root_mem_cgroup (in other words, if the reclaim is targeted).
Top-level memory cgroups are handled specially in
mem_cgroup_protected(), because the root memory cgroup doesn't have
memory guarantee and can't limit its children guarantees. So, all
effective guarantee calculation is skipped. But in case of targeted
reclaim things are different: cgroups, which parent exceeded its memory
limit aren't special.
2) If memcg has no charged memory (memory usage is 0). In this case
mem_cgroup_protected() always returns MEMCG_PROT_NONE, which is correct
and prevents to generate fake memory low events for empty cgroups. But
skipping memory emin/elow calculation is wrong: if there is no global
memory pressure there might be no good chance again, so we can end up
with effective guarantees set to 0 without any reason.
Link: http://lkml.kernel.org/r/20180522132528.23769-2-guro@fb.com
Signed-off-by: Roman Gushchin <guro@fb.com>
Cc: Johannes Weiner <hannes@cmpxchg.org>
Cc: Michal Hocko <mhocko@kernel.org>
Cc: Vladimir Davydov <vdavydov.dev@gmail.com>
Cc: Greg Thelen <gthelen@google.com>
Cc: Tejun Heo <tj@kernel.org>
Cc: Shuah Khan <shuah@kernel.org>
Signed-off-by: Andrew Morton <akpm@linuxfoundation.org>
---
mm/memcontrol.c | 15 ++++++++-------
1 file changed, 8 insertions(+), 7 deletions(-)
diff --git a/mm/memcontrol.c b/mm/memcontrol.c
index 485df6f63d26..3220c992ee26 100644
--- a/mm/memcontrol.c
+++ b/mm/memcontrol.c
@@ -5477,15 +5477,10 @@ enum mem_cgroup_protection mem_cgroup_protected(struct mem_cgroup *root,
if (mem_cgroup_disabled())
return MEMCG_PROT_NONE;
- if (!root)
- root = root_mem_cgroup;
- if (memcg == root)
+ if (memcg == root_mem_cgroup)
return MEMCG_PROT_NONE;
usage = page_counter_read(&memcg->memory);
- if (!usage)
- return MEMCG_PROT_NONE;
-
emin = memcg->memory.min;
elow = memcg->memory.low;
@@ -5494,7 +5489,7 @@ enum mem_cgroup_protection mem_cgroup_protected(struct mem_cgroup *root,
if (!parent)
return MEMCG_PROT_NONE;
- if (parent == root)
+ if (parent == root_mem_cgroup)
goto exit;
parent_emin = READ_ONCE(parent->memory.emin);
@@ -5529,6 +5524,12 @@ enum mem_cgroup_protection mem_cgroup_protected(struct mem_cgroup *root,
memcg->memory.emin = emin;
memcg->memory.elow = elow;
+ if (root && memcg == root)
+ return MEMCG_PROT_NONE;
+
+ if (!usage)
+ return MEMCG_PROT_NONE;
+
if (usage <= emin)
return MEMCG_PROT_MIN;
else if (usage <= elow)
--
2.14.4
next prev parent reply other threads:[~2018-06-11 17:55 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-06-11 17:54 [PATCH v2 0/3] memory.min fixes/refinements Roman Gushchin
2018-06-11 17:54 ` [PATCH v2 1/3] mm: fix null pointer dereference in mem_cgroup_protected Roman Gushchin
2018-06-11 17:54 ` [PATCH v2 2/3] mm, memcg: propagate memory effective protection on setting memory.min/low Roman Gushchin
2018-06-12 15:52 ` Johannes Weiner
2018-06-12 17:24 ` Roman Gushchin
2018-06-11 17:54 ` Roman Gushchin [this message]
2018-06-11 22:36 ` [PATCH v2 0/3] memory.min fixes/refinements Andrew Morton
2018-06-11 23:09 ` Roman Gushchin
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=20180611175418.7007-4-guro@fb.com \
--to=guro@fb.com \
--cc=akpm@linux-foundation.org \
--cc=akpm@linuxfoundation.org \
--cc=gthelen@google.com \
--cc=hannes@cmpxchg.org \
--cc=kernel-team@fb.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=mhocko@kernel.org \
--cc=shuah@kernel.org \
--cc=tj@kernel.org \
--cc=vdavydov.dev@gmail.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: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox