[LTP] [PATCH] memcg_use_hierarchy_test.sh: skip setting use_hierarchy if not available

Yang Xu xuyang2018.jy@cn.fujitsu.com
Thu Sep 17 07:21:22 CEST 2020


Hi hanxiao


> The precondition of this case is that we can disable use_hierarchy.
> But some distributions such as CentOS 8 had enabled it in root
> cgroup and hard to disabled.
> 
> As [1] describe:
>      NOTE1: Enabling/disabling will fail if either the cgroup already has other
>         cgroups created below it, or if the parent cgroup has use_hierarchy
>         enabled.
> 
> We should check the precondition before testing.
> 
> [1] https://www.kernel.org/doc/Documentation/cgroup-v1/memory.txt
> 
> Signed-off-by: Chen Hanxiao <chenhx.fnst@cn.fujitsu.com>
> ---
>   .../controllers/memcg/functional/memcg_lib.sh | 25 +++++++++++++++----
>   .../functional/memcg_use_hierarchy_test.sh    | 12 +++++++--
>   2 files changed, 30 insertions(+), 7 deletions(-)
> 
> diff --git a/testcases/kernel/controllers/memcg/functional/memcg_lib.sh b/testcases/kernel/controllers/memcg/functional/memcg_lib.sh
> index 22ef4f5e2..4f99c6f59 100755
> --- a/testcases/kernel/controllers/memcg/functional/memcg_lib.sh
> +++ b/testcases/kernel/controllers/memcg/functional/memcg_lib.sh
> @@ -491,6 +491,10 @@ cleanup_test()
>   		orig_memory_use_hierarchy=""
>   	fi
>   
> +	if [ -n "$root_memory_use_hierarchy" ];then
> +                root_memory_use_hierarchy=""
> +	fi
> +
>   	killall -9 memcg_process 2>/dev/null
>   	wait
>   
> @@ -514,16 +518,27 @@ setup_test()
>   	# while there are distributions (RHEL7U0Beta for example) that sets
>   	# it to 1.
>   	orig_memory_use_hierarchy=$(cat /dev/memcg/memory.use_hierarchy)
> +        MEMCGROUP_PATH="/sys/fs/cgroup/memory"
> +        if [ -e "$MEMCGROUP_PATH" ];then
> +                root_memory_use_hierarchy=$(cat "$MEMCGROUP_PATH/memory.use_hierarchy")
> +        fi
> +
>   	if [ -z "$orig_memory_use_hierarchy" ];then
>   		tst_resm TINFO "cat /dev/memcg/memory.use_hierarchy failed"
>   	elif [ "$orig_memory_use_hierarchy" = "0" ];then
>   		orig_memory_use_hierarchy=""
>   	else
> -		echo 0 > /dev/memcg/memory.use_hierarchy
> -		if [ $? -ne 0 ];then
> -			tst_resm TINFO "set /dev/memcg/memory.use_hierarchy" \
> -				"to 0 failed"
> -		fi
> +                if [ "$root_memory_use_hierarchy" = "1" ]; then
> +                        tst_resm TINFO "root cgroup has use_hierarchy enabled, " \
> +                            "can't set /dev/memcg/memory.use_hierarchy to 0"
> +                        export root_memory_use_hierarchy
> +                else
> +                        echo 0 > /dev/memcg/memory.use_hierarchy
> +                        if [ $? -ne 0 ];then
> +                                tst_resm TINFO "set /dev/memcg/memory.use_hierarchy" \
> +                                    "to 0 failed"
> +                        fi
> +                fi
I test this patch on centos7 and testcase2 skips. On centos7(without 
installing docker), /sys/fs/cgroup/memory/memory.use_hierarchy value is 
equal to 1 and I still can disable value for 
/dev/memcg/memory.use_hierarchy.

So why not directly use /dev/memcg/memory.use_hierarchy value to judge 
in testcase after setting 0.

Best Regards
Yang Xu
>   	fi
>   
>   	ROD mkdir "/dev/memcg/$TEST_ID"
> diff --git a/testcases/kernel/controllers/memcg/functional/memcg_use_hierarchy_test.sh b/testcases/kernel/controllers/memcg/functional/memcg_use_hierarchy_test.sh
> index 4cf6b9fc2..1439b6352 100755
> --- a/testcases/kernel/controllers/memcg/functional/memcg_use_hierarchy_test.sh
> +++ b/testcases/kernel/controllers/memcg/functional/memcg_use_hierarchy_test.sh
> @@ -34,7 +34,9 @@ TST_TOTAL=3
>   # test if one of the ancestors goes over its limit, the proces will be killed
>   testcase_1()
>   {
> -	echo 1 > memory.use_hierarchy
> +        if [ "$root_memory_use_hierarchy" != "1" ]; then
> +                echo 1 > memory.use_hierarchy
> +        fi
>   	echo $PAGESIZE > memory.limit_in_bytes
>   
>   	mkdir subgroup
> @@ -48,6 +50,10 @@ testcase_1()
>   # test Enabling will fail if the cgroup already has other cgroups
>   testcase_2()
>   {
> +        if [ "$root_memory_use_hierarchy" = "1" ]; then
> +               tst_resm TCONF "root cgroup has use_hierarchy enabled, skip"
> +               return
> +        fi
>   	mkdir subgroup
>   	EXPECT_FAIL echo 1 \> memory.use_hierarchy
>   
> @@ -57,7 +63,9 @@ testcase_2()
>   # test disabling will fail if the parent cgroup has enabled hierarchy.
>   testcase_3()
>   {
> -	echo 1 > memory.use_hierarchy
> +        if [ "$root_memory_use_hierarchy" != "1" ]; then
> +               echo 1 > memory.use_hierarchy
> +        fi
>   	mkdir subgroup
>   	EXPECT_FAIL echo 0 \> subgroup/memory.use_hierarchy
>   
> 




More information about the ltp mailing list