public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Johannes Weiner <hannes@cmpxchg.org>
To: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>,
	Glauber Costa <glommer@parallels.com>, Tejun Heo <tj@kernel.org>,
	Hugh Dickins <hughd@google.com>,
	Andrew Morton <akpm@linux-foundation.org>,
	Daniel Walsh <dwalsh@redhat.com>,
	"Daniel P. Berrange" <berrange@redhat.com>,
	Li Zefan <lizf@cn.fujitsu.com>,
	LKML <linux-kernel@vger.kernel.org>,
	Cgroups <cgroups@vger.kernel.org>,
	Containers <containers@lists.linux-foundation.org>
Subject: Re: [RFD] Merge task counter into memcg
Date: Wed, 18 Apr 2012 12:39:30 +0200	[thread overview]
Message-ID: <20120418103930.GA1771@cmpxchg.org> (raw)
In-Reply-To: <4F8E7E76.3020202@jp.fujitsu.com>

On Wed, Apr 18, 2012 at 05:42:30PM +0900, KAMEZAWA Hiroyuki wrote:
> (2012/04/18 16:53), Frederic Weisbecker wrote:
> 
> > 2012/4/18 KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>:
> >> (2012/04/18 1:52), Glauber Costa wrote:
> >>
> >>>
> >>>>> In short, I don't think it's better to have task-counting and fd-counting in memcg.
> >>>>> It's kmem, but it's more than that, I think.
> >>>>> Please provide subsys like ulimit.
> >>>>
> >>>> So, you think that while kmem would be enough to prevent fork-bombs,
> >>>> it would still make sense to limit in more traditional ways
> >>>> (ie. ulimit style object limits).  Hmmm....
> >>>>
> >>>
> >>> I personally think this is namespaces business, not cgroups.
> >>> If you have a process namespace, an interface that works to limit the
> >>> number of processes should keep working given the constraints you are
> >>> given.
> >>>
> >>> What doesn't make sense, is to create a *new* interface to limit
> >>> something that doesn't really need to be limited, just because you
> >>> limited a similar resource before.
> >>>
> >>
> >>
> >> Ok, limitiing forkbomb is unnecessary. ulimit+namespace should work.
> >> What we need is user-id namespace, isn't it ? If we have that, ulimit
> >> works enough fine, no overheads.
> > 
> > I have considered using NR_PROC rlimit on top of user namespaces to
> > fight forkbombs inside a container.
> > ie: one user namespace per container with its own rlimit.
> > 
> > But it doesn't work because we can have multiuser apps running in a
> > single container.
> > 
> 
> Ok, then, requirements is different from ulimit. ok, please forget my words.
> 
> My concern for using 'kmem' is that size of object can be changed, and set up
> may be more complicated than limiting 'number' of tasks.
> It's very architecture dependent....But hmm... 

BECAUSE it is architecture/kernel version/runtime dependent how big a
task really is, limiting available kernel memory is much more
meaningful than limiting a container to a number of units of unknown
and dynamically changing size.

How could this argument ever work IN FAVOR of limiting the number of
tasks?

