From: Glauber Costa <glommer@parallels.com>
To: cgroups@vger.kernel.org
Cc: linux-mm@kvack.org, Tejun Heo <tj@kernel.org>,
kamezawa.hiroyu@jp.fujitsu.com,
Johannes Weiner <hannes@cmpxchg.org>,
Michal Hocko <mhocko@suse.cz>
Subject: [PATCH 0/4] replace cgroup_lock with local lock in memcg
Date: Fri, 30 Nov 2012 17:31:22 +0400 [thread overview]
Message-ID: <1354282286-32278-1-git-send-email-glommer@parallels.com> (raw)
Hi,
In memcg, we use the cgroup_lock basically to synchronize against two events:
attaching tasks and children to a cgroup.
For the problem of attaching tasks, I am using something similar to cpusets:
when task attaching starts, we will flip a flag "attach_in_progress", that will
be flipped down when it finishes. This way, all readers can know that a task is
joining the group and take action accordingly. With this, we can guarantee that
the behavior of move_charge_at_immigrate continues safe
Protecting against children creation requires a bit more work. For those, the
calls to cgroup_lock() all live in handlers like mem_cgroup_hierarchy_write(),
where we change a tunable in the group, that is hierarchy-related. For
instance, the use_hierarchy flag cannot be changed if the cgroup already have
children.
Furthermore, those values are propageted from the parent to the child when a
new child is created. So if we don't lock like this, we can end up with the
following situation:
A B
memcg_css_alloc() mem_cgroup_hierarchy_write()
copy use hierarchy from parent change use hierarchy in parent
finish creation.
This is mainly because during create, we are still not fully connected to the
css tree. So all iterators and the such that we could use, will fail to show
that the group has children.
My observation is that all of creation can proceed in parallel with those
tasks, except value assignment. So what this patchseries does is to first move
all value assignment that is dependent on parent values from css_alloc to
css_online, where the iterators all work, and then we lock only the value
assignment. This will guarantee that parent and children always have
consistent values.
Glauber Costa (4):
cgroup: warn about broken hierarchies only after css_online
memcg: prevent changes to move_charge_at_immigrate during task attach
memcg: split part of memcg creation to css_online
memcg: replace cgroup_lock with memcg specific memcg_lock
kernel/cgroup.c | 18 +++----
mm/memcontrol.c | 164 +++++++++++++++++++++++++++++++++++++++++---------------
2 files changed, 129 insertions(+), 53 deletions(-)
--
1.7.11.7
--
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 reply other threads:[~2012-11-30 13:31 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-11-30 13:31 Glauber Costa [this message]
2012-11-30 13:31 ` [PATCH 1/4] cgroup: warn about broken hierarchies only after css_online Glauber Costa
2012-11-30 15:11 ` Tejun Heo
2012-11-30 15:13 ` Glauber Costa
2012-11-30 15:45 ` Tejun Heo
2012-11-30 15:49 ` Michal Hocko
2012-11-30 15:57 ` Glauber Costa
2012-11-30 13:31 ` [PATCH 2/4] memcg: prevent changes to move_charge_at_immigrate during task attach Glauber Costa
2012-11-30 15:19 ` Tejun Heo
2012-11-30 15:29 ` Glauber Costa
2012-12-04 9:29 ` Michal Hocko
2012-11-30 13:31 ` [PATCH 3/4] memcg: split part of memcg creation to css_online Glauber Costa
2012-12-03 17:32 ` Michal Hocko
2012-12-04 8:05 ` Glauber Costa
2012-12-04 8:17 ` Michal Hocko
2012-12-04 8:32 ` Glauber Costa
2012-12-04 8:52 ` Michal Hocko
2012-11-30 13:31 ` [PATCH 4/4] memcg: replace cgroup_lock with memcg specific memcg_lock Glauber Costa
2012-12-03 17:15 ` Michal Hocko
2012-12-03 17:30 ` Michal Hocko
2012-12-04 7:49 ` Glauber Costa
2012-12-04 7:58 ` Glauber Costa
2012-12-04 8:23 ` Michal Hocko
2012-12-04 8:31 ` Glauber Costa
2012-12-04 8:45 ` Michal Hocko
2012-12-04 14:52 ` Tejun Heo
2012-12-04 15:14 ` Michal Hocko
2012-12-04 15:22 ` Tejun Heo
2012-12-05 14:35 ` Michal Hocko
2012-12-05 14:41 ` Tejun Heo
2012-11-30 15:52 ` [PATCH 0/4] replace cgroup_lock with local lock in memcg Tejun Heo
2012-11-30 15:59 ` Glauber Costa
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=1354282286-32278-1-git-send-email-glommer@parallels.com \
--to=glommer@parallels.com \
--cc=cgroups@vger.kernel.org \
--cc=hannes@cmpxchg.org \
--cc=kamezawa.hiroyu@jp.fujitsu.com \
--cc=linux-mm@kvack.org \
--cc=mhocko@suse.cz \
--cc=tj@kernel.org \
/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