All of lore.kernel.org
 help / color / mirror / Atom feed
From: Glauber Costa <glommer-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org>
To: Michal Hocko <mhocko-AlSwsSmVLrQ@public.gmane.org>
Cc: Li Zefan <lizefan-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>,
	linux-mm-Bw31MaZKKs3YtjvyW6yDsg@public.gmane.org,
	LKML <linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
	Cgroups <cgroups-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
	Tejun Heo <tj-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>,
	KAMEZAWA Hiroyuki
	<kamezawa.hiroyu-+CUm20s59erQFUHtdCDX3A@public.gmane.org>,
	Johannes Weiner <hannes-druUgvl0LCNAfugRpC6u6w@public.gmane.org>
Subject: Re: [RFC][PATCH 2/7] memcg: don't use mem_cgroup_get() when creating a kmemcg cache
Date: Fri, 5 Apr 2013 14:28:12 +0400	[thread overview]
Message-ID: <515EA73C.8050602@parallels.com> (raw)
In-Reply-To: <20130403153133.GM16471-2MMpYkNvuYDjFM9bn6wA6Q@public.gmane.org>

On 04/03/2013 07:31 PM, Michal Hocko wrote:
> On Wed 03-04-13 17:12:21, Li Zefan wrote:
>> Use css_get()/css_put() instead of mem_cgroup_get()/mem_cgroup_put().
>>
>> Signed-off-by: Li Zefan <lizefan-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>
>> ---
>>  mm/memcontrol.c | 10 +++++-----
>>  1 file changed, 5 insertions(+), 5 deletions(-)
>>
>> diff --git a/mm/memcontrol.c b/mm/memcontrol.c
>> index 43ca91d..dafacb8 100644
>> --- a/mm/memcontrol.c
>> +++ b/mm/memcontrol.c
>> @@ -3191,7 +3191,7 @@ void memcg_release_cache(struct kmem_cache *s)
>>  	list_del(&s->memcg_params->list);
>>  	mutex_unlock(&memcg->slab_caches_mutex);
>>  
>> -	mem_cgroup_put(memcg);
>> +	css_put(&memcg->css);
>>  out:
>>  	kfree(s->memcg_params);
>>  }
>> @@ -3350,16 +3350,18 @@ static struct kmem_cache *memcg_create_kmem_cache(struct mem_cgroup *memcg,
>>  
>>  	mutex_lock(&memcg_cache_mutex);
>>  	new_cachep = cachep->memcg_params->memcg_caches[idx];
>> -	if (new_cachep)
>> +	if (new_cachep) {
>> +		css_put(&memcg->css);
>>  		goto out;
>> +	}
>>  
>>  	new_cachep = kmem_cache_dup(memcg, cachep);
>>  	if (new_cachep == NULL) {
>>  		new_cachep = cachep;
>> +		css_put(&memcg->css);
>>  		goto out;
>>  	}
>>  
>> -	mem_cgroup_get(memcg);
>>  	atomic_set(&new_cachep->memcg_params->nr_pages , 0);
>>  
>>  	cachep->memcg_params->memcg_caches[idx] = new_cachep;
>> @@ -3449,8 +3451,6 @@ static void memcg_create_cache_work_func(struct work_struct *w)
>>  
>>  	cw = container_of(w, struct create_work, work);
>>  	memcg_create_kmem_cache(cw->memcg, cw->cachep);
>> -	/* Drop the reference gotten when we enqueued. */
>> -	css_put(&cw->memcg->css);
>>  	kfree(cw);
>>  }
> 
> You are putting references but I do not see any single css_{try}get
> here. /me puzzled.
> 

There are two things being done in this code:
First, we acquired a css_ref to make sure that the underlying cgroup
would not go away. That is a short lived reference, and it is put as
soon as the cache is created.
At this point, we acquire a long-lived per-cache memcg reference count
to guarantee that the memcg will still be alive.

so it is:

enqueue: css_get
create : memcg_get, css_put
destroy: css_put

If I understand Li's patch correctly, he is not touching the first
css_get, only turning that into the long lived reference (which was not
possible before, since that would prevent rmdir).

Then he only needs to get rid of the memcg_get, change the memcg_put to
css_put, and get rid of the now extra css_put.

He is issuing extra css_puts in memcg_create_kmem_cache, but only in
failure paths. So the code reads as:
* css_get on enqueue (already done, so not shown in patch)
* if it fails, css_put
* if it succeeds, don't do anything. This is already the long-lived
reference count. put it at release time.

