aboutsummaryrefslogtreecommitdiffstats
path: root/init
diff options
context:
space:
mode:
authorBalbir Singh <balbir@linux.vnet.ibm.com>2008-04-29 04:00:16 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2008-04-29 11:06:10 -0400
commitcf475ad28ac35cc9ba612d67158f29b73b38b05d (patch)
tree2c7cd568d00357bd42643ea602884e731cc24f26 /init
parent29486df325e1fe6e1764afcb19e3370804c2b002 (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/Kconfig7
-rw-r--r--init/main.c1
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
381config MM_OWNER
382 bool
383
381config CGROUP_MEM_RES_CTLR 384config 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
396config SYSFS_DEPRECATED 403config 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();