All of lore.kernel.org
 help / color / mirror / Atom feed
From: Michal Hocko <mhocko@suse.cz>
To: Glauber Costa <glommer@parallels.com>
Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org,
	cgroups@vger.kernel.org, devel@openvz.org,
	Johannes Weiner <hannes@cmpxchg.org>,
	Andrew Morton <akpm@linux-foundation.org>,
	kamezawa.hiroyu@jp.fujitsu.com, Christoph Lameter <cl@linux.com>,
	David Rientjes <rientjes@google.com>,
	Pekka Enberg <penberg@kernel.org>,
	Pekka Enberg <penberg@cs.helsinki.fi>,
	Suleiman Souhlal <suleiman@google.com>
Subject: Re: [PATCH v2 09/11] memcg: propagate kmem limiting information to children
Date: Fri, 17 Aug 2012 11:00:06 +0200	[thread overview]
Message-ID: <20120817090005.GC18600@dhcp22.suse.cz> (raw)
In-Reply-To: <1344517279-30646-10-git-send-email-glommer@parallels.com>

On Thu 09-08-12 17:01:17, Glauber Costa wrote:
> The current memcg slab cache management fails to present satisfatory
> hierarchical behavior in the following scenario:
> 
> -> /cgroups/memory/A/B/C
> 
> * kmem limit set at A,
> * A and B have no tasks,
> * span a new task in in C.
> 
> Because kmem_accounted is a boolean that was not set for C, no
> accounting would be done. This is, however, not what we expect.
> 
> The basic idea, is that when a cgroup is limited, we walk the tree
> upwards 

Isn't it rather downwards? We start at A and then mark all children so
we go down the tree. Moreover the walk is not atomic wrt. parallel
charges nor to a new child creation. First one seems to be acceptable
as the charges go to the root. The second one requires cgroup_lock.

It also seems that you are missing memcg_kmem_account_parent in
mem_cgroup_create (use_hierarchy path) if memcg_kmem_is_accounted(parent).

Some further "wording" comments below. Other than that the patch looks
correct.

> (something Kame and I already thought about doing for other
> purposes), and make sure that we store the information about the parent
> being limited in kmem_accounted (that is turned into a bitmap: two
> booleans would not be space efficient). 

Two booleans even don't serve the purpose because you want to test this
atomically, right?

> The code for that is taken from sched/core.c. My reasons for not
> putting it into a common place is to dodge the type issues that would
> arise from a common implementation between memcg and the scheduler -
> but I think that it should ultimately happen, so if you want me to do
> it now, let me know.

Is this really relevant for the patch?