The code looks correct, and of course, extremely simpler due to the
use of a single reference.

Li, am I right in my understanding that this is your intention?

WARNING: multiple messages have this Message-ID (diff)
From: Glauber Costa <glommer@parallels.com>
To: Michal Hocko <mhocko@suse.cz>
Cc: Li Zefan <lizefan@huawei.com>,
	linux-mm@kvack.org, LKML <linux-kernel@vger.kernel.org>,
	Cgroups <cgroups@vger.kernel.org>, Tejun Heo <tj@kernel.org>,
	KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>,
	Johannes Weiner <hannes@cmpxchg.org>
Subject: Re: [RFC][PATCH 2/7] memcg: don't use mem_cgroup_get() when creating a kmemcg cache
Date: Fri, 5 Apr 2013 14:28:12 +0400	[thread overview]
Message-ID: <515EA73C.8050602@parallels.com> (raw)
In-Reply-To: <20130403153133.GM16471@dhcp22.suse.cz>

On 04/03/2013 07:31 PM, Michal Hocko wrote:
> On Wed 03-04-13 17:12:21, Li Zefan wrote:
>> Use css_get()/css_put() instead of mem_cgroup_get()/mem_cgroup_put().
>>
>> Signed-off-by: Li Zefan <lizefan@huawei.com>
>> ---
>>  mm/memcontrol.c | 10 +++++-----
>>  1 file changed, 5 insertions(+), 5 deletions(-)
>>
>> diff --git a/mm/memcontrol.c b/mm/memcontrol.c
>> index 43ca91d..dafacb8 100644
>> --- a/mm/memcontrol.c
>> +++ b/mm/memcontrol.c
>> @@ -3191,7 +3191,7 @@ void memcg_release_cache(struct kmem_cache *s)
>>  	list_del(&s->memcg_params->list);
>>  	mutex_unlock(&memcg->slab_caches_mutex);
>>  
>> -	mem_cgroup_put(memcg);
>> +	css_put(&memcg->css);
>>  out:
>>  	kfree(s->memcg_params);
>>  }
>> @@ -3350,16 +3350,18 @@ static struct kmem_cache *memcg_create_kmem_cache(struct mem_cgroup *memcg,
>>  
>>  	mutex_lock(&memcg_cache_mutex);
>>  	new_cachep = cachep->memcg_params->memcg_caches[idx];
>> -	if (new_cachep)
>> +	if (new_cachep) {
>> +		css_put(&memcg->css);
>>  		goto out;
>> +	}
>>  
>>  	new_cachep = kmem_cache_dup(memcg, cachep);
>>  	if (new_cachep == NULL) {
>>  		new_cachep = cachep;
>> +		css_put(&memcg->css);
>>  		goto out;
>>  	}
>>  
>> -	mem_cgroup_get(memcg);
>>  	atomic_set(&new_cachep->memcg_params->nr_pages , 0);
>>  
>>  	cachep->memcg_params->memcg_caches[idx] = new_cachep;
>> @@ -3449,8 +3451,6 @@ static void memcg_create_cache_work_func(struct work_struct *w)
>>  
>>  	cw = container_of(w, struct create_work, work);
>>  	memcg_create_kmem_cache(cw->memcg, cw->cachep);
>> -	/* Drop the reference gotten when we enqueued. */
>> -	css_put(&cw->memcg->css);
>>  	kfree(cw);
>>  }
> 
> You are putting references but I do not see any single css_{try}get
> here. /me puzzled.
> 

There are two things being done in this code:
First, we acquired a css_ref to make sure that the underlying cgroup
would not go away. That is a short lived reference, and it is put as
soon as the cache is created.
At this point, we acquire a long-lived per-cache memcg reference count
to guarantee that the memcg will still be alive.

so it is:

enqueue: css_get
create : memcg_get, css_put
destroy: css_put

If I understand Li's patch correctly, he is not touching the first
css_get, only turning that into the long lived reference (which was not
possible before, since that would prevent rmdir).

Then he only needs to get rid of the memcg_get, change the memcg_put to
css_put, and get rid of the now extra css_put.

He is issuing extra css_puts in memcg_create_kmem_cache, but only in
failure paths. So the code reads as:
* css_get on enqueue (already done, so not shown in patch)
* if it fails, css_put
* if it succeeds, don't do anything. This is already the long-lived
reference count. put it at release time.

The code looks correct, and of course, extremely simpler due to the
use of a single reference.

Li, am I right in my understanding that this is your intention?

