2013-08-14 13:54:11

by RISKÓ Gergely

[permalink] [raw]
Subject: [PATCH] mm: memcontrol: fix handling of swapaccount parameter

Fixed swap accounting option parsing to enable if called without argument.

Signed-off-by: Gergely Risko <[email protected]>
---
mm/memcontrol.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/mm/memcontrol.c b/mm/memcontrol.c
index c290a1c..8ec2507 100644
--- a/mm/memcontrol.c
+++ b/mm/memcontrol.c
@@ -6970,13 +6970,13 @@ struct cgroup_subsys mem_cgroup_subsys = {
static int __init enable_swap_account(char *s)
{
/* consider enabled if no parameter or 1 is given */
- if (!strcmp(s, "1"))
+ if (*s++ != '=' || !*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);
+__setup("swapaccount", enable_swap_account);

static void __init memsw_file_init(void)
{
--
1.8.3.2


2013-08-14 18:36:11

by Michal Hocko

[permalink] [raw]
Subject: Re: [PATCH] mm: memcontrol: fix handling of swapaccount parameter

On Wed 14-08-13 15:21:35, Gergely Risko wrote:
> Fixed swap accounting option parsing to enable if called without argument.

We used to have [no]swapaccount but that one has been removed by a2c8990a
(memsw: remove noswapaccount kernel parameter) so I do not think that
swapaccount without any given value makes much sense these days.

> Signed-off-by: Gergely Risko <[email protected]>
> ---
> mm/memcontrol.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/mm/memcontrol.c b/mm/memcontrol.c
> index c290a1c..8ec2507 100644
> --- a/mm/memcontrol.c
> +++ b/mm/memcontrol.c
> @@ -6970,13 +6970,13 @@ struct cgroup_subsys mem_cgroup_subsys = {
> static int __init enable_swap_account(char *s)
> {
> /* consider enabled if no parameter or 1 is given */
> - if (!strcmp(s, "1"))
> + if (*s++ != '=' || !*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);
> +__setup("swapaccount", enable_swap_account);
>
> static void __init memsw_file_init(void)
> {
> --
> 1.8.3.2
>
> --
> To unsubscribe, send a message with 'unsubscribe linux-mm' in
> the body to [email protected]. For more info on Linux MM,
> see: http://www.linux-mm.org/ .
> Don't email: <a href=mailto:"[email protected]"> [email protected] </a>

--
Michal Hocko
SUSE Labs

2013-08-14 18:50:01

by Michal Hocko

[permalink] [raw]
Subject: Re: [PATCH] mm: memcontrol: fix handling of swapaccount parameter

On Wed 14-08-13 20:36:04, Michal Hocko wrote:
> On Wed 14-08-13 15:21:35, Gergely Risko wrote:
> > Fixed swap accounting option parsing to enable if called without argument.
>
> We used to have [no]swapaccount but that one has been removed by a2c8990a
> (memsw: remove noswapaccount kernel parameter) so I do not think that
> swapaccount without any given value makes much sense these days.

Now that I am reading your changelog again it says this is a fix. Have
you experienced any troubles because of the parameter semantic change?

> > Signed-off-by: Gergely Risko <[email protected]>
> > ---
> > mm/memcontrol.c | 4 ++--
> > 1 file changed, 2 insertions(+), 2 deletions(-)
> >
> > diff --git a/mm/memcontrol.c b/mm/memcontrol.c
> > index c290a1c..8ec2507 100644
> > --- a/mm/memcontrol.c
> > +++ b/mm/memcontrol.c
> > @@ -6970,13 +6970,13 @@ struct cgroup_subsys mem_cgroup_subsys = {
> > static int __init enable_swap_account(char *s)
> > {
> > /* consider enabled if no parameter or 1 is given */
> > - if (!strcmp(s, "1"))
> > + if (*s++ != '=' || !*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);
> > +__setup("swapaccount", enable_swap_account);
> >
> > static void __init memsw_file_init(void)
> > {
> > --
> > 1.8.3.2
> >
> > --
> > To unsubscribe, send a message with 'unsubscribe linux-mm' in
> > the body to [email protected]. For more info on Linux MM,
> > see: http://www.linux-mm.org/ .
> > Don't email: <a href=mailto:"[email protected]"> [email protected] </a>
>
> --
> Michal Hocko
> SUSE Labs
>
> --
> To unsubscribe, send a message with 'unsubscribe linux-mm' in
> the body to [email protected]. For more info on Linux MM,
> see: http://www.linux-mm.org/ .
> Don't email: <a href=mailto:"[email protected]"> [email protected] </a>

--
Michal Hocko
SUSE Labs

2013-08-14 21:22:33

by RISKÓ Gergely

[permalink] [raw]
Subject: Re: [PATCH] mm: memcontrol: fix handling of swapaccount parameter

On Wed, 14 Aug 2013 20:49:56 +0200, Michal Hocko <[email protected]> writes:

> On Wed 14-08-13 20:36:04, Michal Hocko wrote:
>> On Wed 14-08-13 15:21:35, Gergely Risko wrote:
>> > Fixed swap accounting option parsing to enable if called without argument.
>>
>> We used to have [no]swapaccount but that one has been removed by a2c8990a
>> (memsw: remove noswapaccount kernel parameter) so I do not think that
>> swapaccount without any given value makes much sense these days.
>
> Now that I am reading your changelog again it says this is a fix. Have
> you experienced any troubles because of the parameter semantic change?

Yeah, I experienced trouble, I was new to all of this containers +
cgroups + namespaces thingies and while trying out stuff it was totally
impossible for me to enable swap accounting and I didn't understand why.

In Debian swap accounting is off by default, even when you
cgroup_enable=memory. So you have to explicitly enable swapaccounting.

I've found the following documentation snippets all pointing to enable
swap accounting by just simply adding "swapaccount" to the kernel
command line. They all state that "swapaccount" is enough, no need for
"swapaccount=1" (actually some of them don't even mention =1 at all):
- make menuconfig documentation for swap accounting,
- /usr/share/doc/lxc/README.Debian from the lxc package,
- Documentation/kernel-parameters.txt:
swapaccount[=0|1]
[KNL] Enable accounting of swap in memory resource
controller if no parameter or 1 is given or disable
it if 0 is given (See Documentation/cgroups/memory.txt),
- the comment in the source code just above the line ("consider enabled
if no parameter or 1 is given").

And of course it's a trivial thing for the user to try swapaccount=1
when simply swapaccount doesn't work, but it's still a very bad
experience, because the documentation seems to be clear and every
command line change requires a reboot.

It's OK for me if we fix the documentation instead of the code. But
notice that the code is trivial to fix and the documentation has already
spread out to various debian packages, internet forums, bug reports,
etc. So it seems to be less hassle to actually implement the
documentation than to document the code.

Gergely

2013-08-15 07:47:19

by Michal Hocko

[permalink] [raw]
Subject: Re: [PATCH] mm: memcontrol: fix handling of swapaccount parameter

[Let's CC Andrew]

On Wed 14-08-13 23:22:23, Gergely Risko wrote:
> On Wed, 14 Aug 2013 20:49:56 +0200, Michal Hocko <[email protected]> writes:
>
> > On Wed 14-08-13 20:36:04, Michal Hocko wrote:
> >> On Wed 14-08-13 15:21:35, Gergely Risko wrote:
> >> > Fixed swap accounting option parsing to enable if called without argument.
> >>
> >> We used to have [no]swapaccount but that one has been removed by a2c8990a
> >> (memsw: remove noswapaccount kernel parameter) so I do not think that
> >> swapaccount without any given value makes much sense these days.
> >
> > Now that I am reading your changelog again it says this is a fix. Have
> > you experienced any troubles because of the parameter semantic change?
>
> Yeah, I experienced trouble, I was new to all of this containers +
> cgroups + namespaces thingies and while trying out stuff it was totally
> impossible for me to enable swap accounting and I didn't understand why.
>
> In Debian swap accounting is off by default, even when you
> cgroup_enable=memory. So you have to explicitly enable swapaccounting.
>
> I've found the following documentation snippets all pointing to enable
> swap accounting by just simply adding "swapaccount" to the kernel
> command line. They all state that "swapaccount" is enough, no need for
> "swapaccount=1" (actually some of them don't even mention =1 at all):
> - make menuconfig documentation for swap accounting,
> - /usr/share/doc/lxc/README.Debian from the lxc package,

I've submitted a report with patch
(http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=719774)

> - Documentation/kernel-parameters.txt:
> swapaccount[=0|1]
> [KNL] Enable accounting of swap in memory resource
> controller if no parameter or 1 is given or disable
> it if 0 is given (See Documentation/cgroups/memory.txt),
> - the comment in the source code just above the line ("consider enabled
> if no parameter or 1 is given").

Ohh, I have totally missed those left-overs. I would rather fix the doc
than reintroduce the handling without any value.
---
>From 7daf56dd94f7436acf956375e4be6c1482094251 Mon Sep 17 00:00:00 2001
From: Michal Hocko <[email protected]>
Date: Thu, 15 Aug 2013 09:40:31 +0200
Subject: [PATCH] memcg: get rid of swapaccount leftovers

swapaccount kernel parameter without any values has been removed by
a2c8990a (memsw: remove noswapaccount kernel parameter) but it seems
that we didn't get rid of all the left overs.

Make sure that menuconfig help text and kernel-parameters.txt are clear
about value for the paramter and remove the stalled comment which is not
very much useful on its own.

Reported-by: Gergely Risko <[email protected]>
Signed-off-by: Michal Hocko <[email protected]>
---
Documentation/kernel-parameters.txt | 2 +-
init/Kconfig | 2 +-
mm/memcontrol.c | 1 -
3 files changed, 2 insertions(+), 3 deletions(-)

diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt
index 2fe6e76..6a95a03 100644
--- a/Documentation/kernel-parameters.txt
+++ b/Documentation/kernel-parameters.txt
@@ -2941,7 +2941,7 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
improve throughput, but will also increase the
amount of memory reserved for use by the client.

- swapaccount[=0|1]
+ swapaccount=[0|1]
[KNL] Enable accounting of swap in memory resource
controller if no parameter or 1 is given or disable
it if 0 is given (See Documentation/cgroups/memory.txt)
diff --git a/init/Kconfig b/init/Kconfig
index 2bee57c..49cd8af 100644
--- a/init/Kconfig
+++ b/init/Kconfig
@@ -915,7 +915,7 @@ config MEMCG_SWAP_ENABLED
Memory Resource Controller Swap Extension comes with its price in
a bigger memory consumption. General purpose distribution kernels
which want to enable the feature but keep it disabled by default
- and let the user enable it by swapaccount boot command line
+ and let the user enable it by swapaccount=1 boot command line
parameter should have this option unselected.
For those who want to have the feature enabled by default should
select this option (if, for some reason, they need to disable it
diff --git a/mm/memcontrol.c b/mm/memcontrol.c
index b73988a..61e9827 100644
--- a/mm/memcontrol.c
+++ b/mm/memcontrol.c
@@ -6785,7 +6785,6 @@ struct cgroup_subsys mem_cgroup_subsys = {
#ifdef CONFIG_MEMCG_SWAP
static int __init enable_swap_account(char *s)
{
- /* consider enabled if no parameter or 1 is given */
if (!strcmp(s, "1"))
really_do_swap_account = 1;
else if (!strcmp(s, "0"))
--
1.7.10.4

--
Michal Hocko
SUSE Labs

2013-08-15 09:01:12

by RISKÓ Gergely

[permalink] [raw]
Subject: Re: [PATCH] mm: memcontrol: fix handling of swapaccount parameter

On Thu, 15 Aug 2013 09:47:14 +0200, Michal Hocko <[email protected]> writes:

> Ohh, I have totally missed those left-overs. I would rather fix the doc
> than reintroduce the handling without any value.

Okay, fine with me, thanks for fixing these left-overs!

Gergely