From: Tejun Heo <tj@kernel.org>
To: hannes@cmpxchg.org, mhocko@kernel.org, akpm@linux-foundation.org
Cc: cgroups@vger.kernel.org, linux-mm@kvack.org,
vdavydov@parallels.com, kernel-team@fb.com
Subject: [PATCH 2/2] memcg: always enable kmemcg on the default hierarchy
Date: Fri, 28 Aug 2015 18:02:37 -0400 [thread overview]
Message-ID: <20150828220237.GE11089@htj.dyndns.org> (raw)
In-Reply-To: <20150828220158.GD11089@htj.dyndns.org>
On the default hierarchy, all memory consumption will be accounted
together and controlled by the same set of limits. Enable kmemcg on
the default hierarchy by default. Boot parameter "disable_kmemcg" can
be specified to turn it off.
v2: - v1 triggered oops on nested cgroup creations. Moved enabling
mechanism to memcg_propagate_kmem().
- Bypass busy test on kmem activation as it's unnecessary and gets
confused by controller being enabled on a cgroup which already
has processes.
- "disable_kmemcg" boot param added.
Signed-off-by: Tejun Heo <tj@kernel.org>
---
mm/memcontrol.c | 43 ++++++++++++++++++++++++++++++-------------
1 file changed, 30 insertions(+), 13 deletions(-)
--- a/mm/memcontrol.c
+++ b/mm/memcontrol.c
@@ -346,6 +346,17 @@ EXPORT_SYMBOL(tcp_proto_cgroup);
#endif
#ifdef CONFIG_MEMCG_KMEM
+
+static bool kmemcg_disabled;
+
+static int __init disable_kmemcg(char *s)
+{
+ kmemcg_disabled = true;
+ pr_info("memcg: kernel memory support disabled on cgroup2");
+ return 0;
+}
+__setup("disable_kmemcg", disable_kmemcg);
+
/*
* This will be the memcg's index in each cache's ->memcg_params.memcg_caches.
* The main reason for not using cgroup id for this:
@@ -2908,9 +2919,9 @@ static int memcg_activate_kmem(struct me
BUG_ON(memcg->kmem_acct_active);
/*
- * For simplicity, we won't allow this to be disabled. It also can't
- * be changed if the cgroup has children already, or if tasks had
- * already joined.
+ * On traditional hierarchies, for simplicity, we won't allow this
+ * to be disabled. It also can't be changed if the cgroup has
+ * children already, or if tasks had already joined.
*
* If tasks join before we set the limit, a person looking at
* kmem.usage_in_bytes will have no way to determine when it took
@@ -2919,13 +2930,15 @@ static int memcg_activate_kmem(struct me
* After it first became limited, changes in the value of the limit are
* of course permitted.
*/
- mutex_lock(&memcg_create_mutex);
- if (cgroup_has_tasks(memcg->css.cgroup) ||
- (memcg->use_hierarchy && memcg_has_children(memcg)))
- err = -EBUSY;
- mutex_unlock(&memcg_create_mutex);
- if (err)
- goto out;
+ if (!cgroup_on_dfl(memcg->css.cgroup)) {
+ mutex_lock(&memcg_create_mutex);
+ if (cgroup_has_tasks(memcg->css.cgroup) ||
+ (memcg->use_hierarchy && memcg_has_children(memcg)))
+ err = -EBUSY;
+ mutex_unlock(&memcg_create_mutex);
+ if (err)
+ goto out;
+ }
memcg_id = memcg_alloc_cache_id();
if (memcg_id < 0) {
@@ -2978,10 +2991,14 @@ static int memcg_propagate_kmem(struct m
mutex_lock(&memcg_limit_mutex);
/*
- * If the parent cgroup is not kmem-active now, it cannot be activated
- * after this point, because it has at least one child already.
+ * On the default hierarchy, automatically enable kmemcg unless
+ * explicitly disabled by the boot param. On traditional
+ * hierarchies, inherit from the parent. If the parent cgroup is
+ * not kmem-active now, it cannot be activated after this point,
+ * because it has at least one child already.
*/
- if (memcg_kmem_is_active(parent))
+ if ((!kmemcg_disabled && cgroup_on_dfl(memcg->css.cgroup)) ||
+ memcg_kmem_is_active(parent))
ret = memcg_activate_kmem(memcg, PAGE_COUNTER_MAX);
mutex_unlock(&memcg_limit_mutex);
return ret;
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
next prev parent reply other threads:[~2015-08-28 22:02 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-08-28 22:01 [PATCH 1/2] memcg: flatten task_struct->memcg_oom Tejun Heo
2015-08-28 22:02 ` Tejun Heo [this message]
2015-08-31 22:54 ` [PATCH 2/2] memcg: always enable kmemcg on the default hierarchy Andrew Morton
2015-09-04 21:00 ` [PATCH v2 3/2] memcg: punt high overage reclaim to return-to-userland path Tejun Heo
2015-09-07 9:23 ` Michal Hocko
2015-09-08 16:59 ` Tejun Heo
2015-09-07 11:38 ` Vladimir Davydov
2015-09-08 17:00 ` Tejun Heo
2015-09-15 9:20 ` [PATCH 2/2] memcg: always enable kmemcg on the default hierarchy Johannes Weiner
2015-09-01 15:25 ` [PATCH 1/2] memcg: flatten task_struct->memcg_oom Michal Hocko
2015-09-02 11:45 ` Vladimir Davydov
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=20150828220237.GE11089@htj.dyndns.org \
--to=tj@kernel.org \
--cc=akpm@linux-foundation.org \
--cc=cgroups@vger.kernel.org \
--cc=hannes@cmpxchg.org \
--cc=kernel-team@fb.com \
--cc=linux-mm@kvack.org \
--cc=mhocko@kernel.org \
--cc=vdavydov@parallels.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