Add cgroup core selftests
PATCH 1/1 Add cgroup core selftests
This commit adds tests for some of the core functionalities of cgroups v2.
The commit adds tests for some core principles of croup V2 API:
- test_cgcore_internal_process_constraint
Tests internal process constraint.
You can't add a pid to a domain parent if a controller is enabled.
- test_cgcore_top_down_constraint_enable
Tests that you can't enable a controller on a child if it's not enabled on the parent.
- test_cgcore_top_down_constraint_disable
Tests that you can't disable a controller on a parent if it's enabled in a child.
- test_cgcore_no_internal_process_constraint_on_threads
Tests that there's no internal process constrain on threaded cgroups. You can add threads/processes on a parent with a controller enabled.
- test_cgcore_parent_becomes_threaded
Tests that when a child becomes threaded the parent type becomes domain threaded.
- test_cgcore_invalid_domain
In a situation like:
A (domain threaded) - B (threaded) - C (domain)
it tests that C can't be used until it is turned into a threaded cgroup. The "cgroup.type" file will report "domain (invalid)" in these cases. Operations which fail due to invalid topology use EOPNOTSUPP as the errno.
- test_cgcore_populated
In a situation like:
A(0) - B(0) - C(1)
\ D(0)
It tests that A, B and C's "populated" fields would be 1 while D's 0. It tests that after the one process in C is moved to root, A,B and C's "populated" fields would flip to "0" and file modified events will be generated on the "cgroup.events" files of both cgroups.
--- tools/testing/selftests/cgroup/Makefile | 2 + tools/testing/selftests/cgroup/cgroup_util.c | 8 + tools/testing/selftests/cgroup/cgroup_util.h | 1 + tools/testing/selftests/cgroup/test_core.c | 395 +++++++++++++++++++++++++++ 4 files changed, 406 insertions(+) create mode 100644 tools/testing/selftests/cgroup/test_core.c
tools/testing/selftests/cgroup/Makefile +2 -0
@@ -4,7 +4,9 @@ CFLAGS += -Wall all: TEST_GEN_PROGS = test_memcontrol +TEST_GEN_PROGS += test_core include ../lib.mk $(OUTPUT)/test_memcontrol: cgroup_util.c +$(OUTPUT)/test_core: cgroup_util.c
tools/testing/selftests/cgroup/cgroup_util.c +8 -0
@@ -229,6 +229,14 @@ int cg_destroy(const char *cgroup)return ret; } +int cg_enter_current (const char *cgroup) +{ +char pidbuf[64 ]; + +snprintf (pidbuf,sizeof (pidbuf),"%d" ,getpid ()); +return cg_write (cgroup,"cgroup.procs" , pidbuf); +} +int cg_run (const char *cgroup,int (*fn)(const char *cgroup,void *arg),void *arg)
tools/testing/selftests/cgroup/cgroup_util.h +1 -0
@@ -32,6 +32,7 @@ extern int cg_write(const char *cgroup, const char *control, char *buf);extern int cg_run (const char *cgroup,int (*fn)(const char *cgroup,void *arg),void *arg); +extern int cg_enter_current (const char *cgroup);extern int cg_run_nowait (const char *cgroup,int (*fn)(const char *cgroup,void *arg),void *arg);
tools/testing/selftests/cgroup/test_core.c new file +395 -0
395 lines not on this page · raw message
Signature · 1 line
2.11.0
Quoted 4 lines · Claudio
This commit adds tests for some of the core functionalities of cgroups v2.
The commit adds tests for some core principles of croup V2 API:
Thanks, Claudio.
Signature · 1 line
tejun
Quoted 52 lines · Claudio
This commit adds tests for some of the core functionalities of cgroups v2.
The commit adds tests for some core principles of croup V2 API:
-
test_cgcore_internal_process_constraintTests internal process constraint.
You can't add a pid to a domain parent if a controller is enabled.-
test_cgcore_top_down_constraint_enableTests that you can't enable a controller on a child if it's not enabled on the parent.
-
test_cgcore_top_down_constraint_disableTests that you can't disable a controller on a parent if it's enabled in a child.
-
test_cgcore_no_internal_process_constraint_on_threadsTests that there's no internal process constrain on threaded cgroups. You can add threads/processes on a parent with a controller enabled.
-
test_cgcore_parent_becomes_threadedTests that when a child becomes threaded the parent type becomes domain threaded.
-
test_cgcore_invalid_domainIn a situation like:
A (domain threaded) - B (threaded) - C (domain)
it tests that C can't be used until it is turned into a threaded cgroup. The "cgroup.type" file will report "domain (invalid)" in these cases. Operations which fail due to invalid topology use EOPNOTSUPP as the errno.
-
test_cgcore_populatedIn a situation like:
A(0) - B(0) - C(1)
\ D(0)It tests that A, B and C's "populated" fields would be 1 while D's 0. It tests that after the one process in C is moved to root, A,B and C's "populated" fields would flip to "0" and file modified events will be generated on the "cgroup.events" files of both cgroups.
Quoted 5 lines
Signed-off-by Claudio Zumbo <[email protected]>Cc Shuah Khan <[email protected]>Cc Roman Gushchin <[email protected]>Cc Tejun Heo <[email protected]>
Looks good to me!
Thank you!
Shuah Khan
maintainerQuoted 59 lines · Roman Gushchin
Quoted 52 lines · Claudio
This commit adds tests for some of the core functionalities of cgroups v2.
The commit adds tests for some core principles of croup V2 API:
-
test_cgcore_internal_process_constraintTests internal process constraint.
You can't add a pid to a domain parent if a controller is enabled.-
test_cgcore_top_down_constraint_enableTests that you can't enable a controller on a child if it's not enabled on the parent.
-
test_cgcore_top_down_constraint_disableTests that you can't disable a controller on a parent if it's enabled in a child.
-
test_cgcore_no_internal_process_constraint_on_threadsTests that there's no internal process constrain on threaded cgroups. You can add threads/processes on a parent with a controller enabled.
-
test_cgcore_parent_becomes_threadedTests that when a child becomes threaded the parent type becomes domain threaded.
-
test_cgcore_invalid_domainIn a situation like:
A (domain threaded) - B (threaded) - C (domain)
it tests that C can't be used until it is turned into a threaded cgroup. The "cgroup.type" file will report "domain (invalid)" in these cases. Operations which fail due to invalid topology use EOPNOTSUPP as the errno.
-
test_cgcore_populatedIn a situation like:
A(0) - B(0) - C(1)
\ D(0)It tests that A, B and C's "populated" fields would be 1 while D's 0. It tests that after the one process in C is moved to root, A,B and C's "populated" fields would flip to "0" and file modified events will be generated on the "cgroup.events" files of both cgroups.
Quoted 5 lines
Signed-off-by Claudio Zumbo <[email protected]>Cc Shuah Khan <[email protected]>Cc Roman Gushchin <[email protected]>Cc Tejun Heo <[email protected]>
Quoted 6 lines
Looks good to me!
Reviewed-by Roman Gushchin <[email protected]>Thank you!
Thanks for the new test. I will queue this up for 4.19-rc1
-- Shuah