diff options
| author | Balbir Singh <balbir@linux.vnet.ibm.com> | 2008-04-29 04:00:16 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-04-29 11:06:10 -0400 |
| commit | cf475ad28ac35cc9ba612d67158f29b73b38b05d (patch) | |
| tree | 2c7cd568d00357bd42643ea602884e731cc24f26 /init | |
| parent | 29486df325e1fe6e1764afcb19e3370804c2b002 (diff) | |
cgroups: add an owner to the mm_struct
Remove the mem_cgroup member from mm_struct and instead adds an owner.
This approach was suggested by Paul Menage. The advantage of this approach
is that, once the mm->owner is known, using the subsystem id, the cgroup
can be determined. It also allows several control groups that are
virtually grouped by mm_struct, to exist independent of the memory
controller i.e., without adding mem_cgroup's for each controller, to
mm_struct.
A new config option CONFIG_MM_OWNER is added and the memory resource
controller selects this config option.
This patch also adds cgroup callbacks to notify subsystems when mm->owner
changes. The mm_cgroup_changed callback is called with the task_lock() of
the new task held and is called just prior to changing the mm->owner.
I am indebted to Paul Menage for the several reviews of this patchset and
helping me make it lighter and simpler.
This patch was tested on a powerpc box, it was compiled with both the
MM_OWNER config turned on and off.
After the thread group leader exits, it's moved to init_css_state by
cgroup_exit(), thus all future charges from runnings threads would be
redirected to the init_css_set's subsystem.
Signed-off-by: Balbir Singh <balbir@linux.vnet.ibm.com>
Cc: Pavel Emelianov <xemul@openvz.org>
Cc: Hugh Dickins <hugh@veritas.com>
Cc: Sudhir Kumar <skumar@linux.vnet.ibm.com>
Cc: YAMAMOTO Takashi <yamamoto@valinux.co.jp>
Cc: Hirokazu Takahashi <taka@valinux.co.jp>
Cc: David Rientjes <rientjes@google.com>,
Cc: Balbir Singh <balbir@linux.vnet.ibm.com>
Acked-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
Acked-by: Pekka Enberg <penberg@cs.helsinki.fi>
Reviewed-by: Paul Menage <menage@google.com>
Cc: Oleg Nesterov <oleg@tv-sign.ru>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'init')
| -rw-r--r-- | init/Kconfig | 7 | ||||
| -rw-r--r-- | init/main.c | 1 |
2 files changed, 8 insertions, 0 deletions
diff --git a/init/Kconfig b/init/Kconfig index a3457926342a..98fa96eac415 100644 --- a/init/Kconfig +++ b/init/Kconfig | |||
| @@ -378,9 +378,13 @@ config RESOURCE_COUNTERS | |||
| 378 | infrastructure that works with cgroups | 378 | infrastructure that works with cgroups |
| 379 | depends on CGROUPS | 379 | depends on CGROUPS |
| 380 | 380 | ||
| 381 | config MM_OWNER | ||
| 382 | bool | ||
| 383 | |||
| 381 | config CGROUP_MEM_RES_CTLR | 384 | config CGROUP_MEM_RES_CTLR |
| 382 | bool "Memory Resource Controller for Control Groups" | 385 | bool "Memory Resource Controller for Control Groups" |
| 383 | depends on CGROUPS && RESOURCE_COUNTERS | 386 | depends on CGROUPS && RESOURCE_COUNTERS |
| 387 | select MM_OWNER | ||
| 384 | help | 388 | help |
| 385 | Provides a memory resource controller that manages both page cache and | 389 | Provides a memory resource controller that manages both page cache and |
| 386 | RSS memory. | 390 | RSS memory. |
| @@ -393,6 +397,9 @@ config CGROUP_MEM_RES_CTLR | |||
| 393 | Only enable when you're ok with these trade offs and really | 397 | Only enable when you're ok with these trade offs and really |
| 394 | sure you need the memory resource controller. | 398 | sure you need the memory resource controller. |
| 395 | 399 | ||
| 400 | This config option also selects MM_OWNER config option, which | ||
| 401 | could in turn add some fork/exit overhead. | ||
| 402 | |||
| 396 | config SYSFS_DEPRECATED | 403 | config SYSFS_DEPRECATED |
| 397 | bool | 404 | bool |
| 398 | 405 | ||
diff --git a/init/main.c b/init/main.c index 1116d2f40cc1..c62c98f381f2 100644 --- a/init/main.c +++ b/init/main.c | |||
| @@ -559,6 +559,7 @@ asmlinkage void __init start_kernel(void) | |||
| 559 | printk(KERN_NOTICE); | 559 | printk(KERN_NOTICE); |
| 560 | printk(linux_banner); | 560 | printk(linux_banner); |
| 561 | setup_arch(&command_line); | 561 | setup_arch(&command_line); |
| 562 | mm_init_owner(&init_mm, &init_task); | ||
| 562 | setup_command_line(command_line); | 563 | setup_command_line(command_line); |
| 563 | unwind_setup(); | 564 | unwind_setup(); |
| 564 | setup_per_cpu_areas(); | 565 | setup_per_cpu_areas(); |
