From: Glauber Costa <glommer@parallels.com>
To: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
Cc: <linux-kernel@vger.kernel.org>, <paul@paulmenage.org>,
<lizf@cn.fujitsu.com>, <ebiederm@xmission.com>,
<davem@davemloft.net>, <gthelen@google.com>,
<netdev@vger.kernel.org>, <linux-mm@kvack.org>,
<kirill@shutemov.name>, <avagin@parallels.com>,
<devel@openvz.org>, <eric.dumazet@gmail.com>,
<cgroups@vger.kernel.org>
Subject: Re: [PATCH v7 10/10] Disable task moving when using kernel memory accounting
Date: Mon, 5 Dec 2011 07:18:37 -0200 [thread overview]
Message-ID: <4EDC8C6D.2070001@parallels.com> (raw)
In-Reply-To: <20111205111835.b1432603.kamezawa.hiroyu@jp.fujitsu.com>
On 12/05/2011 12:18 AM, KAMEZAWA Hiroyuki wrote:
> On Fri, 2 Dec 2011 16:11:56 -0200
> Glauber Costa<glommer@parallels.com> wrote:
>
>> On 11/30/2011 12:22 AM, KAMEZAWA Hiroyuki wrote:
>>> On Tue, 29 Nov 2011 21:57:01 -0200
>>> Glauber Costa<glommer@parallels.com> wrote:
>>>
>>>> Since this code is still experimental, we are leaving the exact
>>>> details of how to move tasks between cgroups when kernel memory
>>>> accounting is used as future work.
>>>>
>>>> For now, we simply disallow movement if there are any pending
>>>> accounted memory.
>>>>
>>>> Signed-off-by: Glauber Costa<glommer@parallels.com>
>>>> CC: Hiroyouki Kamezawa<kamezawa.hiroyu@jp.fujitsu.com>
>>>> ---
>>>> mm/memcontrol.c | 23 ++++++++++++++++++++++-
>>>> 1 files changed, 22 insertions(+), 1 deletions(-)
>>>>
>>>> diff --git a/mm/memcontrol.c b/mm/memcontrol.c
>>>> index a31a278..dd9a6d9 100644
>>>> --- a/mm/memcontrol.c
>>>> +++ b/mm/memcontrol.c
>>>> @@ -5453,10 +5453,19 @@ static int mem_cgroup_can_attach(struct cgroup_subsys *ss,
>>>> {
>>>> int ret = 0;
>>>> struct mem_cgroup *memcg = mem_cgroup_from_cont(cgroup);
>>>> + struct mem_cgroup *from = mem_cgroup_from_task(p);
>>>> +
>>>> +#if defined(CONFIG_CGROUP_MEM_RES_CTLR_KMEM)&& defined(CONFIG_INET)
>>>> + if (from != memcg&& !mem_cgroup_is_root(from)&&
>>>> + res_counter_read_u64(&from->tcp_mem.tcp_memory_allocated, RES_USAGE)) {
>>>> + printk(KERN_WARNING "Can't move tasks between cgroups: "
>>>> + "Kernel memory held.\n");
>>>> + return 1;
>>>> + }
>>>> +#endif
>>>
>>> I wonder....reading all codes again, this is incorrect check.
>>>
>>> Hm, let me cralify. IIUC, in old code, "prevent moving" is because you hold
>>> reference count of cgroup, which can cause trouble at rmdir() as leaking refcnt.
>> right.
>>
>>> BTW, because socket is a shared resource between cgroup, changes in mm->owner
>>> may cause task cgroup moving implicitly. So, if you allow leak of resource
>>> here, I guess... you can take mem_cgroup_get() refcnt which is memcg-local and
>>> allow rmdir(). Then, this limitation may disappear.
>>
>> Sorry, I didn't fully understand. Can you clarify further?
>> If the task is implicitly moved, it will end up calling can_attach as
>> well, right?
>>
> I'm sorry that my explanation is bad.
>
> You can take memory cgroup itself's reference count by mem_cgroup_put/get.
> By getting this, memory cgroup object will continue to exist even after
> its struct cgroup* is freed by rmdir().
>
> So, assume you do mem_cgroup_get()/put at socket attaching/detatching.
>
> 0) A task has a tcp socekts in memcg0.
>
> task(memcg0)
> +- socket0 --> memcg0,usage=4096
>
> 1) move this task to memcg1
>
> task(memcg1)
> +- socket0 --> memcg0,usage=4096
>
> 2) The task create a new socket.
>
> task(memcg1)
> +- socekt0 --> memcg0,usage=4096
> +- socket1 --> memcg1,usage=xxxx
>
> Here, the task will hold 4096bytes of usage in memcg0 implicitly.
>
> 3) an admin removes memcg0
> task(memcg1)
> +- socket0 -->memcg0, usage=4096<-----(*)
> +- socket1 -->memcg1, usage=xxxx
>
> (*) is invisible to users....but this will not be very big problem.
>
Hi Kame,
Thanks for the explanation.
Hummm, Do you think that by doing it, we get rid of the need of moving
sockets to another memcg when the task is moved? So in my original
patchset, if you recall, I wanted to keep a socket forever in the same
cgroup. I didn't, because then rmdir would be blocked.
By using this memcg reference trick, both can be achieved. What do you
think ?
--
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/ .
Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
next prev parent reply other threads:[~2011-12-05 9:18 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-11-29 23:56 [PATCH v7 00/10] Request for Inclusion: per-cgroup tcp memory pressure Glauber Costa
2011-11-29 23:56 ` [PATCH v7 01/10] Basic kernel memory functionality for the Memory Controller Glauber Costa
[not found] ` <1322611021-1730-2-git-send-email-glommer-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org>
2011-11-30 0:48 ` KAMEZAWA Hiroyuki
2011-11-29 23:56 ` [PATCH v7 02/10] foundations of per-cgroup memory pressure controlling Glauber Costa
2011-11-30 0:43 ` KAMEZAWA Hiroyuki
2011-12-02 17:46 ` Glauber Costa
2011-12-05 1:59 ` KAMEZAWA Hiroyuki
2011-12-05 9:06 ` Glauber Costa
2011-11-29 23:56 ` [PATCH v7 03/10] socket: initial cgroup code Glauber Costa
[not found] ` <1322611021-1730-4-git-send-email-glommer-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org>
2011-11-30 1:07 ` KAMEZAWA Hiroyuki
2011-11-29 23:56 ` [PATCH v7 04/10] tcp memory pressure controls Glauber Costa
[not found] ` <1322611021-1730-5-git-send-email-glommer-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org>
2011-11-30 1:49 ` KAMEZAWA Hiroyuki
[not found] ` <20111130104943.d9b210ee.kamezawa.hiroyu-+CUm20s59erQFUHtdCDX3A@public.gmane.org>
2011-12-02 17:57 ` Glauber Costa
[not found] ` <4ED91188.6030503-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org>
2011-12-05 2:01 ` KAMEZAWA Hiroyuki
2011-11-29 23:56 ` [PATCH v7 05/10] per-netns ipv4 sysctl_tcp_mem Glauber Costa
2011-11-29 23:56 ` [PATCH v7 06/10] tcp buffer limitation: per-cgroup limit Glauber Costa
[not found] ` <1322611021-1730-7-git-send-email-glommer-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org>
2011-11-30 2:00 ` KAMEZAWA Hiroyuki
2011-11-29 23:56 ` [PATCH v7 07/10] Display current tcp memory allocation in kmem cgroup Glauber Costa
2011-11-29 23:56 ` [PATCH v7 08/10] Display current tcp failcnt " Glauber Costa
2011-11-30 2:01 ` KAMEZAWA Hiroyuki
2011-11-29 23:57 ` [PATCH v7 09/10] Display maximum tcp memory allocation " Glauber Costa
[not found] ` <1322611021-1730-10-git-send-email-glommer-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org>
2011-11-30 2:02 ` KAMEZAWA Hiroyuki
2011-11-29 23:57 ` [PATCH v7 10/10] Disable task moving when using kernel memory accounting Glauber Costa
[not found] ` <1322611021-1730-11-git-send-email-glommer-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org>
2011-11-30 2:22 ` KAMEZAWA Hiroyuki
[not found] ` <20111130112210.1d979512.kamezawa.hiroyu-+CUm20s59erQFUHtdCDX3A@public.gmane.org>
2011-12-02 18:11 ` Glauber Costa
[not found] ` <4ED914EC.6020500-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org>
2011-12-05 2:18 ` KAMEZAWA Hiroyuki
2011-12-05 9:18 ` Glauber Costa [this message]
[not found] ` <4EDC8C6D.2070001-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org>
2011-12-06 0:07 ` KAMEZAWA Hiroyuki
[not found] ` <1322611021-1730-1-git-send-email-glommer-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org>
2011-11-30 2:11 ` [PATCH v7 00/10] Request for Inclusion: per-cgroup tcp memory pressure KAMEZAWA Hiroyuki
[not found] ` <20111130111152.6b1c7366.kamezawa.hiroyu-+CUm20s59erQFUHtdCDX3A@public.gmane.org>
2011-12-02 18:04 ` Glauber Costa
[not found] ` <4ED91318.1030803-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org>
2011-12-05 2:06 ` KAMEZAWA Hiroyuki
2011-12-05 9:09 ` Glauber Costa
[not found] ` <4EDC8A5F.8040402-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org>
2011-12-05 9:51 ` KAMEZAWA Hiroyuki
2011-12-05 10:28 ` 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=4EDC8C6D.2070001@parallels.com \
--to=glommer@parallels.com \
--cc=avagin@parallels.com \
--cc=cgroups@vger.kernel.org \
--cc=davem@davemloft.net \
--cc=devel@openvz.org \
--cc=ebiederm@xmission.com \
--cc=eric.dumazet@gmail.com \
--cc=gthelen@google.com \
--cc=kamezawa.hiroyu@jp.fujitsu.com \
--cc=kirill@shutemov.name \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=lizf@cn.fujitsu.com \
--cc=netdev@vger.kernel.org \
--cc=paul@paulmenage.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;
as well as URLs for NNTP newsgroup(s).