path: root/mm
diff options
authorMichal Hocko <mhocko@suse.cz>2010-11-24 12:57:08 -0800
committerLinus Torvalds <torvalds@linux-foundation.org>2010-11-25 06:50:45 +0900
commita42c390cfa0c2612459d7226ba11612847ca3a64 (patch)
tree1dc06659b4f232461eb6852b8c4d17f8305aca91 /mm
parentb1dd693e5b9348bd68a80e679e03cf9c0973b01b (diff)
cgroups: make swap accounting default behavior configurable
Swap accounting can be configured by CONFIG_CGROUP_MEM_RES_CTLR_SWAP configuration option and then it is turned on by default. There is a boot option (noswapaccount) which can disable this feature. This makes it hard for distributors to enable the configuration option as this feature leads to a bigger memory consumption and this is a no-go for general purpose distribution kernel. On the other hand swap accounting may be very usuful for some workloads. This patch adds a new configuration option which controls the default behavior (CGROUP_MEM_RES_CTLR_SWAP_ENABLED). If the option is selected then the feature is turned on by default. It also adds a new boot parameter swapaccount[=1|0] which enhances the original noswapaccount parameter semantic by means of enable/disable logic (defaults to 1 if no value is provided to be still consistent with noswapaccount). The default behavior is unchanged (if CONFIG_CGROUP_MEM_RES_CTLR_SWAP is enabled then CONFIG_CGROUP_MEM_RES_CTLR_SWAP_ENABLED is enabled as well) Signed-off-by: Michal Hocko <mhocko@suse.cz> Acked-by: Daisuke Nishimura <nishimura@mxp.nes.nec.co.jp> Cc: Balbir Singh <balbir@linux.vnet.ibm.com> Cc: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'mm')
1 files changed, 19 insertions, 2 deletions
diff --git a/mm/memcontrol.c b/mm/memcontrol.c
index 26218df8d19..7a22b412921 100644
--- a/mm/memcontrol.c
+++ b/mm/memcontrol.c
@@ -61,7 +61,14 @@ struct mem_cgroup *root_mem_cgroup __read_mostly;
/* Turned on only when memory cgroup is enabled && really_do_swap_account = 1 */
int do_swap_account __read_mostly;
-static int really_do_swap_account __initdata = 1; /* for remember boot option*/
+/* for remember boot option*/
+static int really_do_swap_account __initdata = 1;
+static int really_do_swap_account __initdata = 0;
#define do_swap_account (0)
@@ -4920,10 +4927,20 @@ struct cgroup_subsys mem_cgroup_subsys = {
+static int __init enable_swap_account(char *s)
+ /* consider enabled if no parameter or 1 is given */
+ if (!s || !strcmp(s, "1"))
+ really_do_swap_account = 1;
+ else if (!strcmp(s, "0"))
+ really_do_swap_account = 0;
+ return 1;
+__setup("swapaccount", enable_swap_account);
static int __init disable_swap_account(char *s)
- really_do_swap_account = 0;
+ enable_swap_account("0");
return 1;
__setup("noswapaccount", disable_swap_account);