* [LTP] [PATCH] controllers/pids.sh: get available for cgroup v2
@ 2021-11-13 4:17 Masayoshi Mizuma
2021-11-15 10:58 ` Richard Palethorpe
0 siblings, 1 reply; 2+ messages in thread
From: Masayoshi Mizuma @ 2021-11-13 4:17 UTC (permalink / raw)
To: ltp; +Cc: Masayoshi Mizuma
From: Masayoshi Mizuma <m.mizuma@jp.fujitsu.com>
controllers/pids/pids.sh doesn't work in the cgroup v2 environment because
some interfaces of cgroup v2 are different from cgroup v1.
The test itself is useful for cgroup v2 as well, so let's get it
available for cgroup v2.
The test starts with cgroup v2 if it's mounted already. On some systems,
like as Fedora 35 and CentOS Stream 9, systemd mounts cgroup v2 as the
default while system booting.
Signed-off-by: Masayoshi Mizuma <m.mizuma@jp.fujitsu.com>
---
testcases/kernel/controllers/pids/pids.sh | 68 +++++++++++++++++------
1 file changed, 52 insertions(+), 16 deletions(-)
diff --git a/testcases/kernel/controllers/pids/pids.sh b/testcases/kernel/controllers/pids/pids.sh
index afcf0a283..a3d644eff 100755
--- a/testcases/kernel/controllers/pids/pids.sh
+++ b/testcases/kernel/controllers/pids/pids.sh
@@ -47,7 +47,21 @@ cleanup()
fi
}
-setup()
+setup_cgroupv2()
+{
+ mount_point=$(grep -w cgroup2 /proc/mounts | cut -f 2 | cut -d " " -f2)
+ if ! grep -q pids "$mount_point"/cgroup.controllers; then
+ tst_res TINFO "pids not supported on cgroup v2."
+ return
+ fi
+
+ testpath="$mount_point/ltp_pids_$caseno"
+ ROD mkdir -p "$testpath"
+ task_list="cgroup.procs"
+ cgroup_v="v2"
+}
+
+setup_cgroupv1()
{
exist=`grep -w pids /proc/cgroups | cut -f1`;
if [ "$exist" = "" ]; then
@@ -68,6 +82,22 @@ setup()
ROD mount -t cgroup -o pids none $mount_point
fi
ROD mkdir -p $testpath
+ task_list="tasks"
+ cgroup_v="v1"
+}
+
+setup()
+{
+ # If cgroup2 is mounted already, then let's
+ # try to start with cgroup v2.
+ if grep -q cgroup2 /proc/mounts; then
+ setup_cgroupv2
+ fi
+ if [ -z "$cgroup_v" ]; then
+ setup_cgroupv1
+ fi
+
+ tst_res TINFO "test starts with cgroup $cgroup_v"
}
start_pids_tasks2()
@@ -81,10 +111,10 @@ start_pids_tasks2_path()
nb=$2
for i in `seq 1 $nb`; do
pids_task2 &
- echo $! > $path/tasks
+ echo $! > "$path/$task_list"
done
- if [ $(cat "$path/tasks" | wc -l) -ne $nb ]; then
+ if [ $(wc -l < "$path/$task_list") -ne "$nb" ]; then
tst_brk TBROK "failed to attach process"
fi
}
@@ -99,7 +129,7 @@ stop_pids_tasks_path()
local i
path=$1
- for i in `cat $path/tasks`; do
+ for i in $(cat "$path/$task_list"); do
ROD kill -9 $i
wait $i
done
@@ -110,7 +140,7 @@ case1()
start_pids_tasks2 $max
# should return 0 because there is no limit
- pids_task1 "$testpath/tasks"
+ pids_task1 "$testpath/$task_list"
ret=$?
if [ "$ret" -eq "2" ]; then
@@ -133,7 +163,7 @@ case2()
start_pids_tasks2 $tmp
# should return 2 because the limit of pids is reached
- pids_task1 "$testpath/tasks"
+ pids_task1 "$testpath/$task_list"
ret=$?
if [ "$ret" -eq "2" ]; then
@@ -155,7 +185,7 @@ case3()
start_pids_tasks2 $max
- pids_task1 "$testpath/tasks"
+ pids_task1 "$testpath/$task_list"
ret=$?
if [ "$ret" -eq "2" ]; then
@@ -201,7 +231,7 @@ case6()
lim=$((max - 1))
ROD echo $lim \> $testpath/pids.max
- pids_task1 "$testpath/tasks"
+ pids_task1 "$testpath/$task_list"
ret=$?
if [ "$ret" -eq "2" ]; then
@@ -232,7 +262,7 @@ case7()
start_pids_tasks2_path $testpath/child$i $lim
done
- pids_task1 "$testpath/tasks"
+ pids_task1 "$testpath/$task_list"
ret=$?
if [ "$ret" -eq "2" ]; then
@@ -244,7 +274,7 @@ case7()
fi
for i in `seq 1 $subcgroup_num`; do
- pids_task1 "$testpath/child$i/tasks"
+ pids_task1 "$testpath/child$i/$task_list"
ret=$?
if [ "$ret" -eq "2" ]; then
@@ -268,6 +298,9 @@ case8()
{
tst_res TINFO "set child cgroup limit smaller than its parent limit"
ROD echo $max \> $testpath/pids.max
+ if [ "$cgroup_v" = "v2" ]; then
+ ROD echo +pids \> "$testpath"/cgroup.subtree_control
+ fi
mkdir $testpath/child
lim=$((max - 1))
@@ -275,7 +308,7 @@ case8()
tmp=$((max - 2))
start_pids_tasks2_path $testpath/child $tmp
- pids_task1 "$testpath/child/tasks"
+ pids_task1 "$testpath/child/$task_list"
ret=$?
if [ "$ret" -eq "2" ]; then
@@ -295,16 +328,19 @@ case9()
tst_res TINFO "migrate cgroup"
lim=$((max - 1))
+ if [ "$cgroup_v" = "v2" ]; then
+ ROD echo +pids \> "$testpath"/cgroup.subtree_control
+ fi
for i in 1 2; do
mkdir $testpath/child$i
ROD echo $max \> $testpath/child$i/pids.max
start_pids_tasks2_path $testpath/child$i $lim
done
- pid=`head -n 1 $testpath/child1/tasks`;
- ROD echo $pid \> $testpath/child2/tasks
+ pid=`head -n 1 "$testpath/child1/$task_list"`;
+ ROD echo $pid \> "$testpath/child2/$task_list"
- if grep -q "$pid" "$testpath/child2/tasks"; then
+ if grep -q "$pid" "$testpath/child2/$task_list"; then
tst_res TPASS "migrate pid $pid from cgroup1 to cgroup2 as expected"
else
tst_res TPASS "migrate pid $pid from cgroup1 to cgroup2 failed"
@@ -322,7 +358,7 @@ case9()
tst_res TFAIL "migrate child2 cgroup failed"
fi
- pids_task1 "$testpath/child1/tasks"
+ pids_task1 "$testpath/child1/$task_list"
ret=$?
if [ "$ret" -eq "2" ]; then
@@ -333,7 +369,7 @@ case9()
tst_res TBROK "child1 pids_task1 failed"
fi
- pids_task1 "$testpath/child2/tasks"
+ pids_task1 "$testpath/child2/$task_list"
ret=$?
if [ "$ret" -eq "2" ]; then
--
2.27.0
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [LTP] [PATCH] controllers/pids.sh: get available for cgroup v2
2021-11-13 4:17 [LTP] [PATCH] controllers/pids.sh: get available for cgroup v2 Masayoshi Mizuma
@ 2021-11-15 10:58 ` Richard Palethorpe
0 siblings, 0 replies; 2+ messages in thread
From: Richard Palethorpe @ 2021-11-15 10:58 UTC (permalink / raw)
To: Masayoshi Mizuma; +Cc: Masayoshi Mizuma, ltp
Hello Masayoshi,
Masayoshi Mizuma <msys.mizuma@gmail.com> writes:
> From: Masayoshi Mizuma <m.mizuma@jp.fujitsu.com>
>
> controllers/pids/pids.sh doesn't work in the cgroup v2 environment because
> some interfaces of cgroup v2 are different from cgroup v1.
>
> The test itself is useful for cgroup v2 as well, so let's get it
> available for cgroup v2.
>
> The test starts with cgroup v2 if it's mounted already. On some systems,
> like as Fedora 35 and CentOS Stream 9, systemd mounts cgroup v2 as the
> default while system booting.
FYI, we have a C API for CGroups which handles all of this. However this
patch looks good!
Reviewed-by: Richard Palethorpe <rpalethorpe@suse.com>
--
Thank you,
Richard.
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2021-11-15 11:07 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-11-13 4:17 [LTP] [PATCH] controllers/pids.sh: get available for cgroup v2 Masayoshi Mizuma
2021-11-15 10:58 ` Richard Palethorpe
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox