123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- #!/bin/bash
- # SPDX-License-Identifier: GPL-2.0
- # Kselftest framework requirement - SKIP code is 4.
- ksft_skip=4
- stress_fork()
- {
- while true ; do
- /usr/bin/true
- sleep 0.01
- done
- }
- stress_subsys()
- {
- local verb=+
- while true ; do
- echo $verb$subsys_ctrl >$sysfs/cgroup.subtree_control
- [ $verb = "+" ] && verb=- || verb=+
- # incommensurable period with other stresses
- sleep 0.011
- done
- }
- init_and_check()
- {
- sysfs=`mount -t cgroup2 | head -1 | awk '{ print $3 }'`
- if [ ! -d "$sysfs" ]; then
- echo "Skipping: cgroup2 is not mounted" >&2
- exit $ksft_skip
- fi
- if ! echo +$subsys_ctrl >$sysfs/cgroup.subtree_control ; then
- echo "Skipping: cannot enable $subsys_ctrl in $sysfs" >&2
- exit $ksft_skip
- fi
- if ! echo -$subsys_ctrl >$sysfs/cgroup.subtree_control ; then
- echo "Skipping: cannot disable $subsys_ctrl in $sysfs" >&2
- exit $ksft_skip
- fi
- }
- declare -a stresses
- declare -a stress_pids
- duration=5
- rc=0
- subsys_ctrl=cpuset
- sysfs=
- while getopts c:d:hs: opt; do
- case $opt in
- c)
- subsys_ctrl=$OPTARG
- ;;
- d)
- duration=$OPTARG
- ;;
- h)
- echo "Usage $0 [ -s stress ] ... [ -d duration ] [-c controller] cmd args .."
- echo -e "\t default duration $duration seconds"
- echo -e "\t default controller $subsys_ctrl"
- exit
- ;;
- s)
- func=stress_$OPTARG
- if [ "x$(type -t $func)" != "xfunction" ] ; then
- echo "Unknown stress $OPTARG"
- exit 1
- fi
- stresses+=($func)
- ;;
- esac
- done
- shift $((OPTIND - 1))
- init_and_check
- for s in ${stresses[*]} ; do
- $s &
- stress_pids+=($!)
- done
- time=0
- start=$(date +%s)
- while [ $time -lt $duration ] ; do
- $*
- rc=$?
- [ $rc -eq 0 ] || break
- time=$(($(date +%s) - $start))
- done
- for pid in ${stress_pids[*]} ; do
- kill -SIGTERM $pid
- wait $pid
- done
- exit $rc
|