diff options
author | Paul Menage <menage@google.com> | 2007-10-19 02:39:30 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-10-19 14:53:36 -0400 |
commit | ddbcc7e8e50aefe467c01cac3dec71f118cd8ac2 (patch) | |
tree | 0881a031e669582f819d572339e955b04abfc3d2 /init | |
parent | 55a230aae650157720becc09cadb7d10efbf5013 (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/Kconfig | 8 | ||||
-rw-r--r-- | init/main.c | 3 |
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 | ||
273 | config 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 | |||
273 | config CPUSETS | 281 | config 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(); |