From: Ben Hutchings Date: Sun, 30 May 2010 22:43:38 +0100 Subject: [PATCH 1/2] cgroups: Allow memory cgroup support to be included but disabled Memory cgroup support has some run-time overhead, so it's useful to include it in a distribution kernel without enabling it by default. Add a kernel config option to disable it by default and a kernel parameter 'cgroup_enable' as the opposite to 'cgroup_disable'. Signed-off-by: Ben Hutchings --- Documentation/kernel-parameters.txt | 4 ++-- init/Kconfig | 8 ++++++++ kernel/cgroup.c | 20 ++++++++++++++++---- mm/memcontrol.c | 3 +++ 4 files changed, 29 insertions(+), 6 deletions(-) diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt index cc85a92..38e0b44 100644 --- a/Documentation/kernel-parameters.txt +++ b/Documentation/kernel-parameters.txt @@ -425,8 +425,8 @@ bytes respectively. Such letter suffixes can also be entirely omitted. ccw_timeout_log [S390] See Documentation/s390/CommonIO for details. - cgroup_disable= [KNL] Disable a particular controller - Format: {name of the controller(s) to disable} + cgroup_disable= [KNL] Disable/enable a particular controller + cgroup_enable= Format: {name of the controller(s) to disable/enable} {Currently supported controllers - "memory"} checkreqprot [SELINUX] Set initial checkreqprot flag value. diff --git a/init/Kconfig b/init/Kconfig index d886b1e..3410369 100644 --- a/init/Kconfig +++ b/init/Kconfig @@ -659,6 +659,14 @@ config CGROUP_MEM_RES_CTLR This config option also selects MM_OWNER config option, which could in turn add some fork/exit overhead. +config CGROUP_MEM_RES_CTLR_DISABLED + bool "Memory Resource Controller disabled by default" + depends on CGROUP_MEM_RES_CTLR + default n + help + Disable the memory group resource controller unless explicitly + enabled using the kernel parameter "cgroup_enable=memory". + config CGROUP_MEM_RES_CTLR_SWAP bool "Memory Resource Controller Swap Extension" depends on CGROUP_MEM_RES_CTLR && SWAP diff --git a/kernel/cgroup.c b/kernel/cgroup.c index 25c7eb5..b3c5aa7 100644 --- a/kernel/cgroup.c +++ b/kernel/cgroup.c @@ -4526,7 +4526,7 @@ static void cgroup_release_agent(struct work_struct *work) mutex_unlock(&cgroup_mutex); } -static int __init cgroup_disable(char *str) +static int __init cgroup_set_disabled(char *str, int value) { int i; char *token; @@ -4542,17 +4542,29 @@ static int __init cgroup_disable(char *str) struct cgroup_subsys *ss = subsys[i]; if (!strcmp(token, ss->name)) { - ss->disabled = 1; - printk(KERN_INFO "Disabling %s control group" - " subsystem\n", ss->name); + ss->disabled = value; + printk(KERN_INFO + "%sabling %s control group subsystem\n", + value ? "Dis" : "En", ss->name); break; } } } return 1; } + +static int __init cgroup_disable(char *str) +{ + return cgroup_set_disabled(str, 1); +} __setup("cgroup_disable=", cgroup_disable); +static int __init cgroup_enable(char *str) +{ + return cgroup_set_disabled(str, 0); +} +__setup("cgroup_enable=", cgroup_enable); + /* * Functons for CSS ID. */ diff --git a/mm/memcontrol.c b/mm/memcontrol.c index 010f916..f660a07 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -5153,6 +5153,9 @@ static void mem_cgroup_move_task(struct cgroup_subsys *ss, struct cgroup_subsys mem_cgroup_subsys = { .name = "memory", +#ifdef CONFIG_CGROUP_MEM_RES_CTLR_DISABLED + .disabled = 1, +#endif .subsys_id = mem_cgroup_subsys_id, .create = mem_cgroup_create, .pre_destroy = mem_cgroup_pre_destroy, -- 1.7.4.4