--
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>

WARNING: multiple messages have this Message-ID (diff)
From: Glauber Costa <glommer@parallels.com>
To: Michal Hocko <mhocko@suse.cz>
Cc: Li Zefan <lizefan@huawei.com>, <linux-mm@kvack.org>,
	LKML <linux-kernel@vger.kernel.org>,
	Cgroups <cgroups@vger.kernel.org>, Tejun Heo <tj@kernel.org>,
	KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>,
	Johannes Weiner <hannes@cmpxchg.org>
Subject: Re: [RFC][PATCH 2/7] memcg: don't use mem_cgroup_get() when creating a kmemcg cache
Date: Fri, 5 Apr 2013 14:28:12 +0400	[thread overview]
Message-ID: <515EA73C.8050602@parallels.com> (raw)
In-Reply-To: <20130403153133.GM16471@dhcp22.suse.cz>

On 04/03/2013 07:31 PM, Michal Hocko wrote:
> On Wed 03-04-13 17:12:21, Li Zefan wrote:
>> Use css_get()/css_put() instead of mem_cgroup_get()/mem_cgroup_put().
>>
>> Signed-off-by: Li Zefan <lizefan@huawei.com>
>> ---
>>  mm/memcontrol.c | 10 +++++-----
>>  1 file changed, 5 insertions(+), 5 deletions(-)
>>
>> diff --git a/mm/memcontrol.c b/mm/memcontrol.c
>> index 43ca91d..dafacb8 100644
>> --- a/mm/memcontrol.c
>> +++ b/mm/memcontrol.c
>> @@ -3191,7 +3191,7 @@ void memcg_release_cache(struct kmem_cache *s)
>>  	list_del(&s->memcg_params->list);
>>  	mutex_unlock(&memcg->slab_caches_mutex);
>>  
>> -	mem_cgroup_put(memcg);
>> +	css_put(&memcg->css);
>>  out:
>>  	kfree(s->memcg_params);
>>  }
>> @@ -3350,16 +3350,18 @@ static struct kmem_cache *memcg_create_kmem_cache(struct mem_cgroup *memcg,
>>  
>>  	mutex_lock(&memcg_cache_mutex);
>>  	new_cachep = cachep->memcg_params->memcg_caches[idx];
>> -	if (new_cachep)
>> +	if (new_cachep) {
>> +		css_put(&memcg->css);
>>  		goto out;
>> +	}
>>  
>>  	new_cachep = kmem_cache_dup(memcg, cachep);
>>  	if (new_cachep == NULL) {
>>  		new_cachep = cachep;
>> +		css_put(&memcg->css);
>>  		goto out;
>>  	}
>>  
>> -	mem_cgroup_get(memcg);
>>  	atomic_set(&new_cachep->memcg_params->nr_pages , 0);
>>  
>>  	cachep->memcg_params->memcg_caches[idx] = new_cachep;
>> @@ -3449,8 +3451,6 @@ static void memcg_create_cache_work_func(struct work_struct *w)
>>  
>>  	cw = container_of(w, struct create_work, work);
>>  	memcg_create_kmem_cache(cw->memcg, cw->cachep);
>> -	/* Drop the reference gotten when we enqueued. */
>> -	css_put(&cw->memcg->css);
>>  	kfree(cw);
>>  }
> 
> You are putting references but I do not see any single css_{try}get
> here. /me puzzled.
> 

There are two things being done in this code:
First, we acquired a css_ref to make sure that the underlying cgroup
would not go away. That is a short lived reference, and it is put as
soon as the cache is created.
At this point, we acquire a long-lived per-cache memcg reference count
to guarantee that the memcg will still be alive.

so it is:

enqueue: css_get
create : memcg_get, css_put
destroy: css_put

If I understand Li's patch correctly, he is not touching the first
css_get, only turning that into the long lived reference (which was not
possible before, since that would prevent rmdir).

Then he only needs to get rid of the memcg_get, change the memcg_put to
css_put, and get rid of the now extra css_put.

He is issuing extra css_puts in memcg_create_kmem_cache, but only in
failure paths. So the code reads as:
* css_get on enqueue (already done, so not shown in patch)
* if it fails, css_put
* if it succeeds, don't do anything. This is already the long-lived
reference count. put it at release time.

The code looks correct, and of course, extremely simpler due to the
use of a single reference.

Li, am I right in my understanding that this is your intention?


  parent reply	other threads:[~2013-04-05 10:28 UTC|newest]

