test/cgroups: Add helper functions for more granular setup
Signed-off-by: Michal Berger <michal.berger@intel.com> Change-Id: I6b6baae849a472599adc36a04d268a7a65979b41 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/13703 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Karol Latecki <karol.latecki@intel.com> Reviewed-by: Tomasz Zawadzki <tomasz.zawadzki@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com>
This commit is contained in:
parent
1f7041b3fb
commit
3d5e27df7d
@ -11,7 +11,7 @@ check_cgroup() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
init_cpuset_cgroup() {
|
init_cpuset_cgroup() {
|
||||||
local cgroup
|
local cgroup pid
|
||||||
local -A cgroups=()
|
local -A cgroups=()
|
||||||
|
|
||||||
# For cgroup-v2 we need to prepare cpuset subsystem on our own
|
# For cgroup-v2 we need to prepare cpuset subsystem on our own
|
||||||
@ -26,9 +26,8 @@ init_cpuset_cgroup() {
|
|||||||
# maintaining user's session. To recreate the simple /cpuset setup from
|
# maintaining user's session. To recreate the simple /cpuset setup from
|
||||||
# v1, move all the threads from all the existing cgroups to the top
|
# v1, move all the threads from all the existing cgroups to the top
|
||||||
# cgroup / and then migrate it to the /cpuset we created above.
|
# cgroup / and then migrate it to the /cpuset we created above.
|
||||||
for cgroup in /proc/+([0-9])/cgroup; do
|
for pid in /proc/+([0-9]); do
|
||||||
cgroup=$(< "$cgroup") || continue
|
cgroup=$(get_cgroup "${pid##*/}") || continue
|
||||||
cgroup=${cgroup##*:}
|
|
||||||
[[ $cgroup != / ]] || continue
|
[[ $cgroup != / ]] || continue
|
||||||
cgroups["$cgroup"]=$cgroup
|
cgroups["$cgroup"]=$cgroup
|
||||||
done 2> /dev/null
|
done 2> /dev/null
|
||||||
@ -153,5 +152,36 @@ remove_cpuset_cgroup() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
get_cgroup() {
|
||||||
|
local pid=${1:-self} cgroup
|
||||||
|
|
||||||
|
[[ -e /proc/$pid/cgroup ]] || return 1
|
||||||
|
cgroup=$(< "/proc/$pid/cgroup")
|
||||||
|
echo "${cgroup##*:}"
|
||||||
|
}
|
||||||
|
|
||||||
|
get_cgroup_path() {
|
||||||
|
local cgroup
|
||||||
|
|
||||||
|
cgroup=$(get_cgroup "$1") || return 1
|
||||||
|
echo "$sysfs_cgroup$cgroup"
|
||||||
|
}
|
||||||
|
|
||||||
|
_set_cgroup_attr_top_bottom() {
|
||||||
|
local cgroup_path=$1 attr=$2 val=$3
|
||||||
|
|
||||||
|
if [[ -e ${cgroup_path%/*}/$attr ]]; then
|
||||||
|
_set_cgroup_attr_top_bottom "${cgroup_path%/*}" "$attr" "$val"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -e $cgroup_path/$attr ]]; then
|
||||||
|
echo "$val" > "$cgroup_path/$attr"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
set_cgroup_attr_top_bottom() {
|
||||||
|
_set_cgroup_attr_top_bottom "$(get_cgroup_path "$1")" "$2" "$3"
|
||||||
|
}
|
||||||
|
|
||||||
declare -r sysfs_cgroup=/sys/fs/cgroup
|
declare -r sysfs_cgroup=/sys/fs/cgroup
|
||||||
cgroup_version=$(check_cgroup)
|
cgroup_version=$(check_cgroup)
|
||||||
|
Loading…
Reference in New Issue
Block a user