All of lore.kernel.org
 help / color / mirror / Atom feed
From: Richard Palethorpe <rpalethorpe@suse.de>
To: Luke Nowakowski-Krijger <luke.nowakowskikrijger@canonical.com>
Cc: ltp@lists.linux.it
Subject: Re: [LTP] [PATCH v3 08/16] controllers: Expand cgroup_lib shell library
Date: Mon, 07 Mar 2022 11:00:09 +0000	[thread overview]
Message-ID: <87wnh6m2fp.fsf@suse.de> (raw)
In-Reply-To: <ef5d94799195f00c6ab1fffe612e62bf1ee530a7.1646434670.git.luke.nowakowskikrijger@canonical.com>

Hello Luke,

Luke Nowakowski-Krijger <luke.nowakowskikrijger@canonical.com> writes:

> Expand the cgroup_lib library by using the tst_cgctl binary
> utility to make calls to the Cgroup C API to simplify and centralize the
> mounting and cleanup process of Cgroups
>
> Signed-off-by: Luke Nowakowski-Krijger <luke.nowakowskikrijger@canonical.com>
> ---
> v2: Add "^" to propery grep the correct mountpoint.
>     Removed is_cgroup_enabled_and_available function and put the check
>     in cgroup_require().
>     Check if /proc/cgroups exists in cgroup_require().
>     Change to TCONF if controllers not available.
> v3: Add copyright.
>     Change awks to grab new config variables.
>     Change version from v2 to just 2 to match config variables.
>
>  testcases/kernel/controllers/cgroup_lib.sh | 129 +++++++++++++++++----
>  1 file changed, 109 insertions(+), 20 deletions(-)
>
> diff --git a/testcases/kernel/controllers/cgroup_lib.sh b/testcases/kernel/controllers/cgroup_lib.sh
> index 7918b5636..ed8549c70 100644
> --- a/testcases/kernel/controllers/cgroup_lib.sh
> +++ b/testcases/kernel/controllers/cgroup_lib.sh
> @@ -2,38 +2,127 @@
>  # SPDX-License-Identifier: GPL-2.0-or-later
>  # Copyright (c) 2019 Petr Vorel <pvorel@suse.cz>
>  # Copyright (c) 2018-2019 ARM Ltd. All Rights Reserved.
> +# Copyright (c) 2022 Canonical Ltd.
>  
>  . tst_test.sh
>  
> -# Find mountpoint to given subsystem
> -# get_cgroup_mountpoint SUBSYSTEM
> -# RETURN: 0 if mountpoint found, otherwise 1
> -get_cgroup_mountpoint()
> +_cgroup_state=
> +
> +# Find mountpoint of the given controller
> +# USAGE: cgroup_get_mountpoint CONTROLLER
> +# RETURNS: Prints the mountpoint of the given controller
> +# Must call cgroup_require before calling
> +cgroup_get_mountpoint()
> +{
> +	local ctrl=$1
> +	local mountpoint
> +
> +	[ $# -eq 0 ] && tst_brk TBROK "cgroup_get_mountpoint: controller not defined"
> +	[ "$_cgroup_state" = "" ] && tst_brk TBROK "cgroup_get_mountpoint: No previous state found. Forgot to call cgroup_require?"
> +
> +	mountpoint=$(echo "$_cgroup_state" | grep -w "^$ctrl" | awk '{ print $4 }')
> +	echo "$mountpoint"
> +
> +	return 0
> +}
> +
> +# Get the test path of a given controller that has been created by the cgroup C API
> +# USAGE: cgroup_get_test_path CONTROLLER
> +# RETURNS: Prints the path to the test direcory
> +# Must call cgroup_require before calling
> +cgroup_get_test_path()
> +{
> +	local ctrl="$1"
> +	local mountpoint
> +	local test_path
> +
> +	[ $# -eq 0 ] && tst_brk TBROK "cgroup_get_test_path: controller not defined"
> +	[ "$_cgroup_state" = "" ] && tst_brk TBROK "cgroup_get_test_path: No previous state found. Forgot to call cgroup_require?"
> +
> +	mountpoint=$(cgroup_get_mountpoint "$ctrl")
> +
> +	test_path="$mountpoint/ltp/test-$$"
> +
> +	[ ! -e "$test_path" ] && tst_brk TBROK "cgroup_get_test_path: No test path found. Forgot to call cgroup_require?"
> +
> +	echo "$test_path"
> +
> +	return 0
> +}
> +
> +# Gets the cgroup version of the given controller
> +# USAGE: cgroup_get_version CONTROLLER
> +# RETURNS: "1" if version 1 and "2" if version 2
> +# Must call cgroup_require before calling
> +cgroup_get_version()
> +{
> +	local ctrl="$1"
> +	local version
> +
> +	[ $# -eq 0 ] && tst_brk TBROK "cgroup_get_version: controller not defined"
> +	[ "$_cgroup_state" = "" ] && tst_brk TBROK "cgroup_get_version: No previous state found. Forgot to call cgroup_require?"
> +
> +	version=$(echo "$_cgroup_state" | grep -w "^$ctrl" | awk '{ print $2 }')
> +	[ "$version" = "" ] && tst_brk TBROK "cgroup_get_version: Could not find controller $ctrl"
> +
> +	echo "$version"
> +
> +	return 0
> +}
> +
> +# Cleans up any setup done by calling cgroup_require.
> +# USAGE: cgroup_cleanup
> +# Can be safely called even when no setup has been done
> +cgroup_cleanup()
>  {
> -	local subsystem=$1
> -	local mntpoint
> +	[ "$_cgroup_state" = "" ] && return 0
>  
> -	[ $# -eq 0 ] && tst_brk TBROK "get_cgroup_mountpoint: subsystem not defined"
> +	tst_cgctl cleanup "$_cgroup_state"
>  
> -	mntpoint=$(grep cgroup /proc/mounts | grep -w $subsystem | awk '{ print $2 }')
> -	[ -z "$mntpoint" ] && return 1
> +	_cgroup_state=""
>  
> -	echo $mntpoint
>  	return 0
>  }
>  
> -# Check if given subsystem is supported and enabled
> -# is_cgroup_subsystem_available_and_enabled SUBSYSTEM
> -# RETURN: 0 if subsystem supported and enabled, otherwise 1
> -is_cgroup_subsystem_available_and_enabled()
> +# Get the task list of the given controller
> +# USAGE: cgroup_get_task_list CONTROLLER
> +# RETURNS: prints out "cgroup.procs" if version 2 otherwise "tasks"
> +# Must call cgroup_require before calling
> +cgroup_get_task_list()
>  {
> -	local val
> -	local subsystem=$1
> +	local ctrl="$1"
> +	local version
> +
> +	[ $# -eq 0 ] && tst_brk TBROK "cgroup_get_task_list: controller not defined"
>  
> -	[ $# -eq 0 ] && tst_brk TBROK "is_cgroup_subsystem_available_and_enabled: subsystem not defined"
> +	version=$(cgroup_get_version "$ctrl")
>  
> -	val=$(grep -w $subsystem /proc/cgroups | awk '{ print $4 }')
> -	[ "$val" = "1" ] && return 0
> +	if [ "$version" = "2" ]; then
> +		echo "cgroup.procs"
> +	else
> +		echo "tasks"
> +	fi
>  
> -	return 1
> +	return 0
> +}
> +
> +# Mounts and configures the given controller
> +# USAGE: cgroup_require CONTROLLER
> +cgroup_require()
> +{
> +	local ctrl="$1"
> +	local exists
> +
> +	[ $# -eq 0 ] && tst_brk TBROK "cgroup_require: controller not defined"
> +
> +	[ ! -f /proc/cgroups ] && tst_brk TCONF "Kernel does not support
> control groups"

The tst_cgroup lib can handle this. Also is it guaranteed that
/proc/cgroups exists if cgroups are enabled?

> +
> +	exists=$(grep -w $ctrl /proc/cgroups | awk '{ print $4 }')
> +	[ "$exists" != "1" ] && tst_brk TCONF "cgroup_require:
> Controller not available or not enabled"

For some reason this fails on my VM where no cgroups are mounted
already. Also it's redundant because tst_cgroup should handle it.

> +
> +	_cgroup_state=$(tst_cgctl require "$ctrl" $$)
> +
> +	[ "$_cgroup_state" = "" ] && tst_brk TBROK "cgroup_require: No state was set after call. Controller '$ctrl' maybe does not exist?"
> +
> +	return 0
>  }


-- 
Thank you,
Richard.

-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

  reply	other threads:[~2022-03-07 11:23 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-03-04 23:18 [LTP] [PATCH v2 00/16] Expand Cgroup lib and modify controller tests Luke Nowakowski-Krijger
2022-03-04 23:18 ` [LTP] [PATCH v3 01/16] API/cgroup: Modify tst_cg_print_config for parsing and consumption Luke Nowakowski-Krijger
2022-03-04 23:18 ` [LTP] [PATCH 02/16] API/cgroup: Add option for specific pid to tst_cg_opts Luke Nowakowski-Krijger
2022-03-04 23:18 ` [LTP] [PATCH v2 03/16] API/cgroup: Add cgroup_find_root helper function Luke Nowakowski-Krijger
2022-03-04 23:18 ` [LTP] [PATCH v3 04/16] API/cgroup: Implement tst_cg_load_config Luke Nowakowski-Krijger
2022-03-07  9:05   ` Richard Palethorpe
2022-03-16 22:38     ` Luke Nowakowski-Krijger
2022-03-17  7:07       ` Richard Palethorpe
2022-04-27 17:38         ` Luke Nowakowski-Krijger
2022-04-28  9:17           ` Li Wang
2022-03-04 23:18 ` [LTP] [PATCH v2 05/16] API/cgroup: Add more controllers to tst_cgroup Luke Nowakowski-Krijger
2022-03-07 11:24   ` Richard Palethorpe
2022-03-16  9:35     ` Li Wang
2022-03-04 23:18 ` [LTP] [PATCH 06/16] API/cgroup: refuse to mount blkio when io controller is mounted Luke Nowakowski-Krijger
2022-03-16 10:01   ` Li Wang
2022-03-04 23:18 ` [LTP] [PATCH v2 07/16] testcases/lib: Implement tst_cgctl binary Luke Nowakowski-Krijger
2022-03-04 23:18 ` [LTP] [PATCH v3 08/16] controllers: Expand cgroup_lib shell library Luke Nowakowski-Krijger
2022-03-07 11:00   ` Richard Palethorpe [this message]
2022-03-07 11:39     ` Richard Palethorpe
2022-03-16  9:46       ` Li Wang
2022-03-16 21:46         ` Luke Nowakowski-Krijger
2022-03-17  5:38           ` Li Wang
2022-03-04 23:18 ` [LTP] [PATCH v2 09/16] controllers: Update cgroup_fj_* to use newer cgroup lib and test lib Luke Nowakowski-Krijger
2022-03-04 23:18 ` [LTP] [PATCH v2 10/16] controllers: Update memcg_control_test to newer test lib and cgroup lib Luke Nowakowski-Krijger
2022-03-04 23:18 ` [LTP] [PATCH v2 11/16] controllers: Update memcg/regression/* to new test " Luke Nowakowski-Krijger
2022-03-04 23:18 ` [LTP] [PATCH v2 12/16] controllers: Update memcg_stress_test to use newer " Luke Nowakowski-Krijger
2022-03-04 23:18 ` [LTP] [PATCH v2 13/16] controllers: update memcg/functional " Luke Nowakowski-Krijger
2022-03-04 23:18 ` [LTP] [PATCH v2 14/16] controllers: Update pids.sh " Luke Nowakowski-Krijger
2022-03-04 23:18 ` [LTP] [PATCH v2 15/16] controllers: update cpuset_regression_test.sh " Luke Nowakowski-Krijger
2022-03-04 23:18 ` [LTP] [PATCH 16/16] controllers: update cgroup_regression_test " Luke Nowakowski-Krijger
2022-03-16  9:09   ` Li Wang

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87wnh6m2fp.fsf@suse.de \
    --to=rpalethorpe@suse.de \
    --cc=ltp@lists.linux.it \
    --cc=luke.nowakowskikrijger@canonical.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.