Thread overview: 120+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-04-03  9:11 [RFC][PATCH 0/7] memcg: make memcg's life cycle the same as cgroup Li Zefan
2013-04-03  9:11 ` Li Zefan
2013-04-03  9:11 ` [RFC][PATCH 1/7] memcg: use css_get in sock_update_memcg() Li Zefan
2013-04-03  9:11   ` Li Zefan
2013-04-03 12:58   ` Glauber Costa
2013-04-03 12:58     ` Glauber Costa
2013-04-03 15:29     ` Michal Hocko
2013-04-03 15:29       ` Michal Hocko
     [not found]       ` <20130403152934.GL16471-2MMpYkNvuYDjFM9bn6wA6Q@public.gmane.org>
2013-04-05  8:08         ` Glauber Costa
2013-04-05  8:08           ` Glauber Costa
2013-04-05  8:08           ` Glauber Costa
2013-04-05 13:38           ` Michal Hocko
2013-04-05 13:38             ` Michal Hocko
     [not found]             ` <20130405133815.GE31132-2MMpYkNvuYDjFM9bn6wA6Q@public.gmane.org>
2013-04-05 13:42               ` Glauber Costa
2013-04-05 13:42                 ` Glauber Costa
2013-04-05 13:42                 ` Glauber Costa
     [not found]   ` <515BF249.50607-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>
2013-04-05  5:01     ` Kamezawa Hiroyuki
2013-04-05  5:01       ` Kamezawa Hiroyuki
2013-04-05  5:01       ` Kamezawa Hiroyuki
2013-04-05 13:39     ` Michal Hocko
2013-04-05 13:39       ` Michal Hocko
2013-04-05 13:39       ` Michal Hocko
2013-04-03  9:12 ` [RFC][PATCH 2/7] memcg: don't use mem_cgroup_get() when creating a kmemcg cache Li Zefan
2013-04-03  9:12   ` Li Zefan
2013-04-03 13:05   ` Glauber Costa
2013-04-03 13:05     ` Glauber Costa
2013-04-03 15:31   ` Michal Hocko
2013-04-03 15:31     ` Michal Hocko
     [not found]     ` <20130403153133.GM16471-2MMpYkNvuYDjFM9bn6wA6Q@public.gmane.org>
2013-04-05 10:28       ` Glauber Costa [this message]
2013-04-05 10:28         ` Glauber Costa
2013-04-05 10:28         ` Glauber Costa
2013-04-05 13:45         ` Michal Hocko
2013-04-05 13:45           ` Michal Hocko
     [not found]           ` <20130405134557.GG31132-2MMpYkNvuYDjFM9bn6wA6Q@public.gmane.org>
2013-04-07  3:32             ` Li Zefan
2013-04-07  3:32               ` Li Zefan
2013-04-07  3:32               ` Li Zefan
     [not found]   ` <515BF275.5080408-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>
2013-04-05  5:51     ` Kamezawa Hiroyuki
2013-04-05  5:51       ` Kamezawa Hiroyuki
2013-04-05  5:51       ` Kamezawa Hiroyuki
2013-04-05 13:46       ` Michal Hocko
2013-04-05 13:46         ` Michal Hocko
2013-04-03  9:12 ` [RFC][PATCH 3/7] memcg: use css_get/put when charging/uncharging kmem Li Zefan
2013-04-03  9:12   ` Li Zefan
     [not found]   ` <515BF284.7060401-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>
2013-04-04  9:43     ` Michal Hocko
2013-04-04  9:43       ` Michal Hocko
2013-04-04  9:43       ` Michal Hocko
2013-04-05 10:19       ` Glauber Costa
2013-04-05 10:19         ` Glauber Costa
2013-04-05 10:19         ` Glauber Costa
     [not found]         ` <515EA532.4050706-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org>
