From: Glauber Costa <glommer-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org>
To: Michal Hocko <mhocko-AlSwsSmVLrQ@public.gmane.org>
Cc: cgroups-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
linux-mm-Bw31MaZKKs3YtjvyW6yDsg@public.gmane.org,
kamezawa.hiroyu-+CUm20s59erQFUHtdCDX3A@public.gmane.org,
Johannes Weiner <hannes-druUgvl0LCNAfugRpC6u6w@public.gmane.org>,
Tejun Heo <tj-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
Subject: Re: [PATCH v2 2/7] memcg: split part of memcg creation to css_online
Date: Fri, 18 Jan 2013 11:28:00 -0800 [thread overview]
Message-ID: <50F9A240.5040808@parallels.com> (raw)
In-Reply-To: <20130118152526.GF10701-2MMpYkNvuYDjFM9bn6wA6Q@public.gmane.org>
On 01/18/2013 07:25 AM, Michal Hocko wrote:
> On Fri 11-01-13 13:45:22, Glauber Costa wrote:
>> Although there is arguably some value in doing this per se, the main
>
> This begs for asking what are the other reasons but I would just leave
> it alone and focus on the code reshuffling.
>
Yes, Sir.
>> goal of this patch is to make room for the locking changes to come.
>>
>> With all the value assignment from parent happening in a context where
>> our iterators can already be used, we can safely lock against value
>> change in some key values like use_hierarchy, without resorting to the
>> cgroup core at all.
>
> Sorry but I do not understand the above. Please be more specific here.
> Why the context matters if it matters at all.
>
> Maybe something like the below?
> "
> mem_cgroup_css_alloc is currently responsible for the complete
> initialization of a newly created memcg. Cgroup core offers another
> stage of initialization - css_online - which is called after the newly
> created group is already linked to the cgroup hierarchy.
> All attributes inheritted from the parent group can be safely moved
> into mem_cgroup_css_online because nobody can see the newly created
> group yet. This has also an advantage that the parent can already see
> the child group (via iterators) by the time we inherit values from it
> so he can do appropriate steps (e.g. don't allow changing use_hierarchy
> etc...).
>
> This patch is a preparatory work for later locking rework to get rid of
> big cgroup lock from memory controller code.
> "
>
Well, I will look into merging some of it, but AFAIK, you are explaining
why is it safe (a good thing to do), while I was focusing on telling our
future readers why is it needed.
I'll try to rewrite for clarity
>
> /*
> * Initialization of attributes which are linked with parent
> * based on use_hierarchy.
> */
>> if (parent && parent->use_hierarchy) {
>
> parent cannot be NULL.
>
indeed.
>> res_counter_init(&memcg->res, &parent->res);
>> res_counter_init(&memcg->memsw, &parent->memsw);
>> @@ -6120,15 +6149,8 @@ mem_cgroup_css_alloc(struct cgroup *cont)
>> if (parent && parent != root_mem_cgroup)
>> mem_cgroup_subsys.broken_hierarchy = true;
>> }
>> - memcg->last_scanned_node = MAX_NUMNODES;
>> - INIT_LIST_HEAD(&memcg->oom_notify);
>>
>> - if (parent)
>> - memcg->swappiness = mem_cgroup_swappiness(parent);
>> - atomic_set(&memcg->refcnt, 1);
>> - memcg->move_charge_at_immigrate = 0;
>> - mutex_init(&memcg->thresholds_lock);
>> - spin_lock_init(&memcg->move_lock);
>> + memcg->swappiness = mem_cgroup_swappiness(parent);
>
> Please move this up to oom_kill_disable and use_hierarchy
> initialization.
>
Yes, Sir!
> /*
> * kmem initialization depends on memcg->res initialization
> * because it relies on parent_mem_cgroup
> */
>> error = memcg_init_kmem(memcg, &mem_cgroup_subsys);
>> if (error) {
>> @@ -6138,12 +6160,8 @@ mem_cgroup_css_alloc(struct cgroup *cont)
>> * call __mem_cgroup_free, so return directly
>> */
>> mem_cgroup_put(memcg);
>
> Hmm, this doesn't release parent for use_hierarchy. The bug is there
> from before this patch. So it should go into a separate patch.
>
Good catch.
WARNING: multiple messages have this Message-ID (diff)
From: Glauber Costa <glommer@parallels.com>
To: Michal Hocko <mhocko@suse.cz>
Cc: cgroups@vger.kernel.org, linux-mm@kvack.org,
kamezawa.hiroyu@jp.fujitsu.com,
Johannes Weiner <hannes@cmpxchg.org>, Tejun Heo <tj@kernel.org>
Subject: Re: [PATCH v2 2/7] memcg: split part of memcg creation to css_online
Date: Fri, 18 Jan 2013 11:28:00 -0800 [thread overview]
Message-ID: <50F9A240.5040808@parallels.com> (raw)
In-Reply-To: <20130118152526.GF10701@dhcp22.suse.cz>
On 01/18/2013 07:25 AM, Michal Hocko wrote:
> On Fri 11-01-13 13:45:22, Glauber Costa wrote:
>> Although there is arguably some value in doing this per se, the main
>
> This begs for asking what are the other reasons but I would just leave
> it alone and focus on the code reshuffling.
>
Yes, Sir.
>> goal of this patch is to make room for the locking changes to come.
>>
>> With all the value assignment from parent happening in a context where
>> our iterators can already be used, we can safely lock against value
>> change in some key values like use_hierarchy, without resorting to the
>> cgroup core at all.
>
> Sorry but I do not understand the above. Please be more specific here.
> Why the context matters if it matters at all.
>
> Maybe something like the below?
> "
> mem_cgroup_css_alloc is currently responsible for the complete
> initialization of a newly created memcg. Cgroup core offers another
> stage of initialization - css_online - which is called after the newly
> created group is already linked to the cgroup hierarchy.
> All attributes inheritted from the parent group can be safely moved
> into mem_cgroup_css_online because nobody can see the newly created
> group yet. This has also an advantage that the parent can already see
> the child group (via iterators) by the time we inherit values from it
> so he can do appropriate steps (e.g. don't allow changing use_hierarchy
> etc...).
>
> This patch is a preparatory work for later locking rework to get rid of
> big cgroup lock from memory controller code.
> "
>
Well, I will look into merging some of it, but AFAIK, you are explaining
why is it safe (a good thing to do), while I was focusing on telling our
future readers why is it needed.
I'll try to rewrite for clarity
>
> /*
> * Initialization of attributes which are linked with parent
> * based on use_hierarchy.
> */
>> if (parent && parent->use_hierarchy) {
>
> parent cannot be NULL.
>
indeed.
>> res_counter_init(&memcg->res, &parent->res);
>> res_counter_init(&memcg->memsw, &parent->memsw);
>> @@ -6120,15 +6149,8 @@ mem_cgroup_css_alloc(struct cgroup *cont)
>> if (parent && parent != root_mem_cgroup)
>> mem_cgroup_subsys.broken_hierarchy = true;
>> }
>> - memcg->last_scanned_node = MAX_NUMNODES;
>> - INIT_LIST_HEAD(&memcg->oom_notify);
>>
>> - if (parent)
>> - memcg->swappiness = mem_cgroup_swappiness(parent);
>> - atomic_set(&memcg->refcnt, 1);
>> - memcg->move_charge_at_immigrate = 0;
>> - mutex_init(&memcg->thresholds_lock);
>> - spin_lock_init(&memcg->move_lock);
>> + memcg->swappiness = mem_cgroup_swappiness(parent);
>
> Please move this up to oom_kill_disable and use_hierarchy
> initialization.
>
Yes, Sir!
> /*
> * kmem initialization depends on memcg->res initialization
> * because it relies on parent_mem_cgroup
> */
>> error = memcg_init_kmem(memcg, &mem_cgroup_subsys);
>> if (error) {
>> @@ -6138,12 +6160,8 @@ mem_cgroup_css_alloc(struct cgroup *cont)
>> * call __mem_cgroup_free, so return directly
>> */
>> mem_cgroup_put(memcg);
>
> Hmm, this doesn't release parent for use_hierarchy. The bug is there
> from before this patch. So it should go into a separate patch.
>
Good catch.
--
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:[~2013-01-18 19:28 UTC|newest]
Thread overview: 41+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-01-11 9:45 [PATCH v2 0/7] replace cgroup_lock with local memcg lock Glauber Costa
2013-01-11 9:45 ` [PATCH v2 1/7] memcg: prevent changes to move_charge_at_immigrate during task attach Glauber Costa
[not found] ` <1357897527-15479-2-git-send-email-glommer-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org>
2013-01-18 14:16 ` Michal Hocko
2013-01-18 14:16 ` Michal Hocko
2013-01-11 9:45 ` [PATCH v2 2/7] memcg: split part of memcg creation to css_online Glauber Costa
2013-01-18 15:25 ` Michal Hocko
[not found] ` <20130118152526.GF10701-2MMpYkNvuYDjFM9bn6wA6Q@public.gmane.org>
2013-01-18 19:28 ` Glauber Costa [this message]
2013-01-18 19:28 ` Glauber Costa
2013-01-21 7:33 ` Glauber Costa
2013-01-21 7:33 ` Glauber Costa
[not found] ` <50FCEF40.8040709-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org>
2013-01-21 8:38 ` Michal Hocko
2013-01-21 8:38 ` Michal Hocko
2013-01-21 8:42 ` Glauber Costa
2013-01-11 9:45 ` [PATCH v2 3/7] memcg: provide online test for memcg Glauber Costa
2013-01-18 15:37 ` Michal Hocko
2013-01-18 15:56 ` Michal Hocko
[not found] ` <20130118155621.GH10701-2MMpYkNvuYDjFM9bn6wA6Q@public.gmane.org>
2013-01-18 19:42 ` Glauber Costa
2013-01-18 19:42 ` Glauber Costa
2013-01-18 19:43 ` Glauber Costa
[not found] ` <20130118153715.GG10701-2MMpYkNvuYDjFM9bn6wA6Q@public.gmane.org>
2013-01-18 19:41 ` Glauber Costa
2013-01-18 19:41 ` Glauber Costa
2013-01-11 9:45 ` [PATCH v2 4/7] memcg: fast hierarchy-aware child test Glauber Costa
[not found] ` <1357897527-15479-5-git-send-email-glommer-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org>
2013-01-18 16:06 ` Michal Hocko
2013-01-18 16:06 ` Michal Hocko
[not found] ` <20130118160610.GI10701-2MMpYkNvuYDjFM9bn6wA6Q@public.gmane.org>
2013-01-21 7:58 ` Glauber Costa
2013-01-21 7:58 ` Glauber Costa
[not found] ` <50FCF539.6070000-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org>
2013-01-21 8:34 ` Michal Hocko
2013-01-21 8:34 ` Michal Hocko
2013-01-21 8:41 ` Glauber Costa
[not found] ` <50FCFF34.9070308-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org>
2013-01-21 9:15 ` Michal Hocko
2013-01-21 9:15 ` Michal Hocko
2013-01-21 9:19 ` Glauber Costa
2013-01-11 9:45 ` [PATCH v2 5/7] May god have mercy on my soul Glauber Costa
[not found] ` <1357897527-15479-6-git-send-email-glommer-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org>
2013-01-18 16:07 ` Michal Hocko
2013-01-18 16:07 ` Michal Hocko
2013-01-11 9:45 ` [PATCH v2 6/7] memcg: replace cgroup_lock with memcg specific memcg_lock Glauber Costa
[not found] ` <1357897527-15479-7-git-send-email-glommer-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org>
2013-01-18 16:21 ` Michal Hocko
2013-01-18 16:21 ` Michal Hocko
2013-01-11 9:45 ` [PATCH v2 7/7] memcg: increment static branch right after limit set Glauber Costa
[not found] ` <1357897527-15479-8-git-send-email-glommer-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org>
2013-01-18 16:23 ` Michal Hocko
2013-01-18 16:23 ` Michal Hocko
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=50F9A240.5040808@parallels.com \
--to=glommer-bzqdu9zft3wakbo8gow8eq@public.gmane.org \
--cc=cgroups-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=hannes-druUgvl0LCNAfugRpC6u6w@public.gmane.org \
--cc=kamezawa.hiroyu-+CUm20s59erQFUHtdCDX3A@public.gmane.org \
--cc=linux-mm-Bw31MaZKKs3YtjvyW6yDsg@public.gmane.org \
--cc=mhocko-AlSwsSmVLrQ@public.gmane.org \
--cc=tj-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.