syscalls/madvise09.c: Use custom mount point instead of /sys/fs/cgroup/memory
PATCH 1/1 syscalls/madvise09.c: Use custom mount point instead of /sys/fs/cgroup/memory
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.
--- testcases/kernel/syscalls/madvise/madvise09.c | 29 +++++++++++++++++++++++---- 1 file changed, 25 insertions(+), 4 deletions(-)
testcases/kernel/syscalls/madvise/madvise09.c +25 -4
@@ -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 ;
Signature · 1 line
1.8.3.1
PATCH 1/1 syscalls/madvise09.c: Use custom mount point instead of /sys/fs/cgroup/memory
Hi,
There is duplicate code with this patch. So i will remove it and send v2 patch.
Thanks,
Xiao Yang
Quoted 78 lines · xiao yang
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/memorydid 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 <[email protected]>--- testcases/kernel/syscalls/madvise/madvise09.c | 29 +++++++++++++++++++++++---- 1 file changed, 25 insertions(+), 4 deletions(-)testcases/kernel/syscalls/madvise/madvise09.c +25
-4@@ -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 ;
PATCH v2 1/1 syscalls/madvise09.c: Use custom mount point instead of /sys/fs/cgroup/memory
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.
--- testcases/kernel/syscalls/madvise/madvise09.c | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-)
testcases/kernel/syscalls/madvise/madvise09.c +22 -4
@@ -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 ;
Signature · 1 line
1.8.3.1
PATCH v2 1/1 syscalls/madvise09.c: Use custom mount point instead of /sys/fs/cgroup/memory
Hi Jan,
Could you help me review this patch.
Thanks,
Xiao Yang
Quoted 75 lines · xiao yang
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/memorydid 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 <[email protected]>--- testcases/kernel/syscalls/madvise/madvise09.c | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-)testcases/kernel/syscalls/madvise/madvise09.c +22
-4@@ -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 ;
PATCH v2 1/1 syscalls/madvise09.c: Use custom mount point instead of /sys/fs/cgroup/memory
----- Original Message -----
Quoted 3 lines
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
Quoted 86 lines
Thanks,
Xiao YangQuoted 78 lines · xiao yang
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/memorydid 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 <[email protected]>--- testcases/kernel/syscalls/madvise/madvise09.c | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-)testcases/kernel/syscalls/madvise/madvise09.c +22
-4@@ -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 ;
PATCH v2 1/1 syscalls/madvise09.c: Use custom mount point instead of /sys/fs/cgroup/memory
Quoted 10 lines · Jan Stancek
----- Original Message -----
Quoted 3 lines
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
-EBUSYif 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
Quoted 90 lines
Regards,
JanQuoted 79 lines
Thanks,
Xiao YangQuoted 76 lines · xiao yang
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/memorydid 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<[email protected]>--- testcases/kernel/syscalls/madvise/madvise09.c | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-)testcases/kernel/syscalls/madvise/madvise09.c +22
-4@@ -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 ;Quoted 5 lines
testcases/kernel/syscalls/madvise/madvise09.c static void setup(void) · line 343
Quoted 2 lines
testcases/kernel/syscalls/madvise/madvise09.c +0
-0if (!access (MEMCG_PATH "memory.memsw.limit_in_bytes" ,F_OK )) swap_accounting_enabled =1 ;.
PATCH v2 1/1 syscalls/madvise09.c: Use custom mount point instead of /sys/fs/cgroup/memory
----- Original Message -----
Quoted 11 lines · Jan Stancek
Quoted 10 lines
----- Original Message -----
Quoted 3 lines
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
-EBUSYif the subsystem is already part of existing hierarchy.
Quoted 8 lines
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
32Quoted 3 lines
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
Quoted 97 lines
Thanks,
Xiao YangQuoted 90 lines
Regards,
JanQuoted 79 lines
Thanks,
Xiao YangQuoted 76 lines · xiao yang
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/memorydid 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<[email protected]>--- testcases/kernel/syscalls/madvise/madvise09.c | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-)testcases/kernel/syscalls/madvise/madvise09.c +22
-4@@ -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 ;Quoted 5 lines
testcases/kernel/syscalls/madvise/madvise09.c static void setup(void) · line 343
Quoted 2 lines
testcases/kernel/syscalls/madvise/madvise09.c +0
-0if (!access (MEMCG_PATH "memory.memsw.limit_in_bytes" ,F_OK )) swap_accounting_enabled =1 ;.
PATCH v2 1/1 syscalls/madvise09.c: Use custom mount point instead of /sys/fs/cgroup/memory
Quoted 22 lines · Jan Stancek
----- Original Message -----
Quoted 10 lines · Jan Stancek
Quoted 9 lines
----- Original Message -----
Quoted 3 lines
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
-EBUSYif the subsystem is already part of existing hierarchy.Quoted 8 lines
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:
Quoted 8 lines
# mkdir -p /tmp/1; mount -t cgroup -o memory,hugetlb none /tmp/1; echo $? 0And 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.
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.
Quoted 7 lines
Quoted 3 lines
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.
Quoted 99 lines
Regards,
JanQuoted 93 lines
Thanks,
Xiao YangQuoted 88 lines
Regards,
JanQuoted 79 lines
Thanks,
Xiao YangQuoted 76 lines · xiao yang
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/memorydid 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<[email protected]>--- testcases/kernel/syscalls/madvise/madvise09.c | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-)testcases/kernel/syscalls/madvise/madvise09.c +22
-4@@ -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 ;Quoted 4 lines
testcases/kernel/syscalls/madvise/madvise09.c static void setup(void) · line 343
Quoted 2 lines
testcases/kernel/syscalls/madvise/madvise09.c +0
-0if (!access (MEMCG_PATH "memory.memsw.limit_in_bytes" ,F_OK )) swap_accounting_enabled =1 ;.
.
PATCH v2 1/1 syscalls/madvise09.c: Use custom mount point instead of /sys/fs/cgroup/memory
Hi,
Adding Cyril to CC. :-)
Thanks,
Xiao Yang
Quoted 204 lines · Xiao Yang
Quoted 29 lines · Jan Stancek
----- Original Message -----
Quoted 14 lines · Jan Stancek
Quoted 11 lines
----- Original Message -----
Quoted 3 lines
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-EBUSYif the subsystem is already part of existing
hierarchy.Hi Jan,
Quoted 7 lines
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 $? 0Quoted 6 lines
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 32Hi 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.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 324) # 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.
Quoted 7 lines
Quoted 3 lines
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.Quoted 100 lines
Regards,
JanQuoted 94 lines
Thanks,
Xiao YangQuoted 89 lines
Regards,
JanQuoted 80 lines
Thanks,
Xiao YangQuoted 77 lines · xiao yang
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/memorydid 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<[email protected]>--- testcases/kernel/syscalls/madvise/madvise09.c | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-)testcases/kernel/syscalls/madvise/madvise09.c +22
-4@@ -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 ;Quoted 4 lines
testcases/kernel/syscalls/madvise/madvise09.c static void setup(void) · line 343
Quoted 2 lines
testcases/kernel/syscalls/madvise/madvise09.c +0
-0if (!access (MEMCG_PATH "memory.memsw.limit_in_bytes" ,F_OK )) swap_accounting_enabled =1 ;.
.
PATCH v2 1/1 syscalls/madvise09.c: Use custom mount point instead of /sys/fs/cgroup/memory
Hi!
Quoted 1 line
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.
Signature · 2 lines
Cyril Hrubis [email protected]