2013-04-05 13:48           ` Michal Hocko
2013-04-05 13:48             ` Michal Hocko
2013-04-05 13:48             ` Michal Hocko
2013-04-05 10:19     ` Glauber Costa
2013-04-05 10:19       ` Glauber Costa
2013-04-05 10:19       ` Glauber Costa
2013-04-03  9:12 ` [RFC][PATCH 4/7] memcg: use css_get/put for swap memcg Li Zefan
2013-04-03  9:12   ` Li Zefan
2013-04-04 11:25   ` Michal Hocko
2013-04-04 11:25     ` Michal Hocko
2013-04-05  5:56   ` Kamezawa Hiroyuki
2013-04-05  5:56     ` Kamezawa Hiroyuki
2013-04-03  9:13 ` [RFC][PATCH 5/7] cgroup: make sure parent won't be destroyed before its children Li Zefan
2013-04-03  9:13   ` Li Zefan
     [not found]   ` <515BF2A4.1070703-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>
2013-04-04 11:37     ` Michal Hocko
2013-04-04 11:37       ` Michal Hocko
2013-04-04 11:37       ` Michal Hocko
     [not found]       ` <20130404113750.GH29911-2MMpYkNvuYDjFM9bn6wA6Q@public.gmane.org>
2013-04-04 13:53         ` Tejun Heo
2013-04-04 13:53           ` Tejun Heo
2013-04-04 13:53           ` Tejun Heo
2013-04-04 15:20           ` Michal Hocko
2013-04-04 15:20             ` Michal Hocko
     [not found]             ` <20130404152028.GK29911-2MMpYkNvuYDjFM9bn6wA6Q@public.gmane.org>
2013-04-04 15:22               ` Tejun Heo
2013-04-04 15:22                 ` Tejun Heo
2013-04-04 15:22                 ` Tejun Heo
2013-04-04 15:30                 ` Michal Hocko
2013-04-04 15:30                   ` Michal Hocko
     [not found]                 ` <20130404152213.GL9425-Gd/HAXX7CRxy/B6EtB590w@public.gmane.org>
2013-04-05  8:10                   ` Glauber Costa
2013-04-05  8:10                     ` Glauber Costa
2013-04-05  8:10                     ` Glauber Costa
2013-04-04 15:31   ` Michal Hocko
2013-04-04 15:31     ` Michal Hocko
2013-04-05  5:58   ` Kamezawa Hiroyuki
2013-04-05  5:58     ` Kamezawa Hiroyuki
2013-04-03  9:13 ` [RFC][PATCH 6/7] memcg: don't need to get a reference to the parent Li Zefan
2013-04-03  9:13   ` Li Zefan
     [not found]   ` <515BF2B1.9060909-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>
2013-04-04 15:34     ` Michal Hocko
2013-04-04 15:34       ` Michal Hocko
2013-04-04 15:34       ` Michal Hocko
2013-04-05  9:22     ` Kamezawa Hiroyuki
2013-04-05  9:22       ` Kamezawa Hiroyuki
2013-04-05  9:22       ` Kamezawa Hiroyuki
2013-04-03  9:14 ` [RFC][PATCH 7/7] memcg: kill memcg refcnt Li Zefan
2013-04-03  9:14   ` Li Zefan
     [not found]   ` <515BF2E3.4000605-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>
2013-04-04 15:35     ` Michal Hocko
2013-04-04 15:35       ` Michal Hocko
2013-04-04 15:35       ` Michal Hocko
2013-04-05  9:24     ` Kamezawa Hiroyuki
2013-04-05  9:24       ` Kamezawa Hiroyuki
2013-04-05  9:24       ` Kamezawa Hiroyuki
2013-04-03  9:19 ` [RFC][PATCH 0/7] memcg: make memcg's life cycle the same as cgroup Glauber Costa
2013-04-03  9:19   ` Glauber Costa
     [not found] ` <515BF233.6070308-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>
2013-04-03 21:43   ` Tejun Heo
2013-04-03 21:43     ` Tejun Heo
2013-04-03 21:43     ` Tejun Heo
2013-04-04 12:00   ` Michal Hocko
2013-04-04 12:00     ` Michal Hocko
2013-04-04 12:00     ` Michal Hocko
2013-04-07  6:00     ` Li Zefan
2013-04-07  6:00       ` Li Zefan
     [not found]       ` <51610B78.7080001-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>
2013-04-07 20:21         ` Michal Hocko
2013-04-07 20:21           ` Michal Hocko
2013-04-07 20:21           ` Michal Hocko
2013-04-07  8:44   ` Li Zefan
2013-04-07  8:44     ` Li Zefan
2013-04-07  8:44     ` Li Zefan
2013-04-07 19:51     ` Michal Hocko
2013-04-07 19:51       ` Michal Hocko
     [not found]     ` <516131D7.8030004-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>
2013-04-08  7:18       ` Glauber Costa
2013-04-08  7:18         ` Glauber Costa
2013-04-08  7:18         ` 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=515EA73C.8050602@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-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=linux-mm-Bw31MaZKKs3YtjvyW6yDsg@public.gmane.org \
    --cc=lizefan-hv44wF8Li93QT0dZR+AlfA@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.