> If slab accounting can handle task_struct accounting, all you wants can be
> done by it (maybe). And implementation can be duplicated.
> (But another aspect of the problem will be speed of development..)
> 
> One idea is (I'm not sure good or bad)...having following control files.
> 
>  - memory.kmem.task_struct.limit_in_bytes
>  - memory.kmem.task_struct.usage_in_bytes
>  - memory.kmem.task_struct.size_in_bytes   # size of task struct.

A task's memory impact is not just its task_struct.

> At 1st, implement this by accounting task struct(or some) directly.
> Later, if we can, replace the implementation with slab(kmem) cgroup..
> and unify interfaces.....a long way to go.
> 
> 2nd idea is
> 
>  - memory.object.task.limit_in_number	# limit the number of tasks.
>  - memory.object.task.usage_in_number   # usage
> 
> If I'm a user, I prefer #2.

The memory controller is there to partition physical memory.  This is
usually measured in bytes and that's why the user-visible object size
in the memory controller is a byte.  When you add other types of
objects, you force the user to know about them and give them a method
of knowing the object size in bytes, which in case of a task, can vary
at runtime.

I will agree to this interface the moment I can buy RAM whose quantity
is measured in number of tasks.

> Hmm, 
>    global kmem limiting           -> done by bytes.
>    special kernel object limiting -> done by the number of objects.
> 
> is...complicated ?

Yes, and you don't provide any arguments!

What are you trying to do that would make limiting the number of tasks
a useful mechanism?

Why should some kernel objects be special?

  parent reply	other threads:[~2012-04-18 10:39 UTC|newest]

Thread overview: 44+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-04-11 18:57 [RFD] Merge task counter into memcg Frederic Weisbecker
2012-04-11 19:21 ` Glauber Costa
2012-04-12 11:19   ` Frederic Weisbecker
2012-04-12  0:56 ` KAMEZAWA Hiroyuki
2012-04-12 11:32   ` Frederic Weisbecker
2012-04-12 11:43     ` Glauber Costa
2012-04-12 12:32       ` Johannes Weiner
2012-04-12 13:12         ` Glauber Costa
2012-04-12 15:30           ` Johannes Weiner
2012-04-12 16:38             ` Tejun Heo
2012-04-12 17:04               ` Cgroup in a single hierarchy (Was: Re: [RFD] Merge task counter into memcg) Glauber Costa
2012-04-17 15:13                 ` Tejun Heo
2012-04-17 15:27                   ` Glauber Costa
2012-04-12 17:13               ` [RFD] Merge task counter into memcg Glauber Costa
2012-04-12 17:23               ` Johannes Weiner
2012-04-12 17:41                 ` Tejun Heo
2012-04-12 17:53                   ` Glauber Costa
2012-04-13  1:42                   ` KAMEZAWA Hiroyuki
2012-04-13  1:50                     ` Glauber Costa
2012-04-13  2:48                       ` KAMEZAWA Hiroyuki
2012-04-17 15:41                     ` Tejun Heo
2012-04-17 16:52                       ` Glauber Costa
2012-04-18  6:51                         ` KAMEZAWA Hiroyuki
2012-04-18  7:53                           ` Frederic Weisbecker
2012-04-18  8:42                             ` KAMEZAWA Hiroyuki
2012-04-18  9:12                               ` Frederic Weisbecker
2012-04-18 10:39                               ` Johannes Weiner [this message]
2012-04-18 11:00                                 ` KAMEZAWA Hiroyuki
2012-04-12 16:54             ` Glauber Costa
2012-04-12  1:07 ` Johannes Weiner
2012-04-12  2:15   ` Glauber Costa
2012-04-12  3:26   ` Li Zefan
2012-04-12 14:55   ` Frederic Weisbecker
2012-04-12 16:34     ` Glauber Costa
2012-04-12 16:59       ` Frederic Weisbecker
2012-04-17 15:17         ` Tejun Heo
2012-04-18  6:54           ` Frederic Weisbecker
2012-04-18  8:10             ` Frederic Weisbecker
2012-04-18 12:00               ` Glauber Costa
2012-04-12  4:00 ` Alexander Nikiforov
     [not found] ` <4F86527C.2080507@samsung.com>
2012-04-17  1:09   ` Frederic Weisbecker
2012-04-17  6:45     ` Alexander Nikiforov
2012-04-17 15:23       ` Tejun Heo
2012-04-19  3:34         ` Alexander Nikiforov

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=20120418103930.GA1771@cmpxchg.org \
    --to=hannes@cmpxchg.org \
    --cc=akpm@linux-foundation.org \
    --cc=berrange@redhat.com \
    --cc=cgroups@vger.kernel.org \
    --cc=containers@lists.linux-foundation.org \
    --cc=dwalsh@redhat.com \
    --cc=fweisbec@gmail.com \
    --cc=glommer@parallels.com \
    --cc=hughd@google.com \
    --cc=kamezawa.hiroyu@jp.fujitsu.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=lizf@cn.fujitsu.com \
    --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