aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichal Hocko <mhocko@suse.cz>2010-11-24 15:57:08 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2010-11-24 16:50:45 -0500
commita42c390cfa0c2612459d7226ba11612847ca3a64 (patch)
tree1dc06659b4f232461eb6852b8c4d17f8305aca91
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>
-rw-r--r--Documentation/kernel-parameters.txt5
-rw-r--r--init/Kconfig13
-rw-r--r--mm/memcontrol.c21
3 files changed, 37 insertions, 2 deletions
diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt
index 92e83e53148f..cdd2a6e8a3b7 100644
--- a/Documentation/kernel-parameters.txt
+++ b/Documentation/kernel-parameters.txt
@@ -2385,6 +2385,11 @@ and is between 256 and 4096 characters. It is defined in the file
2385 improve throughput, but will also increase the 2385 improve throughput, but will also increase the
2386 amount of memory reserved for use by the client. 2386 amount of memory reserved for use by the client.
2387 2387
2388 swapaccount[=0|1]
2389 [KNL] Enable accounting of swap in memory resource
2390 controller if no parameter or 1 is given or disable
2391 it if 0 is given (See Documentation/cgroups/memory.txt)
2392
2388 swiotlb= [IA-64] Number of I/O TLB slabs 2393 swiotlb= [IA-64] Number of I/O TLB slabs
2389 2394
2390 switches= [HW,M68k] 2395 switches= [HW,M68k]
diff --git a/init/Kconfig b/init/Kconfig
index 88c10468db46..c9728992a776 100644
--- a/init/Kconfig
+++ b/init/Kconfig
@@ -613,6 +613,19 @@ config CGROUP_MEM_RES_CTLR_SWAP
613 if boot option "noswapaccount" is set, swap will not be accounted. 613 if boot option "noswapaccount" is set, swap will not be accounted.
614 Now, memory usage of swap_cgroup is 2 bytes per entry. If swap page 614 Now, memory usage of swap_cgroup is 2 bytes per entry. If swap page
615 size is 4096bytes, 512k per 1Gbytes of swap. 615 size is 4096bytes, 512k per 1Gbytes of swap.
616config CGROUP_MEM_RES_CTLR_SWAP_ENABLED
617 bool "Memory Resource Controller Swap Extension enabled by default"
618 depends on CGROUP_MEM_RES_CTLR_SWAP
619 default y
620 help
621 Memory Resource Controller Swap Extension comes with its price in
622 a bigger memory consumption. General purpose distribution kernels
623 which want to enable the feautre but keep it disabled by default
624 and let the user enable it by swapaccount boot command line
625 parameter should have this option unselected.
626 For those who want to have the feature enabled by default should
627 select this option (if, for some reason, they need to disable it
628 then noswapaccount does the trick).
616 629
617menuconfig CGROUP_SCHED 630menuconfig CGROUP_SCHED
618 bool "Group CPU scheduler" 631 bool "Group CPU scheduler"
diff --git a/mm/memcontrol.c b/mm/memcontrol.c
index 26218df8d19d..7a22b4129211 100644
--- a/mm/memcontrol.c
+++ b/mm/memcontrol.c
@@ -61,7 +61,14 @@ struct mem_cgroup *root_mem_cgroup __read_mostly;
61#ifdef CONFIG_CGROUP_MEM_RES_CTLR_SWAP 61#ifdef CONFIG_CGROUP_MEM_RES_CTLR_SWAP
62/* Turned on only when memory cgroup is enabled && really_do_swap_account = 1 */ 62/* Turned on only when memory cgroup is enabled && really_do_swap_account = 1 */
63int do_swap_account __read_mostly; 63int do_swap_account __read_mostly;
64static int really_do_swap_account __initdata = 1; /* for remember boot option*/ 64
65/* for remember boot option*/
66#ifdef CONFIG_CGROUP_MEM_RES_CTLR_SWAP_ENABLED
67static int really_do_swap_account __initdata = 1;
68#else
69static int really_do_swap_account __initdata = 0;
70#endif
71
65#else 72#else
66#define do_swap_account (0) 73#define do_swap_account (0)
67#endif 74#endif
@@ -4920,10 +4927,20 @@ struct cgroup_subsys mem_cgroup_subsys = {
4920}; 4927};
4921 4928
4922#ifdef CONFIG_CGROUP_MEM_RES_CTLR_SWAP 4929#ifdef CONFIG_CGROUP_MEM_RES_CTLR_SWAP
4930static int __init enable_swap_account(char *s)
4931{
4932 /* consider enabled if no parameter or 1 is given */
4933 if (!s || !strcmp(s, "1"))
4934 really_do_swap_account = 1;
4935 else if (!strcmp(s, "0"))
4936 really_do_swap_account = 0;
4937 return 1;
4938}
4939__setup("swapaccount", enable_swap_account);
4923 4940
4924static int __init disable_swap_account(char *s) 4941static int __init disable_swap_account(char *s)
4925{ 4942{
4926 really_do_swap_account = 0; 4943 enable_swap_account("0");
4927 return 1; 4944 return 1;
4928} 4945}
4929__setup("noswapaccount", disable_swap_account); 4946__setup("noswapaccount", disable_swap_account);