Re: [PATCH] memcg: deprecate memory.force_empty knob

Michal Hocko
2014-05-12T15:35:04Z

On Mon 12-05-14 11:25:07, Tejun Heo wrote:
> On Mon, May 12, 2014 at 05:20:15PM +0200, Michal Hocko wrote:
> > On Mon 12-05-14 11:00:14, Tejun Heo wrote:
> > > On Mon, May 12, 2014 at 04:58:03PM +0200, Michal Hocko wrote:
> > > > @@ -4793,6 +4793,10 @@ static int mem_cgroup_force_empty_write(struct cgroup_subsys_state *css,
> > > >
> > > > if (mem_cgroup_is_root(memcg))
> > > > return -EINVAL;
> > > > + pr_info("%s (%d): memory.force_empty is deprecated and will be removed.",
> > > > + current->comm, task_pid_nr(current));
> > > > + pr_cont(" Let us know if you know if it needed in your usecase at");
> > > > + pr_cont(" linux-mm@kvack.org\n");
> > > > return mem_cgroup_force_empty(memcg);
> > >
> > > It probably would be way easier to just mark the knob with
> > > CFTYPE_INSANE.
> >
> > That would prevent from creating the file, right? I do not mind that but
> > I would like to see people complaining before.
>
> Oh sure, if you wanna see people complaining before the roll out of
> unified hierarchy, but let's make sure it's also marked with
> CFTYPE_INSANE. It's easy to remove the flag afterwards. The other
> way isn't, so...
---
>From 6f2a33df7750f0794b03f7a85aba02a4e631f2a0 Mon Sep 17 00:00:00 2001
From: Michal Hocko <mhocko@suse.cz>
Date: Mon, 12 May 2014 16:20:46 +0200
Subject: [PATCH] memcg: deprecate memory.force_empty knob

force_empty has been introduced primarily to drop memory before it gets
reparented on the group removal. This alone doesn't sound fully
justified because reparented pages which are not in use can be reclaimed
also later when there is a memory pressure on the parent level.

Mark the knob CFTYPE_INSANE which tells the cgroup core that it
shouldn't create the knob with the experimental sane_behavior. Other
users will get informed about the deprecation and asked to tell us more.
But I expect that most users will be simply cgroup remove handlers
which do that since ever without having any good reason for it.

If somebody really cares and the reparented pages, which would be dropped
otherwise, push out more important ones then we should fix the
reparenting code and put pages to the tail.

Signed-off-by: Michal Hocko <mhocko@suse.cz>
---
Documentation/cgroups/memory.txt | 3 +++
mm/memcontrol.c | 5 +++++
2 files changed, 8 insertions(+)

diff --git a/Documentation/cgroups/memory.txt b/Documentation/cgroups/memory.txt
index f0f67b44ea07..fc9fad984bfb 100644
--- a/Documentation/cgroups/memory.txt
+++ b/Documentation/cgroups/memory.txt
@@ -477,6 +477,9 @@ About use_hierarchy, see Section 6.
write will still return success. In this case, it is expected that
memory.kmem.usage_in_bytes == memory.usage_in_bytes.

+ Please note that this knob is considered deprecated and will be removed
+ in future.
+
About use_hierarchy, see Section 6.

5.2 stat file
diff --git a/mm/memcontrol.c b/mm/memcontrol.c
index b030b15b626a..ee123f3d40d5 100644
--- a/mm/memcontrol.c
+++ b/mm/memcontrol.c
@@ -4793,6 +4793,10 @@ static int mem_cgroup_force_empty_write(struct cgroup_subsys_state *css,

if (mem_cgroup_is_root(memcg))
return -EINVAL;
+ pr_info("%s (%d): memory.force_empty is deprecated and will be removed.",
+ current->comm, task_pid_nr(current));
+ pr_cont(" Let us know if you know if it needed in your usecase at");
+ pr_cont(" linux-mm@kvack.org\n");
return mem_cgroup_force_empty(memcg);
}

@@ -6037,6 +6041,7 @@ static struct cftype mem_cgroup_files[] = {
},
{
.name = "force_empty",
+ .flags = CFTYPE_INSANE,
.trigger = mem_cgroup_force_empty_write,
},
{
--
2.0.0.rc0

--
Michal Hocko
SUSE Labs