OOM with the combination of memcg & numa was moved to oom03, and oom04 is re-design to be used to test 'OOM with CPUSET'.
also used is_numa() instead of the old method. Signed-off-by: Zhouping Liu <[email protected]> --- testcases/kernel/mem/oom/oom02.c | 6 ++-- testcases/kernel/mem/oom/oom03.c | 19 +++++++++++++ testcases/kernel/mem/oom/oom04.c | 60 +++++++++++++++------------------------- 3 files changed, 45 insertions(+), 40 deletions(-) diff --git a/testcases/kernel/mem/oom/oom02.c b/testcases/kernel/mem/oom/oom02.c index 31ec73f..3bc8567 100644 --- a/testcases/kernel/mem/oom/oom02.c +++ b/testcases/kernel/mem/oom/oom02.c @@ -35,6 +35,7 @@ #include <errno.h> #include <fcntl.h> #include <stdio.h> +#include "numa_helper.h" #include "test.h" #include "usctest.h" #include "mem.h" @@ -44,7 +45,6 @@ int TST_TOTAL = 1; #if HAVE_NUMA_H && HAVE_LINUX_MEMPOLICY_H && HAVE_NUMAIF_H \ && HAVE_MPOL_CONSTANTS -#include <numaif.h> int main(int argc, char *argv[]) { @@ -83,8 +83,8 @@ void setup(void) tst_sig(FORK, DEF_HANDLER, cleanup); TEST_PAUSE; - /* Judge a NUMA system through get_a_numa_node */ - get_a_numa_node(NULL); + if (!is_numa(NULL)) + tst_brkm(TCONF, NULL, "The case need a NUMA system."); overcommit = get_sys_tune("overcommit_memory"); set_sys_tune("overcommit_memory", 1, 1); diff --git a/testcases/kernel/mem/oom/oom03.c b/testcases/kernel/mem/oom/oom03.c index 95e34d5..43ad595 100644 --- a/testcases/kernel/mem/oom/oom03.c +++ b/testcases/kernel/mem/oom/oom03.c @@ -33,6 +33,7 @@ #include <errno.h> #include <fcntl.h> #include <stdio.h> +#include "numa_helper.h" #include "test.h" #include "usctest.h" #include "mem.h" @@ -40,6 +41,9 @@ char *TCID = "oom03"; int TST_TOTAL = 1; +#if HAVE_NUMA_H && HAVE_LINUX_MEMPOLICY_H && HAVE_NUMAIF_H \ + && HAVE_MPOL_CONSTANTS + int main(int argc, char *argv[]) { char *msg; @@ -76,6 +80,14 @@ int main(int argc, char *argv[]) write_file(MEMCG_SW_LIMIT, mem); testoom(0, 1, 0); } + + /* OOM for MEMCG with mempolicy */ + if (is_numa(cleanup)) { + tst_resm(TINFO, "OOM on MEMCG & mempolicy..."); + testoom(MPOL_BIND, 0, 1); + testoom(MPOL_INTERLEAVE, 0, 1); + testoom(MPOL_PREFERRED, 0, 1); + } } cleanup(); tst_exit(); @@ -99,3 +111,10 @@ void cleanup(void) TEST_CLEANUP; } + +#else +int main(void) +{ + tst_brkm(TCONF, NULL, "no NUMA development packages installed."); +} +#endif diff --git a/testcases/kernel/mem/oom/oom04.c b/testcases/kernel/mem/oom/oom04.c index bc51046..1ad7334 100644 --- a/testcases/kernel/mem/oom/oom04.c +++ b/testcases/kernel/mem/oom/oom04.c @@ -1,5 +1,5 @@ /* - * Out Of Memory (OOM) for Memory Resource Controller and NUMA + * Out Of Memory (OOM) for CPUSET * * The program is designed to cope with unpredictable like amount and * system physical memory, swap size and other VMM technology like KSM, @@ -35,6 +35,7 @@ #include <errno.h> #include <fcntl.h> #include <stdio.h> +#include "numa_helper.h" #include "test.h" #include "usctest.h" #include "mem.h" @@ -44,12 +45,11 @@ int TST_TOTAL = 1; #if HAVE_NUMA_H && HAVE_LINUX_MEMPOLICY_H && HAVE_NUMAIF_H \ && HAVE_MPOL_CONSTANTS + int main(int argc, char *argv[]) { char *msg; int lc; - int swap_acc_on = 1; - char buf[BUFSIZ], mem[BUFSIZ]; msg = parse_opts(argc, argv, NULL, NULL); if (msg != NULL) @@ -64,38 +64,19 @@ int main(int argc, char *argv[]) for (lc = 0; TEST_LOOPING(lc); lc++) { tst_count = 0; - snprintf(buf, BUFSIZ, "%d", getpid()); - write_file(MEMCG_PATH_NEW "/tasks", buf); - - snprintf(mem, BUFSIZ, "%ld", TESTMEM); - write_file(MEMCG_PATH_NEW "/memory.limit_in_bytes", mem); - - if (access(MEMCG_SW_LIMIT, F_OK) == -1) { - if (errno == ENOENT) { - tst_resm(TCONF, - "memcg swap accounting is disabled"); - swap_acc_on = 0; - } else - tst_brkm(TBROK | TERRNO, cleanup, "access"); - } - - tst_resm(TINFO, "process mempolicy."); - testoom(1, 0, 1); - - if (swap_acc_on) { - write_file(MEMCG_SW_LIMIT, mem); - testoom(1, 1, 1); - } - - tst_resm(TINFO, "process cpuset."); - - if (swap_acc_on) - write_file(MEMCG_SW_LIMIT, "-1"); - testoom(0, 0, 1); - - if (swap_acc_on) { - write_file(MEMCG_SW_LIMIT, mem); - testoom(0, 1, 1); + tst_resm(TINFO, "OOM on CPUSET..."); + testoom(0, 0, 0); + + if (is_numa(cleanup)) { + /* + * Under NUMA system, the migration of cpuset's memory + * is in charge of cpuset.memory_migrate, we can write + * 1 to cpuset.memory_migrate to enable the migration. + */ + write_cpuset_files(CPATH_NEW, + "memory_migrate", "1"); + tst_resm(TINFO, "OOM on CPUSET with mem migrate:"); + testoom(0, 0, 0); } } cleanup(); @@ -110,15 +91,20 @@ void setup(void) overcommit = get_sys_tune("overcommit_memory"); set_sys_tune("overcommit_memory", 1, 1); + mount_mem("cpuset", "cpuset", NULL, CPATH, CPATH_NEW); - mount_mem("memcg", "cgroup", "memory", MEMCG_PATH, MEMCG_PATH_NEW); + if (is_numa(cleanup) > 0) + /* For NUMA system, using the first node for cpuset.mems */ + write_cpusets(get_a_numa_node(cleanup)); + else + /* For nonNUMA system, using node0 for cpuset.mems */ + write_cpusets(0); } void cleanup(void) { set_sys_tune("overcommit_memory", overcommit, 0); umount_mem(CPATH, CPATH_NEW); - umount_mem(MEMCG_PATH, MEMCG_PATH_NEW); TEST_CLEANUP; } -- 1.7.11.7 ------------------------------------------------------------------------------ Everyone hates slow websites. So do we. Make your web apps faster with AppDynamics Download AppDynamics Lite for free today: http://p.sf.net/sfu/appdyn_d2d_mar _______________________________________________ Ltp-list mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/ltp-list
