aboutsummaryrefslogtreecommitdiffstats
path: root/init
diff options
context:
space:
mode:
authorPaul Menage <menage@google.com>2007-10-19 02:39:30 -0400
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2007-10-19 14:53:36 -0400
commitddbcc7e8e50aefe467c01cac3dec71f118cd8ac2 (patch)
tree0881a031e669582f819d572339e955b04abfc3d2 /init
parent55a230aae650157720becc09cadb7d10efbf5013 (diff)
Task Control Groups: basic task cgroup framework
Generic Process Control Groups -------------------------- There have recently been various proposals floating around for resource management/accounting and other task grouping subsystems in the kernel, including ResGroups, User BeanCounters, NSProxy cgroups, and others. These all need the basic abstraction of being able to group together multiple processes in an aggregate, in order to track/limit the resources permitted to those processes, or control other behaviour of the processes, and all implement this grouping in different ways. This patchset provides a framework for tracking and grouping processes into arbitrary "cgroups" and assigning arbitrary state to those groupings, in order to control the behaviour of the cgroup as an aggregate. The intention is that the various resource management and virtualization/cgroup efforts can also become task cgroup clients, with the result that: - the userspace APIs are (somewhat) normalised - it's easier to test e.g. the ResGroups CPU controller in conjunction with the BeanCounters memory controller, or use either of them as the resource-control portion of a virtual server system. - the additional kernel footprint of any of the competing resource management systems is substantially reduced, since it doesn't need to provide process grouping/containment, hence improving their chances of getting into the kernel This patch: Add the main task cgroups framework - the cgroup filesystem, and the basic structures for tracking membership and associating subsystem state objects to tasks. Signed-off-by: Paul Menage <menage@google.com> Cc: Serge E. Hallyn <serue@us.ibm.com> Cc: "Eric W. Biederman" <ebiederm@xmission.com> Cc: Dave Hansen <haveblue@us.ibm.com> Cc: Balbir Singh <balbir@in.ibm.com> Cc: Paul Jackson <pj@sgi.com> Cc: Kirill Korotaev <dev@openvz.org> Cc: Herbert Poetzl <herbert@13thfloor.at> Cc: Srivatsa Vaddagiri <vatsa@in.ibm.com> Cc: Cedric Le Goater <clg@fr.ibm.com> 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/Kconfig8
-rw-r--r--init/main.c3
2 files changed, 11 insertions, 0 deletions
diff --git a/init/Kconfig b/init/Kconfig
index a29a688c47d3..51b3d14f44f1 100644
--- a/init/Kconfig
+++ b/init/Kconfig
@@ -270,6 +270,14 @@ config LOG_BUF_SHIFT
270 13 => 8 KB 270 13 => 8 KB
271 12 => 4 KB 271 12 => 4 KB
272 272
273config CGROUPS
274 bool "Control Group support"
275 help
276 This option will let you use process cgroup subsystems
277 such as Cpusets
278
279 Say N if unsure.
280
273config CPUSETS 281config CPUSETS
274 bool "Cpuset support" 282 bool "Cpuset support"
275 depends on SMP 283 depends on SMP
diff --git a/init/main.c b/init/main.c
index 9def935ab13a..0dd0e7a1f632 100644
--- a/init/main.c
+++ b/init/main.c
@@ -39,6 +39,7 @@
39#include <linux/writeback.h> 39#include <linux/writeback.h>
40#include <linux/cpu.h> 40#include <linux/cpu.h>
41#include <linux/cpuset.h> 41#include <linux/cpuset.h>
42#include <linux/cgroup.h>
42#include <linux/efi.h> 43#include <linux/efi.h>
43#include <linux/tick.h> 44#include <linux/tick.h>
44#include <linux/interrupt.h> 45#include <linux/interrupt.h>
@@ -523,6 +524,7 @@ asmlinkage void __init start_kernel(void)
523 */ 524 */
524 unwind_init(); 525 unwind_init();
525 lockdep_init(); 526 lockdep_init();
527 cgroup_init_early();
526 528
527 local_irq_disable(); 529 local_irq_disable();
528 early_boot_irqs_off(); 530 early_boot_irqs_off();
@@ -640,6 +642,7 @@ asmlinkage void __init start_kernel(void)
640#ifdef CONFIG_PROC_FS 642#ifdef CONFIG_PROC_FS
641 proc_root_init(); 643 proc_root_init();
642#endif 644#endif
645 cgroup_init();
643 cpuset_init(); 646 cpuset_init();
644 taskstats_init_early(); 647 taskstats_init_early();
645 delayacct_init(); 648 delayacct_init();