* [LTP] [PATCH] syscalls/madvise09.c: Use custom mount point instead of /sys/fs/cgroup/memory
@ 2017-12-27 7:40 xiao yang
2018-01-04 2:43 ` Xiao Yang
0 siblings, 1 reply; 10+ messages in thread
From: xiao yang @ 2017-12-27 7:40 UTC (permalink / raw)
To: ltp
1) on some distros(e.g. RHEL6), memory cgroup was supported and
mounted on /cgroup/memory by default, but the test was skipped
if /sys/fs/cgroup/memory did not exist.
2) We got the following error if memory cgroup wasn't mounted
on /sys/fs/cgroup/memory:
------------------------------------------------------------
safe_macros.c:169: BROK: madvise09.c:175: mkdir(/sys/fs/cgroup/memory/ltp_madvise09_16386/,0777) failed: EROFS
------------------------------------------------------------
We use custom mount point and mount memory cgroup on it manually
to fix these issues.
Signed-off-by: xiao yang <yangx.jy@cn.fujitsu.com>
---
testcases/kernel/syscalls/madvise/madvise09.c | 29 +++++++++++++++++++++++----
1 file changed, 25 insertions(+), 4 deletions(-)
diff --git a/testcases/kernel/syscalls/madvise/madvise09.c b/testcases/kernel/syscalls/madvise/madvise09.c
index f744405..ef0fa3b 100644
--- a/testcases/kernel/syscalls/madvise/madvise09.c
+++ b/testcases/kernel/syscalls/madvise/madvise09.c
@@ -53,12 +53,14 @@
#include <errno.h>
#include <stdio.h>
#include <ctype.h>
+#include <sys/mount.h>
#include "tst_test.h"
#include "lapi/mmap.h"
-#define MEMCG_PATH "/sys/fs/cgroup/memory/"
+#define MEMCG_PATH "/dev/memcg_madvise09/"
+static int memcg_mounted;
static char cgroup_path[PATH_MAX];
static char tasks_path[PATH_MAX];
static char limit_in_bytes_path[PATH_MAX];
@@ -277,6 +279,15 @@ static void cleanup(void)
{
if (cgroup_path[0] && !access(cgroup_path, F_OK))
rmdir(cgroup_path);
+
+ if (memcg_mounted) {
+ tst_res(TINFO, "Umount memory cgroup after testing");
+ SAFE_UMOUNT(MEMCG_PATH);
+ memcg_mounted = 0;
+ }
+
+ if (!access(MEMCG_PATH, F_OK) && rmdir(MEMCG_PATH))
+ tst_res(TWARN | TERRNO, "Rmdir %s failed", MEMCG_PATH);
}
static void run(void)
@@ -316,10 +327,20 @@ static void setup(void)
{
long int swap_total;
- if (access(MEMCG_PATH, F_OK)) {
- tst_brk(TCONF, "'" MEMCG_PATH
- "' not present, CONFIG_MEMCG missing?");
+ SAFE_MKDIR(MEMCG_PATH, 0777);
+
+ tst_res(TINFO, "Mount memory cgroup on %s", MEMCG_PATH);
+ if (mount("memcg", MEMCG_PATH, "cgroup", 0, "memory") == -1) {
+ if (errno == ENODEV) {
+ if (rmdir(MEMCG_PATH) == -1)
+ tst_res(TWARN | TERRNO, "Rmdir %s failed",
+ MEMCG_PATH);
+ tst_brk(TCONF,
+ "Memory cgroup was not configured in kernel");
+ }
+ tst_brk(TBROK | TERRNO, "Failed to mount memory cgroup");
}
+ memcg_mounted = 1;
if (!access(MEMCG_PATH "memory.memsw.limit_in_bytes", F_OK))
swap_accounting_enabled = 1;
--
1.8.3.1
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [LTP] [PATCH v2] syscalls/madvise09.c: Use custom mount point instead of /sys/fs/cgroup/memory
2018-01-04 2:43 ` Xiao Yang
@ 2018-01-04 2:43 ` xiao yang
2018-01-15 5:37 ` Xiao Yang
0 siblings, 1 reply; 10+ messages in thread
From: xiao yang @ 2018-01-04 2:43 UTC (permalink / raw)
To: ltp
1) on some distros(e.g. RHEL6), memory cgroup was supported and
mounted on /cgroup/memory by default, but the test was skipped
if /sys/fs/cgroup/memory did not exist.
2) We got the following error if memory cgroup wasn't mounted
on /sys/fs/cgroup/memory:
------------------------------------------------------------
safe_macros.c:169: BROK: madvise09.c:175: mkdir(/sys/fs/cgroup/memory/ltp_madvise09_16386/,0777) failed: EROFS
------------------------------------------------------------
We use custom mount point and mount memory cgroup on it manually
to fix these issues.
Signed-off-by: xiao yang <yangx.jy@cn.fujitsu.com>
---
testcases/kernel/syscalls/madvise/madvise09.c | 26 ++++++++++++++++++++++----
1 file changed, 22 insertions(+), 4 deletions(-)
diff --git a/testcases/kernel/syscalls/madvise/madvise09.c b/testcases/kernel/syscalls/madvise/madvise09.c
index f744405..25cf81f 100644
--- a/testcases/kernel/syscalls/madvise/madvise09.c
+++ b/testcases/kernel/syscalls/madvise/madvise09.c
@@ -53,12 +53,14 @@
#include <errno.h>
#include <stdio.h>
#include <ctype.h>
+#include <sys/mount.h>
#include "tst_test.h"
#include "lapi/mmap.h"
-#define MEMCG_PATH "/sys/fs/cgroup/memory/"
+#define MEMCG_PATH "/dev/memcg_madvise09/"
+static int memcg_mounted;
static char cgroup_path[PATH_MAX];
static char tasks_path[PATH_MAX];
static char limit_in_bytes_path[PATH_MAX];
@@ -277,6 +279,15 @@ static void cleanup(void)
{
if (cgroup_path[0] && !access(cgroup_path, F_OK))
rmdir(cgroup_path);
+
+ if (memcg_mounted) {
+ tst_res(TINFO, "Umount memory cgroup after testing");
+ SAFE_UMOUNT(MEMCG_PATH);
+ memcg_mounted = 0;
+ }
+
+ if (!access(MEMCG_PATH, F_OK) && rmdir(MEMCG_PATH))
+ tst_res(TWARN | TERRNO, "Rmdir %s failed", MEMCG_PATH);
}
static void run(void)
@@ -316,10 +327,17 @@ static void setup(void)
{
long int swap_total;
- if (access(MEMCG_PATH, F_OK)) {
- tst_brk(TCONF, "'" MEMCG_PATH
- "' not present, CONFIG_MEMCG missing?");
+ SAFE_MKDIR(MEMCG_PATH, 0777);
+
+ tst_res(TINFO, "Mount memory cgroup on %s", MEMCG_PATH);
+ if (mount("memcg", MEMCG_PATH, "cgroup", 0, "memory") == -1) {
+ if (errno == ENODEV) {
+ tst_brk(TCONF,
+ "Memory cgroup was not configured in kernel");
+ }
+ tst_brk(TBROK | TERRNO, "Failed to mount memory cgroup");
}
+ memcg_mounted = 1;
if (!access(MEMCG_PATH "memory.memsw.limit_in_bytes", F_OK))
swap_accounting_enabled = 1;
--
1.8.3.1
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [LTP] [PATCH] syscalls/madvise09.c: Use custom mount point instead of /sys/fs/cgroup/memory
2017-12-27 7:40 [LTP] [PATCH] syscalls/madvise09.c: Use custom mount point instead of /sys/fs/cgroup/memory xiao yang
@ 2018-01-04 2:43 ` Xiao Yang
2018-01-04 2:43 ` [LTP] [PATCH v2] " xiao yang
0 siblings, 1 reply; 10+ messages in thread
From: Xiao Yang @ 2018-01-04 2:43 UTC (permalink / raw)
To: ltp
Hi,
There is duplicate code with this patch. So i will remove it and send v2
patch.
Thanks,
Xiao Yang
On 2017/12/27 15:40, xiao yang wrote:
> 1) on some distros(e.g. RHEL6), memory cgroup was supported and
> mounted on /cgroup/memory by default, but the test was skipped
> if /sys/fs/cgroup/memory did not exist.
>
> 2) We got the following error if memory cgroup wasn't mounted
> on /sys/fs/cgroup/memory:
> ------------------------------------------------------------
> safe_macros.c:169: BROK: madvise09.c:175: mkdir(/sys/fs/cgroup/memory/ltp_madvise09_16386/,0777) failed: EROFS
> ------------------------------------------------------------
>
> We use custom mount point and mount memory cgroup on it manually
> to fix these issues.
>
> Signed-off-by: xiao yang <yangx.jy@cn.fujitsu.com>
> ---
> testcases/kernel/syscalls/madvise/madvise09.c | 29 +++++++++++++++++++++++----
> 1 file changed, 25 insertions(+), 4 deletions(-)
>
> diff --git a/testcases/kernel/syscalls/madvise/madvise09.c b/testcases/kernel/syscalls/madvise/madvise09.c
> index f744405..ef0fa3b 100644
> --- a/testcases/kernel/syscalls/madvise/madvise09.c
> +++ b/testcases/kernel/syscalls/madvise/madvise09.c
> @@ -53,12 +53,14 @@
> #include <errno.h>
> #include <stdio.h>
> #include <ctype.h>
> +#include <sys/mount.h>
>
> #include "tst_test.h"
> #include "lapi/mmap.h"
>
> -#define MEMCG_PATH "/sys/fs/cgroup/memory/"
> +#define MEMCG_PATH "/dev/memcg_madvise09/"
>
> +static int memcg_mounted;
> static char cgroup_path[PATH_MAX];
> static char tasks_path[PATH_MAX];
> static char limit_in_bytes_path[PATH_MAX];
> @@ -277,6 +279,15 @@ static void cleanup(void)
> {
> if (cgroup_path[0] && !access(cgroup_path, F_OK))
> rmdir(cgroup_path);
> +
> + if (memcg_mounted) {
> + tst_res(TINFO, "Umount memory cgroup after testing");
> + SAFE_UMOUNT(MEMCG_PATH);
> + memcg_mounted = 0;
> + }
> +
> + if (!access(MEMCG_PATH, F_OK) && rmdir(MEMCG_PATH))
> + tst_res(TWARN | TERRNO, "Rmdir %s failed", MEMCG_PATH);
> }
>
> static void run(void)
> @@ -316,10 +327,20 @@ static void setup(void)
> {
> long int swap_total;
>
> - if (access(MEMCG_PATH, F_OK)) {
> - tst_brk(TCONF, "'" MEMCG_PATH
> - "' not present, CONFIG_MEMCG missing?");
> + SAFE_MKDIR(MEMCG_PATH, 0777);
> +
> + tst_res(TINFO, "Mount memory cgroup on %s", MEMCG_PATH);
> + if (mount("memcg", MEMCG_PATH, "cgroup", 0, "memory") == -1) {
> + if (errno == ENODEV) {
> + if (rmdir(MEMCG_PATH) == -1)
> + tst_res(TWARN | TERRNO, "Rmdir %s failed",
> + MEMCG_PATH);
> + tst_brk(TCONF,
> + "Memory cgroup was not configured in kernel");
> + }
> + tst_brk(TBROK | TERRNO, "Failed to mount memory cgroup");
> }
> + memcg_mounted = 1;
>
> if (!access(MEMCG_PATH "memory.memsw.limit_in_bytes", F_OK))
> swap_accounting_enabled = 1;
^ permalink raw reply [flat|nested] 10+ messages in thread
* [LTP] [PATCH v2] syscalls/madvise09.c: Use custom mount point instead of /sys/fs/cgroup/memory
2018-01-04 2:43 ` [LTP] [PATCH v2] " xiao yang
@ 2018-01-15 5:37 ` Xiao Yang
2018-01-15 8:06 ` Jan Stancek
0 siblings, 1 reply; 10+ messages in thread
From: Xiao Yang @ 2018-01-15 5:37 UTC (permalink / raw)
To: ltp
Hi Jan,
Could you help me review this patch.
Thanks,
Xiao Yang
On 2018/01/04 10:43, xiao yang wrote:
> 1) on some distros(e.g. RHEL6), memory cgroup was supported and
> mounted on /cgroup/memory by default, but the test was skipped
> if /sys/fs/cgroup/memory did not exist.
>
> 2) We got the following error if memory cgroup wasn't mounted
> on /sys/fs/cgroup/memory:
> ------------------------------------------------------------
> safe_macros.c:169: BROK: madvise09.c:175: mkdir(/sys/fs/cgroup/memory/ltp_madvise09_16386/,0777) failed: EROFS
> ------------------------------------------------------------
>
> We use custom mount point and mount memory cgroup on it manually
> to fix these issues.
>
> Signed-off-by: xiao yang <yangx.jy@cn.fujitsu.com>
> ---
> testcases/kernel/syscalls/madvise/madvise09.c | 26 ++++++++++++++++++++++----
> 1 file changed, 22 insertions(+), 4 deletions(-)
>
> diff --git a/testcases/kernel/syscalls/madvise/madvise09.c b/testcases/kernel/syscalls/madvise/madvise09.c
> index f744405..25cf81f 100644
> --- a/testcases/kernel/syscalls/madvise/madvise09.c
> +++ b/testcases/kernel/syscalls/madvise/madvise09.c
> @@ -53,12 +53,14 @@
> #include <errno.h>
> #include <stdio.h>
> #include <ctype.h>
> +#include <sys/mount.h>
>
> #include "tst_test.h"
> #include "lapi/mmap.h"
>
> -#define MEMCG_PATH "/sys/fs/cgroup/memory/"
> +#define MEMCG_PATH "/dev/memcg_madvise09/"
>
> +static int memcg_mounted;
> static char cgroup_path[PATH_MAX];
> static char tasks_path[PATH_MAX];
> static char limit_in_bytes_path[PATH_MAX];
> @@ -277,6 +279,15 @@ static void cleanup(void)
> {
> if (cgroup_path[0] && !access(cgroup_path, F_OK))
> rmdir(cgroup_path);
> +
> + if (memcg_mounted) {
> + tst_res(TINFO, "Umount memory cgroup after testing");
> + SAFE_UMOUNT(MEMCG_PATH);
> + memcg_mounted = 0;
> + }
> +
> + if (!access(MEMCG_PATH, F_OK) && rmdir(MEMCG_PATH))
> + tst_res(TWARN | TERRNO, "Rmdir %s failed", MEMCG_PATH);
> }
>
> static void run(void)
> @@ -316,10 +327,17 @@ static void setup(void)
> {
> long int swap_total;
>
> - if (access(MEMCG_PATH, F_OK)) {
> - tst_brk(TCONF, "'" MEMCG_PATH
> - "' not present, CONFIG_MEMCG missing?");
> + SAFE_MKDIR(MEMCG_PATH, 0777);
> +
> + tst_res(TINFO, "Mount memory cgroup on %s", MEMCG_PATH);
> + if (mount("memcg", MEMCG_PATH, "cgroup", 0, "memory") == -1) {
> + if (errno == ENODEV) {
> + tst_brk(TCONF,
> + "Memory cgroup was not configured in kernel");
> + }
> + tst_brk(TBROK | TERRNO, "Failed to mount memory cgroup");
> }
> + memcg_mounted = 1;
>
> if (!access(MEMCG_PATH "memory.memsw.limit_in_bytes", F_OK))
> swap_accounting_enabled = 1;
^ permalink raw reply [flat|nested] 10+ messages in thread
* [LTP] [PATCH v2] syscalls/madvise09.c: Use custom mount point instead of /sys/fs/cgroup/memory
2018-01-15 5:37 ` Xiao Yang
@ 2018-01-15 8:06 ` Jan Stancek
2018-01-15 9:27 ` Xiao Yang
0 siblings, 1 reply; 10+ messages in thread
From: Jan Stancek @ 2018-01-15 8:06 UTC (permalink / raw)
To: ltp
----- Original Message -----
> Hi Jan,
>
> Could you help me review this patch.
Hi,
I think it would be better to use existing mount, if it's already mounted.
umount may fail with -EBUSY if the subsystem is already part of existing
hierarchy.
Regards,
Jan
>
> Thanks,
> Xiao Yang
> On 2018/01/04 10:43, xiao yang wrote:
> > 1) on some distros(e.g. RHEL6), memory cgroup was supported and
> > mounted on /cgroup/memory by default, but the test was skipped
> > if /sys/fs/cgroup/memory did not exist.
> >
> > 2) We got the following error if memory cgroup wasn't mounted
> > on /sys/fs/cgroup/memory:
> > ------------------------------------------------------------
> > safe_macros.c:169: BROK: madvise09.c:175:
> > mkdir(/sys/fs/cgroup/memory/ltp_madvise09_16386/,0777) failed: EROFS
> > ------------------------------------------------------------
> >
> > We use custom mount point and mount memory cgroup on it manually
> > to fix these issues.
> >
> > Signed-off-by: xiao yang <yangx.jy@cn.fujitsu.com>
> > ---
> > testcases/kernel/syscalls/madvise/madvise09.c | 26
> > ++++++++++++++++++++++----
> > 1 file changed, 22 insertions(+), 4 deletions(-)
> >
> > diff --git a/testcases/kernel/syscalls/madvise/madvise09.c
> > b/testcases/kernel/syscalls/madvise/madvise09.c
> > index f744405..25cf81f 100644
> > --- a/testcases/kernel/syscalls/madvise/madvise09.c
> > +++ b/testcases/kernel/syscalls/madvise/madvise09.c
> > @@ -53,12 +53,14 @@
> > #include <errno.h>
> > #include <stdio.h>
> > #include <ctype.h>
> > +#include <sys/mount.h>
> >
> > #include "tst_test.h"
> > #include "lapi/mmap.h"
> >
> > -#define MEMCG_PATH "/sys/fs/cgroup/memory/"
> > +#define MEMCG_PATH "/dev/memcg_madvise09/"
> >
> > +static int memcg_mounted;
> > static char cgroup_path[PATH_MAX];
> > static char tasks_path[PATH_MAX];
> > static char limit_in_bytes_path[PATH_MAX];
> > @@ -277,6 +279,15 @@ static void cleanup(void)
> > {
> > if (cgroup_path[0] && !access(cgroup_path, F_OK))
> > rmdir(cgroup_path);
> > +
> > + if (memcg_mounted) {
> > + tst_res(TINFO, "Umount memory cgroup after testing");
> > + SAFE_UMOUNT(MEMCG_PATH);
> > + memcg_mounted = 0;
> > + }
> > +
> > + if (!access(MEMCG_PATH, F_OK) && rmdir(MEMCG_PATH))
> > + tst_res(TWARN | TERRNO, "Rmdir %s failed", MEMCG_PATH);
> > }
> >
> > static void run(void)
> > @@ -316,10 +327,17 @@ static void setup(void)
> > {
> > long int swap_total;
> >
> > - if (access(MEMCG_PATH, F_OK)) {
> > - tst_brk(TCONF, "'" MEMCG_PATH
> > - "' not present, CONFIG_MEMCG missing?");
> > + SAFE_MKDIR(MEMCG_PATH, 0777);
> > +
> > + tst_res(TINFO, "Mount memory cgroup on %s", MEMCG_PATH);
> > + if (mount("memcg", MEMCG_PATH, "cgroup", 0, "memory") == -1) {
> > + if (errno == ENODEV) {
> > + tst_brk(TCONF,
> > + "Memory cgroup was not configured in kernel");
> > + }
> > + tst_brk(TBROK | TERRNO, "Failed to mount memory cgroup");
> > }
> > + memcg_mounted = 1;
> >
> > if (!access(MEMCG_PATH "memory.memsw.limit_in_bytes", F_OK))
> > swap_accounting_enabled = 1;
>
>
>
>
^ permalink raw reply [flat|nested] 10+ messages in thread
* [LTP] [PATCH v2] syscalls/madvise09.c: Use custom mount point instead of /sys/fs/cgroup/memory
2018-01-15 8:06 ` Jan Stancek
@ 2018-01-15 9:27 ` Xiao Yang
2018-01-15 15:58 ` Jan Stancek
0 siblings, 1 reply; 10+ messages in thread
From: Xiao Yang @ 2018-01-15 9:27 UTC (permalink / raw)
To: ltp
On 2018/01/15 16:06, Jan Stancek wrote:
>
> ----- Original Message -----
>> Hi Jan,
>>
>> Could you help me review this patch.
> Hi,
>
> I think it would be better to use existing mount, if it's already mounted.
> umount may fail with -EBUSY if the subsystem is already part of existing
> hierarchy.
Hi Jan,
1) I want to run madvise09 on as many distros supporting memcg as possible.
2) The custom mount point is just created and mounted for running
madvise09, and will be
released after finishing madvise09, so i think it doesn't affect
existing hierarchy. Additionally,
i use custom mount point according to some tests(oom03, oom05,
cpuset01, etc.) on LTP.
Thanks,
Xiao Yang
> Regards,
> Jan
>
>> Thanks,
>> Xiao Yang
>> On 2018/01/04 10:43, xiao yang wrote:
>>> 1) on some distros(e.g. RHEL6), memory cgroup was supported and
>>> mounted on /cgroup/memory by default, but the test was skipped
>>> if /sys/fs/cgroup/memory did not exist.
>>>
>>> 2) We got the following error if memory cgroup wasn't mounted
>>> on /sys/fs/cgroup/memory:
>>> ------------------------------------------------------------
>>> safe_macros.c:169: BROK: madvise09.c:175:
>>> mkdir(/sys/fs/cgroup/memory/ltp_madvise09_16386/,0777) failed: EROFS
>>> ------------------------------------------------------------
>>>
>>> We use custom mount point and mount memory cgroup on it manually
>>> to fix these issues.
>>>
>>> Signed-off-by: xiao yang<yangx.jy@cn.fujitsu.com>
>>> ---
>>> testcases/kernel/syscalls/madvise/madvise09.c | 26
>>> ++++++++++++++++++++++----
>>> 1 file changed, 22 insertions(+), 4 deletions(-)
>>>
>>> diff --git a/testcases/kernel/syscalls/madvise/madvise09.c
>>> b/testcases/kernel/syscalls/madvise/madvise09.c
>>> index f744405..25cf81f 100644
>>> --- a/testcases/kernel/syscalls/madvise/madvise09.c
>>> +++ b/testcases/kernel/syscalls/madvise/madvise09.c
>>> @@ -53,12 +53,14 @@
>>> #include<errno.h>
>>> #include<stdio.h>
>>> #include<ctype.h>
>>> +#include<sys/mount.h>
>>>
>>> #include "tst_test.h"
>>> #include "lapi/mmap.h"
>>>
>>> -#define MEMCG_PATH "/sys/fs/cgroup/memory/"
>>> +#define MEMCG_PATH "/dev/memcg_madvise09/"
>>>
>>> +static int memcg_mounted;
>>> static char cgroup_path[PATH_MAX];
>>> static char tasks_path[PATH_MAX];
>>> static char limit_in_bytes_path[PATH_MAX];
>>> @@ -277,6 +279,15 @@ static void cleanup(void)
>>> {
>>> if (cgroup_path[0]&& !access(cgroup_path, F_OK))
>>> rmdir(cgroup_path);
>>> +
>>> + if (memcg_mounted) {
>>> + tst_res(TINFO, "Umount memory cgroup after testing");
>>> + SAFE_UMOUNT(MEMCG_PATH);
>>> + memcg_mounted = 0;
>>> + }
>>> +
>>> + if (!access(MEMCG_PATH, F_OK)&& rmdir(MEMCG_PATH))
>>> + tst_res(TWARN | TERRNO, "Rmdir %s failed", MEMCG_PATH);
>>> }
>>>
>>> static void run(void)
>>> @@ -316,10 +327,17 @@ static void setup(void)
>>> {
>>> long int swap_total;
>>>
>>> - if (access(MEMCG_PATH, F_OK)) {
>>> - tst_brk(TCONF, "'" MEMCG_PATH
>>> - "' not present, CONFIG_MEMCG missing?");
>>> + SAFE_MKDIR(MEMCG_PATH, 0777);
>>> +
>>> + tst_res(TINFO, "Mount memory cgroup on %s", MEMCG_PATH);
>>> + if (mount("memcg", MEMCG_PATH, "cgroup", 0, "memory") == -1) {
>>> + if (errno == ENODEV) {
>>> + tst_brk(TCONF,
>>> + "Memory cgroup was not configured in kernel");
>>> + }
>>> + tst_brk(TBROK | TERRNO, "Failed to mount memory cgroup");
>>> }
>>> + memcg_mounted = 1;
>>>
>>> if (!access(MEMCG_PATH "memory.memsw.limit_in_bytes", F_OK))
>>> swap_accounting_enabled = 1;
>>
>>
>>
>
> .
>
^ permalink raw reply [flat|nested] 10+ messages in thread
* [LTP] [PATCH v2] syscalls/madvise09.c: Use custom mount point instead of /sys/fs/cgroup/memory
2018-01-15 9:27 ` Xiao Yang
@ 2018-01-15 15:58 ` Jan Stancek
2018-01-16 9:11 ` Xiao Yang
0 siblings, 1 reply; 10+ messages in thread
From: Jan Stancek @ 2018-01-15 15:58 UTC (permalink / raw)
To: ltp
----- Original Message -----
> On 2018/01/15 16:06, Jan Stancek wrote:
> >
> > ----- Original Message -----
> >> Hi Jan,
> >>
> >> Could you help me review this patch.
> > Hi,
> >
> > I think it would be better to use existing mount, if it's already mounted.
> > umount may fail with -EBUSY if the subsystem is already part of existing
> > hierarchy.
> Hi Jan,
>
> 1) I want to run madvise09 on as many distros supporting memcg as possible.
>
> 2) The custom mount point is just created and mounted for running
> madvise09, and will be
> released after finishing madvise09, so i think it doesn't affect
> existing hierarchy.
Here's example:
This is state of the system prior to madvise09:
# mkdir -p /tmp/1; mount -t cgroup -o memory,hugetlb none /tmp/1; echo $?
0
And now you run madvise09, that tries to mount "memory" cgroup, which is going to fail:
# mkdir -p /tmp/2; mount -t cgroup -o memory none /tmp/2; echo $?
mount: none is already mounted or /tmp/2 busy
none is already mounted on /tmp/1
32
> Additionally,
> i use custom mount point according to some tests(oom03, oom05,
> cpuset01, etc.) on LTP.
OK, so my example, though possible is likely not very common.
We are close to next LTP release, can this wait or is this a regression
that should be addressed before release? (Adding Cyril to CC)
Regards,
Jan
>
> Thanks,
> Xiao Yang
> > Regards,
> > Jan
> >
> >> Thanks,
> >> Xiao Yang
> >> On 2018/01/04 10:43, xiao yang wrote:
> >>> 1) on some distros(e.g. RHEL6), memory cgroup was supported and
> >>> mounted on /cgroup/memory by default, but the test was skipped
> >>> if /sys/fs/cgroup/memory did not exist.
> >>>
> >>> 2) We got the following error if memory cgroup wasn't mounted
> >>> on /sys/fs/cgroup/memory:
> >>> ------------------------------------------------------------
> >>> safe_macros.c:169: BROK: madvise09.c:175:
> >>> mkdir(/sys/fs/cgroup/memory/ltp_madvise09_16386/,0777) failed: EROFS
> >>> ------------------------------------------------------------
> >>>
> >>> We use custom mount point and mount memory cgroup on it manually
> >>> to fix these issues.
> >>>
> >>> Signed-off-by: xiao yang<yangx.jy@cn.fujitsu.com>
> >>> ---
> >>> testcases/kernel/syscalls/madvise/madvise09.c | 26
> >>> ++++++++++++++++++++++----
> >>> 1 file changed, 22 insertions(+), 4 deletions(-)
> >>>
> >>> diff --git a/testcases/kernel/syscalls/madvise/madvise09.c
> >>> b/testcases/kernel/syscalls/madvise/madvise09.c
> >>> index f744405..25cf81f 100644
> >>> --- a/testcases/kernel/syscalls/madvise/madvise09.c
> >>> +++ b/testcases/kernel/syscalls/madvise/madvise09.c
> >>> @@ -53,12 +53,14 @@
> >>> #include<errno.h>
> >>> #include<stdio.h>
> >>> #include<ctype.h>
> >>> +#include<sys/mount.h>
> >>>
> >>> #include "tst_test.h"
> >>> #include "lapi/mmap.h"
> >>>
> >>> -#define MEMCG_PATH "/sys/fs/cgroup/memory/"
> >>> +#define MEMCG_PATH "/dev/memcg_madvise09/"
> >>>
> >>> +static int memcg_mounted;
> >>> static char cgroup_path[PATH_MAX];
> >>> static char tasks_path[PATH_MAX];
> >>> static char limit_in_bytes_path[PATH_MAX];
> >>> @@ -277,6 +279,15 @@ static void cleanup(void)
> >>> {
> >>> if (cgroup_path[0]&& !access(cgroup_path, F_OK))
> >>> rmdir(cgroup_path);
> >>> +
> >>> + if (memcg_mounted) {
> >>> + tst_res(TINFO, "Umount memory cgroup after testing");
> >>> + SAFE_UMOUNT(MEMCG_PATH);
> >>> + memcg_mounted = 0;
> >>> + }
> >>> +
> >>> + if (!access(MEMCG_PATH, F_OK)&& rmdir(MEMCG_PATH))
> >>> + tst_res(TWARN | TERRNO, "Rmdir %s failed", MEMCG_PATH);
> >>> }
> >>>
> >>> static void run(void)
> >>> @@ -316,10 +327,17 @@ static void setup(void)
> >>> {
> >>> long int swap_total;
> >>>
> >>> - if (access(MEMCG_PATH, F_OK)) {
> >>> - tst_brk(TCONF, "'" MEMCG_PATH
> >>> - "' not present, CONFIG_MEMCG missing?");
> >>> + SAFE_MKDIR(MEMCG_PATH, 0777);
> >>> +
> >>> + tst_res(TINFO, "Mount memory cgroup on %s", MEMCG_PATH);
> >>> + if (mount("memcg", MEMCG_PATH, "cgroup", 0, "memory") == -1) {
> >>> + if (errno == ENODEV) {
> >>> + tst_brk(TCONF,
> >>> + "Memory cgroup was not configured in kernel");
> >>> + }
> >>> + tst_brk(TBROK | TERRNO, "Failed to mount memory cgroup");
> >>> }
> >>> + memcg_mounted = 1;
> >>>
> >>> if (!access(MEMCG_PATH "memory.memsw.limit_in_bytes", F_OK))
> >>> swap_accounting_enabled = 1;
> >>
> >>
> >>
> >
> > .
> >
>
>
>
>
^ permalink raw reply [flat|nested] 10+ messages in thread
* [LTP] [PATCH v2] syscalls/madvise09.c: Use custom mount point instead of /sys/fs/cgroup/memory
2018-01-15 15:58 ` Jan Stancek
@ 2018-01-16 9:11 ` Xiao Yang
2018-01-16 9:19 ` Xiao Yang
0 siblings, 1 reply; 10+ messages in thread
From: Xiao Yang @ 2018-01-16 9:11 UTC (permalink / raw)
To: ltp
On 2018/01/15 23:58, Jan Stancek wrote:
> ----- Original Message -----
>> On 2018/01/15 16:06, Jan Stancek wrote:
>>> ----- Original Message -----
>>>> Hi Jan,
>>>>
>>>> Could you help me review this patch.
>>> Hi,
>>>
>>> I think it would be better to use existing mount, if it's already mounted.
>>> umount may fail with -EBUSY if the subsystem is already part of existing
>>> hierarchy.
>> Hi Jan,
>>
>> 1) I want to run madvise09 on as many distros supporting memcg as possible.
>>
>> 2) The custom mount point is just created and mounted for running
>> madvise09, and will be
>> released after finishing madvise09, so i think it doesn't affect
>> existing hierarchy.
> Here's example:
>
> This is state of the system prior to madvise09:
> # mkdir -p /tmp/1; mount -t cgroup -o memory,hugetlb none /tmp/1; echo $?
> 0
>
> And now you run madvise09, that tries to mount "memory" cgroup, which is going to fail:
> # mkdir -p /tmp/2; mount -t cgroup -o memory none /tmp/2; echo $?
> mount: none is already mounted or /tmp/2 busy
> none is already mounted on /tmp/1
> 32
Hi Jan,
Thanks for your detailed explanation.
According to documented behavior of cgroups [1], it seems that only a new cgroup
hierarchy with the same options of the existing hierarchy can be mounted sucessfully,
and mount with different options will fail and return EBUSY as expected.
[1] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/cgroup-v1/cgroups.txt
Combinations of sucess:
-----------------------------------------------------------------------------
1) # mkdir -p /tmp/1; mount -t cgroup -o memory,hugetlb none /tmp/1; echo $?
0
# mkdir -p /tmp/2; mount -t cgroup -o memory,hugetlb none /tmp/2; echo $?
0
2) # mkdir -p /tmp/1; mount -t cgroup -o memory none /tmp/1; echo $?
0
# mkdir -p /tmp/2; mount -t cgroup -o memory none /tmp/2; echo $?
0
-----------------------------------------------------------------------------
Combinations of failure:
-----------------------------------------------------------------------------
3) # mkdir -p /tmp/1; mount -t cgroup -o memory,hugetlb none /tmp/1; echo $?
0
# mkdir -p /tmp/2; mount -t cgroup -o memory none /tmp/2; echo $?
mount: none is already mounted or /tmp/2 busy
none is already mounted on /tmp/1
32
4) # mkdir -p /tmp/1; mount -t cgroup -o memory none /tmp/1; echo $?
0
# mkdir -p /tmp/2; mount -t cgroup -o memory,hugetlb none /tmp/2; echo $?
mount: none is already mounted or /tmp/2 busy
none is already mounted on /tmp/1
32
-----------------------------------------------------------------------------
I am not sure how to fix all errors.
>> Additionally,
>> i use custom mount point according to some tests(oom03, oom05,
>> cpuset01, etc.) on LTP.
> OK, so my example, though possible is likely not very common.
>
> We are close to next LTP release, can this wait or is this a regression
> that should be addressed before release? (Adding Cyril to CC)
I think we can hold it until LTP is released.
Thanks,
Xiao Yang.
> Regards,
> Jan
>
>> Thanks,
>> Xiao Yang
>>> Regards,
>>> Jan
>>>
>>>> Thanks,
>>>> Xiao Yang
>>>> On 2018/01/04 10:43, xiao yang wrote:
>>>>> 1) on some distros(e.g. RHEL6), memory cgroup was supported and
>>>>> mounted on /cgroup/memory by default, but the test was skipped
>>>>> if /sys/fs/cgroup/memory did not exist.
>>>>>
>>>>> 2) We got the following error if memory cgroup wasn't mounted
>>>>> on /sys/fs/cgroup/memory:
>>>>> ------------------------------------------------------------
>>>>> safe_macros.c:169: BROK: madvise09.c:175:
>>>>> mkdir(/sys/fs/cgroup/memory/ltp_madvise09_16386/,0777) failed: EROFS
>>>>> ------------------------------------------------------------
>>>>>
>>>>> We use custom mount point and mount memory cgroup on it manually
>>>>> to fix these issues.
>>>>>
>>>>> Signed-off-by: xiao yang<yangx.jy@cn.fujitsu.com>
>>>>> ---
>>>>> testcases/kernel/syscalls/madvise/madvise09.c | 26
>>>>> ++++++++++++++++++++++----
>>>>> 1 file changed, 22 insertions(+), 4 deletions(-)
>>>>>
>>>>> diff --git a/testcases/kernel/syscalls/madvise/madvise09.c
>>>>> b/testcases/kernel/syscalls/madvise/madvise09.c
>>>>> index f744405..25cf81f 100644
>>>>> --- a/testcases/kernel/syscalls/madvise/madvise09.c
>>>>> +++ b/testcases/kernel/syscalls/madvise/madvise09.c
>>>>> @@ -53,12 +53,14 @@
>>>>> #include<errno.h>
>>>>> #include<stdio.h>
>>>>> #include<ctype.h>
>>>>> +#include<sys/mount.h>
>>>>>
>>>>> #include "tst_test.h"
>>>>> #include "lapi/mmap.h"
>>>>>
>>>>> -#define MEMCG_PATH "/sys/fs/cgroup/memory/"
>>>>> +#define MEMCG_PATH "/dev/memcg_madvise09/"
>>>>>
>>>>> +static int memcg_mounted;
>>>>> static char cgroup_path[PATH_MAX];
>>>>> static char tasks_path[PATH_MAX];
>>>>> static char limit_in_bytes_path[PATH_MAX];
>>>>> @@ -277,6 +279,15 @@ static void cleanup(void)
>>>>> {
>>>>> if (cgroup_path[0]&& !access(cgroup_path, F_OK))
>>>>> rmdir(cgroup_path);
>>>>> +
>>>>> + if (memcg_mounted) {
>>>>> + tst_res(TINFO, "Umount memory cgroup after testing");
>>>>> + SAFE_UMOUNT(MEMCG_PATH);
>>>>> + memcg_mounted = 0;
>>>>> + }
>>>>> +
>>>>> + if (!access(MEMCG_PATH, F_OK)&& rmdir(MEMCG_PATH))
>>>>> + tst_res(TWARN | TERRNO, "Rmdir %s failed", MEMCG_PATH);
>>>>> }
>>>>>
>>>>> static void run(void)
>>>>> @@ -316,10 +327,17 @@ static void setup(void)
>>>>> {
>>>>> long int swap_total;
>>>>>
>>>>> - if (access(MEMCG_PATH, F_OK)) {
>>>>> - tst_brk(TCONF, "'" MEMCG_PATH
>>>>> - "' not present, CONFIG_MEMCG missing?");
>>>>> + SAFE_MKDIR(MEMCG_PATH, 0777);
>>>>> +
>>>>> + tst_res(TINFO, "Mount memory cgroup on %s", MEMCG_PATH);
>>>>> + if (mount("memcg", MEMCG_PATH, "cgroup", 0, "memory") == -1) {
>>>>> + if (errno == ENODEV) {
>>>>> + tst_brk(TCONF,
>>>>> + "Memory cgroup was not configured in kernel");
>>>>> + }
>>>>> + tst_brk(TBROK | TERRNO, "Failed to mount memory cgroup");
>>>>> }
>>>>> + memcg_mounted = 1;
>>>>>
>>>>> if (!access(MEMCG_PATH "memory.memsw.limit_in_bytes", F_OK))
>>>>> swap_accounting_enabled = 1;
>>>>
>>>>
>>> .
>>>
>>
>>
>>
>
> .
>
^ permalink raw reply [flat|nested] 10+ messages in thread
* [LTP] [PATCH v2] syscalls/madvise09.c: Use custom mount point instead of /sys/fs/cgroup/memory
2018-01-16 9:11 ` Xiao Yang
@ 2018-01-16 9:19 ` Xiao Yang
2018-01-16 10:32 ` Cyril Hrubis
0 siblings, 1 reply; 10+ messages in thread
From: Xiao Yang @ 2018-01-16 9:19 UTC (permalink / raw)
To: ltp
Hi,
Adding Cyril to CC. :-)
Thanks,
Xiao Yang
On 2018/01/16 17:11, Xiao Yang wrote:
> On 2018/01/15 23:58, Jan Stancek wrote:
>> ----- Original Message -----
>>> On 2018/01/15 16:06, Jan Stancek wrote:
>>>> ----- Original Message -----
>>>>> Hi Jan,
>>>>>
>>>>> Could you help me review this patch.
>>>> Hi,
>>>>
>>>> I think it would be better to use existing mount, if it's already
>>>> mounted.
>>>> umount may fail with -EBUSY if the subsystem is already part of
>>>> existing
>>>> hierarchy.
>>> Hi Jan,
>>>
>>> 1) I want to run madvise09 on as many distros supporting memcg as
>>> possible.
>>>
>>> 2) The custom mount point is just created and mounted for running
>>> madvise09, and will be
>>> released after finishing madvise09, so i think it doesn't affect
>>> existing hierarchy.
>> Here's example:
>>
>> This is state of the system prior to madvise09:
>> # mkdir -p /tmp/1; mount -t cgroup -o memory,hugetlb none /tmp/1;
>> echo $?
>> 0
>>
>> And now you run madvise09, that tries to mount "memory" cgroup, which
>> is going to fail:
>> # mkdir -p /tmp/2; mount -t cgroup -o memory none /tmp/2; echo $?
>> mount: none is already mounted or /tmp/2 busy
>> none is already mounted on /tmp/1
>> 32
> Hi Jan,
>
> Thanks for your detailed explanation.
>
> According to documented behavior of cgroups [1], it seems that only a
> new cgroup
> hierarchy with the same options of the existing hierarchy can be
> mounted sucessfully,
> and mount with different options will fail and return EBUSY as expected.
>
> [1]
> https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/cgroup-v1/cgroups.txt
>
> Combinations of sucess:
> -----------------------------------------------------------------------------
>
> 1) # mkdir -p /tmp/1; mount -t cgroup -o memory,hugetlb none /tmp/1;
> echo $?
> 0
> # mkdir -p /tmp/2; mount -t cgroup -o memory,hugetlb none /tmp/2;
> echo $?
> 0
> 2) # mkdir -p /tmp/1; mount -t cgroup -o memory none /tmp/1; echo $?
> 0
> # mkdir -p /tmp/2; mount -t cgroup -o memory none /tmp/2; echo $?
> 0
> -----------------------------------------------------------------------------
>
>
> Combinations of failure:
> -----------------------------------------------------------------------------
>
> 3) # mkdir -p /tmp/1; mount -t cgroup -o memory,hugetlb none /tmp/1;
> echo $?
> 0
> # mkdir -p /tmp/2; mount -t cgroup -o memory none /tmp/2; echo $?
> mount: none is already mounted or /tmp/2 busy
> none is already mounted on /tmp/1
> 32
>
> 4) # mkdir -p /tmp/1; mount -t cgroup -o memory none /tmp/1; echo $?
> 0
> # mkdir -p /tmp/2; mount -t cgroup -o memory,hugetlb none /tmp/2;
> echo $?
> mount: none is already mounted or /tmp/2 busy
> none is already mounted on /tmp/1
> 32
> -----------------------------------------------------------------------------
>
>
> I am not sure how to fix all errors.
>
>>> Additionally,
>>> i use custom mount point according to some tests(oom03, oom05,
>>> cpuset01, etc.) on LTP.
>> OK, so my example, though possible is likely not very common.
>>
>> We are close to next LTP release, can this wait or is this a regression
>> that should be addressed before release? (Adding Cyril to CC)
> I think we can hold it until LTP is released.
>
> Thanks,
> Xiao Yang.
>
>> Regards,
>> Jan
>>
>>> Thanks,
>>> Xiao Yang
>>>> Regards,
>>>> Jan
>>>>
>>>>> Thanks,
>>>>> Xiao Yang
>>>>> On 2018/01/04 10:43, xiao yang wrote:
>>>>>> 1) on some distros(e.g. RHEL6), memory cgroup was supported and
>>>>>> mounted on /cgroup/memory by default, but the test was skipped
>>>>>> if /sys/fs/cgroup/memory did not exist.
>>>>>>
>>>>>> 2) We got the following error if memory cgroup wasn't mounted
>>>>>> on /sys/fs/cgroup/memory:
>>>>>> ------------------------------------------------------------
>>>>>> safe_macros.c:169: BROK: madvise09.c:175:
>>>>>> mkdir(/sys/fs/cgroup/memory/ltp_madvise09_16386/,0777)
>>>>>> failed: EROFS
>>>>>> ------------------------------------------------------------
>>>>>>
>>>>>> We use custom mount point and mount memory cgroup on it manually
>>>>>> to fix these issues.
>>>>>>
>>>>>> Signed-off-by: xiao yang<yangx.jy@cn.fujitsu.com>
>>>>>> ---
>>>>>> testcases/kernel/syscalls/madvise/madvise09.c | 26
>>>>>> ++++++++++++++++++++++----
>>>>>> 1 file changed, 22 insertions(+), 4 deletions(-)
>>>>>>
>>>>>> diff --git a/testcases/kernel/syscalls/madvise/madvise09.c
>>>>>> b/testcases/kernel/syscalls/madvise/madvise09.c
>>>>>> index f744405..25cf81f 100644
>>>>>> --- a/testcases/kernel/syscalls/madvise/madvise09.c
>>>>>> +++ b/testcases/kernel/syscalls/madvise/madvise09.c
>>>>>> @@ -53,12 +53,14 @@
>>>>>> #include<errno.h>
>>>>>> #include<stdio.h>
>>>>>> #include<ctype.h>
>>>>>> +#include<sys/mount.h>
>>>>>>
>>>>>> #include "tst_test.h"
>>>>>> #include "lapi/mmap.h"
>>>>>>
>>>>>> -#define MEMCG_PATH "/sys/fs/cgroup/memory/"
>>>>>> +#define MEMCG_PATH "/dev/memcg_madvise09/"
>>>>>>
>>>>>> +static int memcg_mounted;
>>>>>> static char cgroup_path[PATH_MAX];
>>>>>> static char tasks_path[PATH_MAX];
>>>>>> static char limit_in_bytes_path[PATH_MAX];
>>>>>> @@ -277,6 +279,15 @@ static void cleanup(void)
>>>>>> {
>>>>>> if (cgroup_path[0]&& !access(cgroup_path, F_OK))
>>>>>> rmdir(cgroup_path);
>>>>>> +
>>>>>> + if (memcg_mounted) {
>>>>>> + tst_res(TINFO, "Umount memory cgroup after testing");
>>>>>> + SAFE_UMOUNT(MEMCG_PATH);
>>>>>> + memcg_mounted = 0;
>>>>>> + }
>>>>>> +
>>>>>> + if (!access(MEMCG_PATH, F_OK)&& rmdir(MEMCG_PATH))
>>>>>> + tst_res(TWARN | TERRNO, "Rmdir %s failed", MEMCG_PATH);
>>>>>> }
>>>>>>
>>>>>> static void run(void)
>>>>>> @@ -316,10 +327,17 @@ static void setup(void)
>>>>>> {
>>>>>> long int swap_total;
>>>>>>
>>>>>> - if (access(MEMCG_PATH, F_OK)) {
>>>>>> - tst_brk(TCONF, "'" MEMCG_PATH
>>>>>> - "' not present, CONFIG_MEMCG missing?");
>>>>>> + SAFE_MKDIR(MEMCG_PATH, 0777);
>>>>>> +
>>>>>> + tst_res(TINFO, "Mount memory cgroup on %s", MEMCG_PATH);
>>>>>> + if (mount("memcg", MEMCG_PATH, "cgroup", 0, "memory") == -1) {
>>>>>> + if (errno == ENODEV) {
>>>>>> + tst_brk(TCONF,
>>>>>> + "Memory cgroup was not configured in kernel");
>>>>>> + }
>>>>>> + tst_brk(TBROK | TERRNO, "Failed to mount memory cgroup");
>>>>>> }
>>>>>> + memcg_mounted = 1;
>>>>>>
>>>>>> if (!access(MEMCG_PATH "memory.memsw.limit_in_bytes", F_OK))
>>>>>> swap_accounting_enabled = 1;
>>>>>
>>>>>
>>>> .
>>>>
>>>
>>>
>>>
>>
>> .
>>
>
>
>
>
^ permalink raw reply [flat|nested] 10+ messages in thread
* [LTP] [PATCH v2] syscalls/madvise09.c: Use custom mount point instead of /sys/fs/cgroup/memory
2018-01-16 9:19 ` Xiao Yang
@ 2018-01-16 10:32 ` Cyril Hrubis
0 siblings, 0 replies; 10+ messages in thread
From: Cyril Hrubis @ 2018-01-16 10:32 UTC (permalink / raw)
To: ltp
Hi!
> Adding Cyril to CC. :-)
I guess that it's time to create some kind of libary API for
initializing cgroups since we have various fallbacks etc. scattered all
around the place. I.e. something where we request the type of cgroup and
get back a path to use.
Let's look into that once we are done with the release.
--
Cyril Hrubis
chrubis@suse.cz
^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2018-01-16 10:32 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-12-27 7:40 [LTP] [PATCH] syscalls/madvise09.c: Use custom mount point instead of /sys/fs/cgroup/memory xiao yang
2018-01-04 2:43 ` Xiao Yang
2018-01-04 2:43 ` [LTP] [PATCH v2] " xiao yang
2018-01-15 5:37 ` Xiao Yang
2018-01-15 8:06 ` Jan Stancek
2018-01-15 9:27 ` Xiao Yang
2018-01-15 15:58 ` Jan Stancek
2018-01-16 9:11 ` Xiao Yang
2018-01-16 9:19 ` Xiao Yang
2018-01-16 10:32 ` Cyril Hrubis
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.