From: Ben Hutchings Date: Sun, 30 May 2010 22:43:38 +0100 Subject: cgroups: Allow memory cgroup support to be included but disabled Forwarded: no 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 [Bastian Blank: Rename CGROUP_MEM_RES_CTLR_DISABLED to MEMCG_DISABLED] --- Documentation/kernel-parameters.txt | 4 ++-- init/Kconfig | 8 ++++++++ kernel/cgroup.c | 20 ++++++++++++++++---- mm/memcontrol.c | 3 +++ 4 files changed, 29 insertions(+), 6 deletions(-) --- a/Documentation/kernel-parameters.txt +++ b/Documentation/kernel-parameters.txt @@ -580,8 +580,8 @@ bytes respectively. Such letter suffixes 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} The effects of cgroup_disable=foo are: - foo isn't auto-mounted if you mount all cgroups in a single hierarchy --- a/init/Kconfig +++ b/init/Kconfig @@ -990,6 +990,14 @@ config MEMCG Provides a memory resource controller that manages both anonymous memory and page cache. (See Documentation/cgroups/memory.txt) +config MEMCG_DISABLED + bool "Memory Resource Controller disabled by default" + depends on MEMCG + default n + help + Disable the memory group resource controller unless explicitly + enabled using the kernel parameter "cgroup_enable=memory". + config MEMCG_SWAP bool "Memory Resource Controller Swap Extension" depends on MEMCG && SWAP --- a/kernel/cgroup.c +++ b/kernel/cgroup.c @@ -5370,7 +5370,7 @@ out_free: kfree(pathbuf); } -static int __init cgroup_disable(char *str) +static int __init cgroup_set_disabled(char *str, int value) { struct cgroup_subsys *ss; char *token; @@ -5382,17 +5382,29 @@ static int __init cgroup_disable(char *s for_each_subsys(ss, 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); + static int __init cgroup_set_legacy_files_on_dfl(char *str) { printk("cgroup: using legacy files on the default hierarchy\n"); --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -5379,6 +5379,9 @@ static struct cftype memory_files[] = { }; struct cgroup_subsys memory_cgrp_subsys = { +#ifdef CONFIG_MEMCG_DISABLED + .disabled = 1, +#endif .css_alloc = mem_cgroup_css_alloc, .css_online = mem_cgroup_css_online, .css_offline = mem_cgroup_css_offline,