> We do the reverse operation when a formerly limited cgroup becomes
> unlimited.
> 
> Signed-off-by: Glauber Costa <glommer@parallels.com>
> CC: Christoph Lameter <cl@linux.com>
> CC: Pekka Enberg <penberg@cs.helsinki.fi>
> CC: Michal Hocko <mhocko@suse.cz>
> CC: Kamezawa Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
> CC: Johannes Weiner <hannes@cmpxchg.org>
> CC: Suleiman Souhlal <suleiman@google.com>
> ---
>  mm/memcontrol.c | 88 +++++++++++++++++++++++++++++++++++++++++++++++++++------
>  1 file changed, 79 insertions(+), 9 deletions(-)
> 
> diff --git a/mm/memcontrol.c b/mm/memcontrol.c
> index 3216292..3d30b79 100644
> --- a/mm/memcontrol.c
> +++ b/mm/memcontrol.c
> @@ -295,7 +295,8 @@ struct mem_cgroup {
>  	 * Should the accounting and control be hierarchical, per subtree?
>  	 */
>  	bool use_hierarchy;
> -	bool kmem_accounted;
> +
> +	unsigned long kmem_accounted; /* See KMEM_ACCOUNTED_*, below */
>  
>  	bool		oom_lock;
>  	atomic_t	under_oom;
> @@ -348,6 +349,38 @@ struct mem_cgroup {
>  #endif
>  };
>  
> +enum {
> +	KMEM_ACCOUNTED_THIS, /* accounted by this cgroup itself */
> +	KMEM_ACCOUNTED_PARENT, /* accounted by any of its parents. */

How it can be accounted by its parent, the charge doesn't go downwards.
Shouldn't it rather be /* a parent is accounted */

> +};
> +
> +#ifdef CONFIG_MEMCG_KMEM
> +static bool memcg_kmem_account(struct mem_cgroup *memcg)

memcg_kmem_set_account? It matches _clear_ counterpart and it makes
obvious that the value is changed actually.

[...]
> +static bool memcg_kmem_is_accounted(struct mem_cgroup *memcg)
> +{
> +	return test_bit(KMEM_ACCOUNTED_THIS, &memcg->kmem_accounted);
> +}
> +
> +static void memcg_kmem_account_parent(struct mem_cgroup *memcg)

same here _set_parent

[...]
> @@ -614,7 +647,7 @@ EXPORT_SYMBOL(__memcg_kmem_free_page);
>  
>  static void disarm_kmem_keys(struct mem_cgroup *memcg)
>  {
> -	if (memcg->kmem_accounted)
> +	if (test_bit(KMEM_ACCOUNTED_THIS, &memcg->kmem_accounted))

memcg_kmem_is_accounted. I do not see any reason to open code this.

>  		static_key_slow_dec(&memcg_kmem_enabled_key);
>  }
>  #else
> @@ -4171,17 +4204,54 @@ static ssize_t mem_cgroup_read(struct cgroup *cont, struct cftype *cft,
>  static void memcg_update_kmem_limit(struct mem_cgroup *memcg, u64 val)
>  {
>  #ifdef CONFIG_MEMCG_KMEM
> -	/*
> -	 * Once enabled, can't be disabled. We could in theory disable it if we
> -	 * haven't yet created any caches, or if we can shrink them all to
> -	 * death. But it is not worth the trouble.
> -	 */
> +	struct mem_cgroup *iter;
> +
>  	mutex_lock(&set_limit_mutex);
> -	if (!memcg->kmem_accounted && val != RESOURCE_MAX) {
> +	if ((val != RESOURCE_MAX) && memcg_kmem_account(memcg)) {
> +
> +		/*
> +		 * Once enabled, can't be disabled. We could in theory disable
> +		 * it if we haven't yet created any caches, or if we can shrink
> +		 * them all to death. But it is not worth the trouble
> +		 */
>  		static_key_slow_inc(&memcg_kmem_enabled_key);
> -		memcg->kmem_accounted = true;
> +
> +		if (!memcg->use_hierarchy)
> +			goto out;
> +
> +		for_each_mem_cgroup_tree(iter, memcg) {

for_each_mem_cgroup_tree does respect use_hierarchy so the above
shortcut is not necessary. Dunno but IMHO we should get rid of explicit
tests as much as possible. This doesn't look like a hot path anyway.

> +			if (iter == memcg)
> +				continue;
> +			memcg_kmem_account_parent(iter);
> +		}
> +	} else if ((val == RESOURCE_MAX) && memcg_kmem_clear_account(memcg)) {

Above you said "Once enabled, can't be disabled." and now you can
disable it? Say you are a leaf group with non accounted parents. This
will clear the flag and so no further accounting is done. Shouldn't
unlimited mean that we will never reach the limit? Or am I missing
something?

> +
> +		if (!memcg->use_hierarchy)
> +			goto out;
> +
> +		for_each_mem_cgroup_tree(iter, memcg) {
> +			struct mem_cgroup *parent;
> +
> +			if (iter == memcg)
> +				continue;
> +			/*
> +			 * We should only have our parent bit cleared if none
> +			 * of our parents are accounted. The transversal order
> +			 * of our iter function forces us to always look at the
> +			 * parents.
> +			 */
> +			parent = parent_mem_cgroup(iter);
> +			for (; parent != memcg; parent = parent_mem_cgroup(iter))
> +				if (memcg_kmem_is_accounted(parent))
> +					goto noclear;
> +			memcg_kmem_clear_account_parent(iter);

Brain hurts...
Yes we are iterating in the creation ordering so we cannot rely on the
first encountered accounted memcg
A(a) - B - D
     - C (a) - E


> +noclear:
> +			continue;
> +		}
>  	}
> +out:
>  	mutex_unlock(&set_limit_mutex);
> +
>  #endif
>  }
>  
> -- 
> 1.7.11.2
> 
> --
> To unsubscribe from this list: send the line "unsubscribe cgroups" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

-- 
Michal Hocko
SUSE Labs

--
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: Michal Hocko <mhocko@suse.cz>
To: Glauber Costa <glommer@parallels.com>
Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org,
	cgroups@vger.kernel.org, devel@openvz.org,
	Johannes Weiner <hannes@cmpxchg.org>,
	Andrew Morton <akpm@linux-foundation.org>,
	kamezawa.hiroyu@jp.fujitsu.com, Christoph Lameter <cl@linux.com>,
	David Rientjes <rientjes@google.com>,
	Pekka Enberg <penberg@kernel.org>,
	Pekka Enberg <penberg@cs.helsinki.fi>,
	Suleiman Souhlal <suleiman@google.com>
Subject: Re: [PATCH v2 09/11] memcg: propagate kmem limiting information to children
Date: Fri, 17 Aug 2012 11:00:06 +0200	[thread overview]
Message-ID: <20120817090005.GC18600@dhcp22.suse.cz> (raw)
In-Reply-To: <1344517279-30646-10-git-send-email-glommer@parallels.com>

On Thu 09-08-12 17:01:17, Glauber Costa wrote:
> The current memcg slab cache management fails to present satisfatory
> hierarchical behavior in the following scenario:
> 
> -> /cgroups/memory/A/B/C
> 
> * kmem limit set at A,
> * A and B have no tasks,
> * span a new task in in C.
> 
> Because kmem_accounted is a boolean that was not set for C, no
> accounting would be done. This is, however, not what we expect.
> 
> The basic idea, is that when a cgroup is limited, we walk the tree
> upwards 

Isn't it rather downwards? We start at A and then mark all children so
we go down the tree. Moreover the walk is not atomic wrt. parallel
charges nor to a new child creation. First one seems to be acceptable
as the charges go to the root. The second one requires cgroup_lock.

It also seems that you are missing memcg_kmem_account_parent in
mem_cgroup_create (use_hierarchy path) if memcg_kmem_is_accounted(parent).

Some further "wording" comments below. Other than that the patch looks
correct.

> (something Kame and I already thought about doing for other
> purposes), and make sure that we store the information about the parent
> being limited in kmem_accounted (that is turned into a bitmap: two
> booleans would not be space efficient). 

Two booleans even don't serve the purpose because you want to test this
atomically, right?

> The code for that is taken from sched/core.c. My reasons for not
> putting it into a common place is to dodge the type issues that would
> arise from a common implementation between memcg and the scheduler -
> but I think that it should ultimately happen, so if you want me to do
> it now, let me know.

Is this really relevant for the patch?

> We do the reverse operation when a formerly limited cgroup becomes
> unlimited.
> 
> Signed-off-by: Glauber Costa <glommer@parallels.com>
> CC: Christoph Lameter <cl@linux.com>
> CC: Pekka Enberg <penberg@cs.helsinki.fi>
> CC: Michal Hocko <mhocko@suse.cz>
> CC: Kamezawa Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
> CC: Johannes Weiner <hannes@cmpxchg.org>
> CC: Suleiman Souhlal <suleiman@google.com>
> ---
>  mm/memcontrol.c | 88 +++++++++++++++++++++++++++++++++++++++++++++++++++------
>  1 file changed, 79 insertions(+), 9 deletions(-)
> 
> diff --git a/mm/memcontrol.c b/mm/memcontrol.c
> index 3216292..3d30b79 100644
> --- a/mm/memcontrol.c
> +++ b/mm/memcontrol.c
> @@ -295,7 +295,8 @@ struct mem_cgroup {
>  	 * Should the accounting and control be hierarchical, per subtree?
>  	 */
>  	bool use_hierarchy;
> -	bool kmem_accounted;
> +
> +	unsigned long kmem_accounted; /* See KMEM_ACCOUNTED_*, below */
>  
>  	bool		oom_lock;
>  	atomic_t	under_oom;
> @@ -348,6 +349,38 @@ struct mem_cgroup {
>  #endif
>  };
>  
> +enum {
> +	KMEM_ACCOUNTED_THIS, /* accounted by this cgroup itself */
> +	KMEM_ACCOUNTED_PARENT, /* accounted by any of its parents. */

How it can be accounted by its parent, the charge doesn't go downwards.
Shouldn't it rather be /* a parent is accounted */

> +};
> +
> +#ifdef CONFIG_MEMCG_KMEM
> +static bool memcg_kmem_account(struct mem_cgroup *memcg)

memcg_kmem_set_account? It matches _clear_ counterpart and it makes
obvious that the value is changed actually.

[...]
> +static bool memcg_kmem_is_accounted(struct mem_cgroup *memcg)
> +{
> +	return test_bit(KMEM_ACCOUNTED_THIS, &memcg->kmem_accounted);
> +}
> +
> +static void memcg_kmem_account_parent(struct mem_cgroup *memcg)

same here _set_parent

[...]
> @@ -614,7 +647,7 @@ EXPORT_SYMBOL(__memcg_kmem_free_page);
>  
>  static void disarm_kmem_keys(struct mem_cgroup *memcg)
>  {
> -	if (memcg->kmem_accounted)
> +	if (test_bit(KMEM_ACCOUNTED_THIS, &memcg->kmem_accounted))

memcg_kmem_is_accounted. I do not see any reason to open code this.

>  		static_key_slow_dec(&memcg_kmem_enabled_key);
>  }
>  #else
> @@ -4171,17 +4204,54 @@ static ssize_t mem_cgroup_read(struct cgroup *cont, struct cftype *cft,
>  static void memcg_update_kmem_limit(struct mem_cgroup *memcg, u64 val)
>  {
>  #ifdef CONFIG_MEMCG_KMEM
> -	/*
> -	 * Once enabled, can't be disabled. We could in theory disable it if we
> -	 * haven't yet created any caches, or if we can shrink them all to
> -	 * death. But it is not worth the trouble.
> -	 */
> +	struct mem_cgroup *iter;
> +
>  	mutex_lock(&set_limit_mutex);
> -	if (!memcg->kmem_accounted && val != RESOURCE_MAX) {
> +	if ((val != RESOURCE_MAX) && memcg_kmem_account(memcg)) {
> +
> +		/*
> +		 * Once enabled, can't be disabled. We could in theory disable
> +		 * it if we haven't yet created any caches, or if we can shrink
> +		 * them all to death. But it is not worth the trouble
> +		 */
>  		static_key_slow_inc(&memcg_kmem_enabled_key);
> -		memcg->kmem_accounted = true;
> +
> +		if (!memcg->use_hierarchy)
> +			goto out;
> +
> +		for_each_mem_cgroup_tree(iter, memcg) {

for_each_mem_cgroup_tree does respect use_hierarchy so the above
shortcut is not necessary. Dunno but IMHO we should get rid of explicit
tests as much as possible. This doesn't look like a hot path anyway.

> +			if (iter == memcg)
> +				continue;
> +			memcg_kmem_account_parent(iter);
> +		}
> +	} else if ((val == RESOURCE_MAX) && memcg_kmem_clear_account(memcg)) {

Above you said "Once enabled, can't be disabled." and now you can
disable it? Say you are a leaf group with non accounted parents. This
will clear the flag and so no further accounting is done. Shouldn't
unlimited mean that we will never reach the limit? Or am I missing
something?

> +
> +		if (!memcg->use_hierarchy)
> +			goto out;
> +
> +		for_each_mem_cgroup_tree(iter, memcg) {
> +			struct mem_cgroup *parent;
> +
> +			if (iter == memcg)
> +				continue;
> +			/*
> +			 * We should only have our parent bit cleared if none
> +			 * of our parents are accounted. The transversal order
> +			 * of our iter function forces us to always look at the
> +			 * parents.
> +			 */
> +			parent = parent_mem_cgroup(iter);
> +			for (; parent != memcg; parent = parent_mem_cgroup(iter))
> +				if (memcg_kmem_is_accounted(parent))
> +					goto noclear;
> +			memcg_kmem_clear_account_parent(iter);

Brain hurts...
Yes we are iterating in the creation ordering so we cannot rely on the
first encountered accounted memcg
A(a) - B - D
     - C (a) - E


> +noclear:
> +			continue;
> +		}
>  	}
> +out:
>  	mutex_unlock(&set_limit_mutex);
> +
>  #endif
>  }
>  
> -- 
> 1.7.11.2
> 
> --
> To unsubscribe from this list: send the line "unsubscribe cgroups" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

-- 
Michal Hocko
SUSE Labs

  parent reply	other threads:[~2012-08-17  9:00 UTC|newest]

Thread overview: 352+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-08-09 13:01 [PATCH v2 00/11] Request for Inclusion: kmem controller for memcg Glauber Costa
2012-08-09 13:01 ` Glauber Costa
2012-08-09 13:01 ` Glauber Costa
     [not found] ` <1344517279-30646-1-git-send-email-glommer-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org>
2012-08-09 13:01   ` [PATCH v2 01/11] memcg: Make it possible to use the stock for more than one page Glauber Costa
2012-08-09 13:01     ` Glauber Costa
2012-08-09 13:01     ` Glauber Costa
2012-08-10 15:12     ` Michal Hocko
2012-08-10 15:12       ` Michal Hocko
2012-08-09 13:01   ` [PATCH v2 02/11] memcg: Reclaim when more than one page needed Glauber Costa
2012-08-09 13:01     ` Glauber Costa
2012-08-09 13:01     ` Glauber Costa
     [not found]     ` <1344517279-30646-3-git-send-email-glommer-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org>
2012-08-10 15:42       ` Michal Hocko
2012-08-10 15:42         ` Michal Hocko
2012-08-10 15:42         ` Michal Hocko
     [not found]         ` <20120810154240.GG1425-2MMpYkNvuYDjFM9bn6wA6Q@public.gmane.org>
2012-08-10 16:49           ` Kamezawa Hiroyuki
2012-08-10 16:49             ` Kamezawa Hiroyuki
2012-08-10 16:49             ` Kamezawa Hiroyuki
     [not found]             ` <50253B95.7010905-+CUm20s59erQFUHtdCDX3A@public.gmane.org>
2012-08-10 17:28               ` Michal Hocko
2012-08-10 17:28                 ` Michal Hocko
2012-08-10 17:28                 ` Michal Hocko
2012-08-10 17:56                 ` Kamezawa Hiroyuki
2012-08-10 17:56                   ` Kamezawa Hiroyuki
2012-08-10 17:30       ` Michal Hocko
2012-08-10 17:30         ` Michal Hocko
2012-08-10 17:30         ` Michal Hocko
     [not found]         ` <20120810173000.GB14591-2MMpYkNvuYDjFM9bn6wA6Q@public.gmane.org>
2012-08-10 18:52           ` Michal Hocko
2012-08-10 18:52             ` Michal Hocko
2012-08-10 18:52             ` Michal Hocko
2012-08-10 18:54       ` Michal Hocko
2012-08-10 18:54         ` Michal Hocko
2012-08-10 18:54         ` Michal Hocko
     [not found]         ` <20120810185417.GB16110-2MMpYkNvuYDjFM9bn6wA6Q@public.gmane.org>
2012-08-13  8:05           ` Glauber Costa
2012-08-13  8:05             ` Glauber Costa
2012-08-13  8:05             ` Glauber Costa
     [not found]             ` <5028B552.2070708-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org>
2012-08-13 13:10               ` Michal Hocko
2012-08-13 13:10                 ` Michal Hocko
2012-08-13 13:10                 ` Michal Hocko
2012-08-09 13:01   ` [PATCH v2 03/11] memcg: change defines to an enum Glauber Costa
2012-08-09 13:01     ` Glauber Costa
2012-08-09 13:01     ` Glauber Costa
     [not found]     ` <1344517279-30646-4-git-send-email-glommer-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org>
2012-08-10 15:43       ` Michal Hocko
2012-08-10 15:43         ` Michal Hocko
2012-08-10 15:43         ` Michal Hocko
2012-08-09 13:01   ` [PATCH v2 04/11] kmem accounting basic infrastructure Glauber Costa
2012-08-09 13:01     ` Glauber Costa
2012-08-09 13:01     ` Glauber Costa
     [not found]     ` <1344517279-30646-5-git-send-email-glommer-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org>
2012-08-10 17:02       ` Kamezawa Hiroyuki
2012-08-10 17:02         ` Kamezawa Hiroyuki
2012-08-10 17:02         ` Kamezawa Hiroyuki
     [not found]         ` <50253EA8.9080205-+CUm20s59erQFUHtdCDX3A@public.gmane.org>
2012-08-13  8:36           ` Glauber Costa
2012-08-13  8:36             ` Glauber Costa
2012-08-13  8:36             ` Glauber Costa
2012-08-17  2:38             ` Kamezawa Hiroyuki
2012-08-17  2:38               ` Kamezawa Hiroyuki
2012-08-14 16:21     ` Michal Hocko
2012-08-14 16:21       ` Michal Hocko
2012-08-15  9:33       ` Glauber Costa
2012-08-15  9:33         ` Glauber Costa
     [not found]         ` <502B6D03.1080804-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org>
2012-08-15 11:12           ` James Bottomley
2012-08-15 11:12             ` James Bottomley
2012-08-15 11:12             ` James Bottomley
     [not found]             ` <1345029143.2976.41.camel-sFMDBYUN5F8GjUHQrlYNx2Wm91YjaHnnhRte9Li2A+AAvxtiuMwx3w@public.gmane.org>
2012-08-15 12:55               ` Michal Hocko
2012-08-15 12:55                 ` Michal Hocko
2012-08-15 12:55                 ` Michal Hocko
2012-08-15 13:29                 ` James Bottomley
2012-08-15 13:29                   ` James Bottomley
2012-08-15 12:39           ` Michal Hocko
2012-08-15 12:39             ` Michal Hocko
2012-08-15 12:39             ` Michal Hocko
     [not found]             ` <20120815123931.GF23985-2MMpYkNvuYDjFM9bn6wA6Q@public.gmane.org>
2012-08-15 12:53               ` Glauber Costa
2012-08-15 12:53                 ` Glauber Costa
2012-08-15 12:53                 ` Glauber Costa
     [not found]                 ` <502B9BD4.4070003-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org>
2012-08-15 13:02                   ` Michal Hocko
2012-08-15 13:02                     ` Michal Hocko
2012-08-15 13:02                     ` Michal Hocko
     [not found]                     ` <20120815130228.GH23985-2MMpYkNvuYDjFM9bn6wA6Q@public.gmane.org>
2012-08-15 13:04                       ` Glauber Costa
2012-08-15 13:04                         ` Glauber Costa
2012-08-15 13:04                         ` Glauber Costa
     [not found]                         ` <502B9E5F.2080907-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org>
2012-08-15 13:26                           ` Michal Hocko
2012-08-15 13:26                             ` Michal Hocko
2012-08-15 13:26                             ` Michal Hocko
     [not found]                             ` <20120815132621.GJ23985-2MMpYkNvuYDjFM9bn6wA6Q@public.gmane.org>
2012-08-15 13:31                               ` Glauber Costa
2012-08-15 13:31                                 ` Glauber Costa
2012-08-15 13:31                                 ` Glauber Costa
     [not found]                                 ` <502BA4AC.9040000-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org>
2012-08-15 14:10                                   ` Michal Hocko
2012-08-15 14:10                                     ` Michal Hocko
2012-08-15 14:10                                     ` Michal Hocko
     [not found]                                     ` <20120815141041.GK23985-2MMpYkNvuYDjFM9bn6wA6Q@public.gmane.org>
2012-08-15 14:11                                       ` Glauber Costa
2012-08-15 14:11                                         ` Glauber Costa
2012-08-15 14:11                                         ` Glauber Costa
2012-08-15 14:47             ` Christoph Lameter
2012-08-15 14:47               ` Christoph Lameter
     [not found]               ` <000001392ac15404-43a3fd2c-a6d3-4985-b173-74bb586ad47c-000000-p/GC64/jrecnJqMo6gzdpkEOCMrvLtNR@public.gmane.org>
2012-08-15 15:11                 ` Glauber Costa
2012-08-15 15:11                   ` Glauber Costa
2012-08-15 15:11                   ` Glauber Costa
2012-08-15 15:34                   ` Christoph Lameter
2012-08-15 15:34                     ` Christoph Lameter
     [not found]                     ` <000001392aec1926-72b3a631-1fb1-460c-803d-38c4405151e1-000000-p/GC64/jrecnJqMo6gzdpkEOCMrvLtNR@public.gmane.org>
2012-08-15 15:35                       ` Glauber Costa
2012-08-15 15:35                         ` Glauber Costa
2012-08-15 15:35                         ` Glauber Costa
     [not found]                         ` <502BC1B1.3010807-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org>
2012-08-15 17:26                           ` Christoph Lameter
2012-08-15 17:26                             ` Christoph Lameter
2012-08-15 17:26                             ` Christoph Lameter
2012-08-15 18:11                       ` Ying Han
2012-08-15 18:11                         ` Ying Han
2012-08-15 18:11                         ` Ying Han
     [not found]                         ` <CALWz4ixv8wfOqQ34CBLQ1jVdWoQc4-hQRkeRTb6U5x93gxjZZw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2012-08-15 18:25                           ` Christoph Lameter
2012-08-15 18:25                             ` Christoph Lameter
2012-08-15 18:25                             ` Christoph Lameter
     [not found]                             ` <000001392b881bf0-4cf7cb93-c142-4ddb-960a-b35390caca0f-000000-p/GC64/jrecnJqMo6gzdpkEOCMrvLtNR@public.gmane.org>
2012-08-15 19:22                               ` Glauber Costa
2012-08-15 19:22                                 ` Glauber Costa
2012-08-15 19:22                                 ` Glauber Costa
2012-08-15 18:07                   ` Ying Han
2012-08-15 18:07                     ` Ying Han
2012-08-15 15:19               ` Greg Thelen
2012-08-15 15:19                 ` Greg Thelen
2012-08-15 15:36                 ` Christoph Lameter
2012-08-15 15:36                   ` Christoph Lameter
2012-08-15 18:01             ` Ying Han
2012-08-15 18:01               ` Ying Han
     [not found]               ` <CALWz4ixYXN9FGJ1E9CZ9viJ=s3k63Pm8t3nakQvi+1T5qtyFYw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2012-08-15 18:00                 ` Glauber Costa
2012-08-15 18:00                   ` Glauber Costa
2012-08-15 18:00                   ` Glauber Costa
2012-08-15 19:50       ` Ying Han
2012-08-15 19:50         ` Ying Han
     [not found]         ` <CALWz4iwgnqwq5k_zhpsiiwrj8Y=OkCUg7H96khJWPZScSQE=nw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2012-08-16 15:25           ` Michal Hocko
2012-08-16 15:25             ` Michal Hocko
2012-08-16 15:25             ` Michal Hocko
2012-08-17  5:58             ` Ying Han
2012-08-17  5:58               ` Ying Han
2012-08-09 13:01   ` [PATCH v2 05/11] Add a __GFP_KMEMCG flag Glauber Costa
2012-08-09 13:01     ` Glauber Costa
2012-08-09 13:01     ` Glauber Costa
     [not found]     ` <1344517279-30646-6-git-send-email-glommer-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org>
2012-08-10 17:07       ` Kamezawa Hiroyuki
2012-08-10 17:07         ` Kamezawa Hiroyuki
2012-08-10 17:07         ` Kamezawa Hiroyuki
2012-08-09 13:01   ` [PATCH v2 06/11] memcg: kmem controller infrastructure Glauber Costa
2012-08-09 13:01     ` Glauber Costa
2012-08-09 13:01     ` Glauber Costa
2012-08-11  5:11     ` Greg Thelen
2012-08-11  5:11       ` Greg Thelen
2012-08-13  8:07       ` Glauber Costa
2012-08-13  8:07         ` Glauber Costa
2012-08-13  9:59       ` Glauber Costa
2012-08-13  9:59         ` Glauber Costa
2012-08-13 21:21         ` Greg Thelen
2012-08-13 21:21           ` Greg Thelen
     [not found]     ` <1344517279-30646-7-git-send-email-glommer-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org>
2012-08-10 17:27       ` Kamezawa Hiroyuki
2012-08-10 17:27         ` Kamezawa Hiroyuki
2012-08-10 17:27         ` Kamezawa Hiroyuki
2012-08-13  8:28         ` Glauber Costa
2012-08-13  8:28           ` Glauber Costa
2012-08-14 18:58           ` Greg Thelen
2012-08-14 18:58             ` Greg Thelen
     [not found]             ` <xr93ipcl9u7x.fsf-aSPv4SP+Du0KgorLzL7FmE7CuiCeIGUxQQ4Iyu8u01E@public.gmane.org>
2012-08-15  9:18               ` Glauber Costa
2012-08-15  9:18                 ` Glauber Costa
2012-08-15  9:18                 ` Glauber Costa
2012-08-15 16:38                 ` Greg Thelen
2012-08-15 16:38                   ` Greg Thelen
     [not found]                   ` <xr93wr109kke.fsf-aSPv4SP+Du0KgorLzL7FmE7CuiCeIGUxQQ4Iyu8u01E@public.gmane.org>
2012-08-15 17:00                     ` Glauber Costa
2012-08-15 17:00                       ` Glauber Costa
2012-08-15 17:00                       ` Glauber Costa
2012-08-15 17:12                       ` Greg Thelen
2012-08-15 17:12                         ` Greg Thelen
2012-08-15 17:12                         ` Greg Thelen
     [not found]                         ` <xr93lihg9j0q.fsf-aSPv4SP+Du0KgorLzL7FmE7CuiCeIGUxQQ4Iyu8u01E@public.gmane.org>
2012-08-15 19:31                           ` Glauber Costa
2012-08-15 19:31                             ` Glauber Costa
2012-08-15 19:31                             ` Glauber Costa
     [not found]                             ` <502BF916.10902-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org>
2012-08-16  3:37                               ` Greg Thelen
2012-08-16  3:37                                 ` Greg Thelen
2012-08-16  3:37                                 ` Greg Thelen
     [not found]                                 ` <xr93zk5vecde.fsf-aSPv4SP+Du0KgorLzL7FmE7CuiCeIGUxQQ4Iyu8u01E@public.gmane.org>
2012-08-16  7:47                                   ` Glauber Costa
2012-08-16  7:47                                     ` Glauber Costa
2012-08-16  7:47                                     ` Glauber Costa
2012-08-20 13:36                       ` Kamezawa Hiroyuki
2012-08-20 13:36                         ` Kamezawa Hiroyuki
2012-08-20 15:29                         ` Glauber Costa
2012-08-20 15:29                           ` Glauber Costa
2012-08-20 15:29                           ` Glauber Costa
     [not found]           ` <5028BA9E.7000302-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org>
2012-08-17  2:36             ` Kamezawa Hiroyuki
2012-08-17  2:36               ` Kamezawa Hiroyuki
2012-08-17  2:36               ` Kamezawa Hiroyuki
     [not found]               ` <502DAE2A.1000404-+CUm20s59erQFUHtdCDX3A@public.gmane.org>
2012-08-17  7:04                 ` Glauber Costa
2012-08-17  7:04                   ` Glauber Costa
2012-08-17  7:04                   ` Glauber Costa
2012-08-14 11:00         ` Glauber Costa
2012-08-14 11:00           ` Glauber Costa
2012-08-14 17:25       ` Michal Hocko
2012-08-14 17:25         ` Michal Hocko
2012-08-14 17:25         ` Michal Hocko
2012-08-15  9:42         ` Glauber Costa
2012-08-15  9:42           ` Glauber Costa
2012-08-15 10:44           ` Glauber Costa
2012-08-15 10:44             ` Glauber Costa
     [not found]           ` <502B6F00.8040207-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org>
2012-08-15 13:09             ` Michal Hocko
2012-08-15 13:09               ` Michal Hocko
2012-08-15 13:09               ` Michal Hocko
2012-08-15 14:01               ` Glauber Costa
2012-08-15 14:01                 ` Glauber Costa
     [not found]                 ` <502BABCF.7020608-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org>
2012-08-15 14:23                   ` Michal Hocko
2012-08-15 14:23                     ` Michal Hocko
2012-08-15 14:23                     ` Michal Hocko
2012-08-15 14:27                     ` Glauber Costa
2012-08-15 14:27                       ` Glauber Costa
2012-08-16  9:53                       ` Michal Hocko
2012-08-16  9:53                         ` Michal Hocko
     [not found]                         ` <20120816095309.GB2817-2MMpYkNvuYDjFM9bn6wA6Q@public.gmane.org>
2012-08-16  9:57                           ` Glauber Costa
2012-08-16  9:57                             ` Glauber Costa
2012-08-16  9:57                             ` Glauber Costa
2012-08-16 15:05                             ` Michal Hocko
2012-08-16 15:05                               ` Michal Hocko
2012-08-16 15:22                               ` Glauber Costa
2012-08-16 15:22                                 ` Glauber Costa
2012-08-21 21:50     ` Greg Thelen
2012-08-21 21:50       ` Greg Thelen
2012-08-22  8:35       ` Glauber Costa
2012-08-22  8:35         ` Glauber Costa
     [not found]         ` <503499CC.7070704-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org>
2012-08-23  0:07           ` Greg Thelen
2012-08-23  0:07             ` Greg Thelen
2012-08-23  0:07             ` Greg Thelen
     [not found]             ` <xr93boi2v5bi.fsf-aSPv4SP+Du0KgorLzL7FmE7CuiCeIGUxQQ4Iyu8u01E@public.gmane.org>
2012-08-23  7:51               ` Glauber Costa
2012-08-23  7:51                 ` Glauber Costa
2012-08-23  7:51                 ` Glauber Costa
2012-08-09 13:01   ` [PATCH v2 07/11] mm: Allocate kernel pages to the right memcg Glauber Costa
2012-08-09 13:01     ` Glauber Costa
2012-08-09 13:01     ` Glauber Costa
2012-08-10 17:36     ` Greg Thelen
2012-08-10 17:36       ` Greg Thelen
2012-08-10 17:36       ` Greg Thelen
2012-08-13  8:02       ` Glauber Costa
2012-08-13  8:02         ` Glauber Costa
     [not found]     ` <1344517279-30646-8-git-send-email-glommer-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org>
2012-08-09 16:33       ` Greg Thelen
2012-08-09 16:33         ` Greg Thelen
2012-08-09 16:33         ` Greg Thelen
     [not found]         ` <xr93boikgh4w.fsf-aSPv4SP+Du0KgorLzL7FmE7CuiCeIGUxQQ4Iyu8u01E@public.gmane.org>
2012-08-09 16:42           ` Glauber Costa
2012-08-09 16:42             ` Glauber Costa
2012-08-09 16:42             ` Glauber Costa
2012-08-10 17:33       ` Kamezawa Hiroyuki
2012-08-10 17:33         ` Kamezawa Hiroyuki
2012-08-10 17:33         ` Kamezawa Hiroyuki
     [not found]         ` <502545D2.80708-+CUm20s59erQFUHtdCDX3A@public.gmane.org>
2012-08-13  8:03           ` Glauber Costa
2012-08-13  8:03             ` Glauber Costa
2012-08-13  8:03             ` Glauber Costa
2012-08-13  8:57             ` Mel Gorman
2012-08-13  8:57               ` Mel Gorman
2012-08-14 15:16       ` Mel Gorman
2012-08-14 15:16         ` Mel Gorman
2012-08-14 15:16         ` Mel Gorman
2012-08-15  9:08         ` Glauber Costa
2012-08-15  9:08           ` Glauber Costa
     [not found]           ` <502B66F8.30909-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org>
2012-08-15 13:22             ` Mel Gorman
2012-08-15 13:22               ` Mel Gorman
2012-08-15 13:22               ` Mel Gorman
2012-08-15 13:39               ` Glauber Costa
2012-08-15 13:39                 ` Glauber Costa
     [not found]               ` <20120815132244.GQ4177-l3A5Bk7waGM@public.gmane.org>
2012-08-15 13:51                 ` Glauber Costa
2012-08-15 13:51                   ` Glauber Costa
2012-08-15 13:51                   ` Glauber Costa
2012-08-15  9:24       ` Michal Hocko
2012-08-15  9:24         ` Michal Hocko
2012-08-15  9:24         ` Michal Hocko
2012-08-09 13:01   ` [PATCH v2 08/11] memcg: disable kmem code when not in use Glauber Costa
2012-08-09 13:01     ` Glauber Costa
2012-08-09 13:01     ` Glauber Costa
2012-08-17  7:02     ` Michal Hocko
2012-08-17  7:02       ` Michal Hocko
2012-08-17  7:01       ` Glauber Costa
2012-08-17  7:01         ` Glauber Costa
2012-08-17  8:04         ` Michal Hocko
2012-08-17  8:04           ` Michal Hocko
2012-08-09 13:01   ` [PATCH v2 09/11] memcg: propagate kmem limiting information to children Glauber Costa
2012-08-09 13:01     ` Glauber Costa
2012-08-09 13:01     ` Glauber Costa
     [not found]     ` <1344517279-30646-10-git-send-email-glommer-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org>
2012-08-10 17:51       ` Kamezawa Hiroyuki
2012-08-10 17:51         ` Kamezawa Hiroyuki
2012-08-10 17:51         ` Kamezawa Hiroyuki
     [not found]         ` <50254A0A.3080805-+CUm20s59erQFUHtdCDX3A@public.gmane.org>
2012-08-13  8:01           ` Glauber Costa
2012-08-13  8:01             ` Glauber Costa
2012-08-13  8:01             ` Glauber Costa
2012-08-17  9:00     ` Michal Hocko [this message]
2012-08-17  9:00       ` Michal Hocko
2012-08-17  9:15       ` Glauber Costa
2012-08-17  9:15         ` Glauber Costa
2012-08-17  9:35         ` Michal Hocko
2012-08-17  9:35           ` Michal Hocko
     [not found]           ` <20120817093504.GE18600-2MMpYkNvuYDjFM9bn6wA6Q@public.gmane.org>
2012-08-17 10:07             ` Glauber Costa
2012-08-17 10:07               ` Glauber Costa
2012-08-17 10:07               ` Glauber Costa
     [not found]               ` <502E17C4.7060204-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org>
2012-08-17 10:35                 ` Michal Hocko
2012-08-17 10:35                   ` Michal Hocko
2012-08-17 10:35                   ` Michal Hocko
2012-08-17 10:36                   ` Glauber Costa
2012-08-17 10:36                     ` Glauber Costa
     [not found]                     ` <502E1E90.1080805-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org>
2012-08-21  7:54                       ` Michal Hocko
2012-08-21  7:54                         ` Michal Hocko
2012-08-21  7:54                         ` Michal Hocko
2012-08-21  8:35                         ` Michal Hocko
2012-08-21  8:35                           ` Michal Hocko
2012-08-21  9:17                           ` Glauber Costa
2012-08-21  9:17                             ` Glauber Costa
     [not found]                         ` <20120821075430.GA19797-2MMpYkNvuYDjFM9bn6wA6Q@public.gmane.org>
2012-08-21  9:22                           ` Glauber Costa
2012-08-21  9:22                             ` Glauber Costa
2012-08-21  9:22                             ` Glauber Costa
2012-08-21 10:00                             ` Michal Hocko
2012-08-21 10:00                               ` Michal Hocko
2012-08-21 10:01                               ` Glauber Costa
2012-08-21 10:01                                 ` Glauber Costa
2012-08-22  1:09                               ` Greg Thelen
2012-08-22  1:09                                 ` Greg Thelen
2012-08-22  8:22                                 ` Glauber Costa
2012-08-22  8:22                                   ` Glauber Costa
2012-08-22 23:23                                   ` Greg Thelen
2012-08-22 23:23                                     ` Greg Thelen
     [not found]                                     ` <xr93a9xmwly7.fsf-aSPv4SP+Du0KgorLzL7FmE7CuiCeIGUxQQ4Iyu8u01E@public.gmane.org>
2012-08-23  7:55                                       ` Glauber Costa
2012-08-23  7:55                                         ` Glauber Costa
2012-08-23  7:55                                         ` Glauber Costa
     [not found]                                         ` <5035E1D6.6010503-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org>
2012-08-24  5:06                                           ` Greg Thelen
2012-08-24  5:06                                             ` Greg Thelen
2012-08-24  5:06                                             ` Greg Thelen
     [not found]                                             ` <xr93harsvpxx.fsf-aSPv4SP+Du0KgorLzL7FmE7CuiCeIGUxQQ4Iyu8u01E@public.gmane.org>
2012-08-24  5:23                                               ` Glauber Costa
2012-08-24  5:23                                                 ` Glauber Costa
2012-08-24  5:23                                                 ` Glauber Costa
     [not found]                   ` <20120817103550.GF18600-2MMpYkNvuYDjFM9bn6wA6Q@public.gmane.org>
2012-08-17 10:39                     ` Glauber Costa
2012-08-17 10:39                       ` Glauber Costa
2012-08-17 10:39                       ` Glauber Costa
2012-08-09 13:01   ` [PATCH v2 10/11] memcg: allow a memcg with kmem charges to be destructed Glauber Costa
2012-08-09 13:01     ` Glauber Costa
2012-08-09 13:01     ` Glauber Costa
     [not found]     ` <1344517279-30646-11-git-send-email-glommer-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org>
2012-08-21  8:22       ` Michal Hocko
2012-08-21  8:22         ` Michal Hocko
2012-08-21  8:22         ` Michal Hocko
2012-08-22  8:36         ` Glauber Costa
2012-08-22  8:36           ` Glauber Costa
2012-08-09 13:01   ` [PATCH v2 11/11] protect architectures where THREAD_SIZE >= PAGE_SIZE against fork bombs Glauber Costa
2012-08-09 13:01     ` Glauber Costa
2012-08-09 13:01     ` Glauber Costa
     [not found]     ` <1344517279-30646-12-git-send-email-glommer-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org>
2012-08-10 17:54       ` Kamezawa Hiroyuki
2012-08-10 17:54         ` Kamezawa Hiroyuki
2012-08-10 17:54         ` Kamezawa Hiroyuki
2012-08-21  9:35     ` Michal Hocko
2012-08-21  9:35       ` Michal Hocko
     [not found]       ` <20120821093513.GD19797-2MMpYkNvuYDjFM9bn6wA6Q@public.gmane.org>
2012-08-21  9:40         ` Glauber Costa
2012-08-21  9:40           ` Glauber Costa
2012-08-21  9:40           ` Glauber Costa
     [not found]           ` <5033579D.5000203-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org>
2012-08-21 10:57             ` Michal Hocko
2012-08-21 10:57               ` Michal Hocko
2012-08-21 10:57               ` Michal Hocko
2012-08-17 21:37 ` [PATCH v2 00/11] Request for Inclusion: kmem controller for memcg Ying Han
2012-08-17 21:37   ` Ying Han
     [not found]   ` <CALWz4iycCxuUaEeBz_b8+U13fcCLep3rvuSNUTPD8N-eZkDBrg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2012-08-20  7:51     ` Glauber Costa
2012-08-20  7:51       ` Glauber Costa
2012-08-20  7:51       ` 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=20120817090005.GC18600@dhcp22.suse.cz \
    --to=mhocko@suse.cz \
    --cc=akpm@linux-foundation.org \
    --cc=cgroups@vger.kernel.org \
    --cc=cl@linux.com \
    --cc=devel@openvz.org \
    --cc=glommer@parallels.com \
    --cc=hannes@cmpxchg.org \
    --cc=kamezawa.hiroyu@jp.fujitsu.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=penberg@cs.helsinki.fi \
    --cc=penberg@kernel.org \
    --cc=rientjes@google.com \
    --cc=suleiman@google.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 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.