18c2ecf20Sopenharmony_ci#!/bin/bash 28c2ecf20Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0 38c2ecf20Sopenharmony_ci 48c2ecf20Sopenharmony_ci# Kselftest framework requirement - SKIP code is 4. 58c2ecf20Sopenharmony_ciksft_skip=4 68c2ecf20Sopenharmony_ci 78c2ecf20Sopenharmony_cistress_fork() 88c2ecf20Sopenharmony_ci{ 98c2ecf20Sopenharmony_ci while true ; do 108c2ecf20Sopenharmony_ci /usr/bin/true 118c2ecf20Sopenharmony_ci sleep 0.01 128c2ecf20Sopenharmony_ci done 138c2ecf20Sopenharmony_ci} 148c2ecf20Sopenharmony_ci 158c2ecf20Sopenharmony_cistress_subsys() 168c2ecf20Sopenharmony_ci{ 178c2ecf20Sopenharmony_ci local verb=+ 188c2ecf20Sopenharmony_ci while true ; do 198c2ecf20Sopenharmony_ci echo $verb$subsys_ctrl >$sysfs/cgroup.subtree_control 208c2ecf20Sopenharmony_ci [ $verb = "+" ] && verb=- || verb=+ 218c2ecf20Sopenharmony_ci # incommensurable period with other stresses 228c2ecf20Sopenharmony_ci sleep 0.011 238c2ecf20Sopenharmony_ci done 248c2ecf20Sopenharmony_ci} 258c2ecf20Sopenharmony_ci 268c2ecf20Sopenharmony_ciinit_and_check() 278c2ecf20Sopenharmony_ci{ 288c2ecf20Sopenharmony_ci sysfs=`mount -t cgroup2 | head -1 | awk '{ print $3 }'` 298c2ecf20Sopenharmony_ci if [ ! -d "$sysfs" ]; then 308c2ecf20Sopenharmony_ci echo "Skipping: cgroup2 is not mounted" >&2 318c2ecf20Sopenharmony_ci exit $ksft_skip 328c2ecf20Sopenharmony_ci fi 338c2ecf20Sopenharmony_ci 348c2ecf20Sopenharmony_ci if ! echo +$subsys_ctrl >$sysfs/cgroup.subtree_control ; then 358c2ecf20Sopenharmony_ci echo "Skipping: cannot enable $subsys_ctrl in $sysfs" >&2 368c2ecf20Sopenharmony_ci exit $ksft_skip 378c2ecf20Sopenharmony_ci fi 388c2ecf20Sopenharmony_ci 398c2ecf20Sopenharmony_ci if ! echo -$subsys_ctrl >$sysfs/cgroup.subtree_control ; then 408c2ecf20Sopenharmony_ci echo "Skipping: cannot disable $subsys_ctrl in $sysfs" >&2 418c2ecf20Sopenharmony_ci exit $ksft_skip 428c2ecf20Sopenharmony_ci fi 438c2ecf20Sopenharmony_ci} 448c2ecf20Sopenharmony_ci 458c2ecf20Sopenharmony_cideclare -a stresses 468c2ecf20Sopenharmony_cideclare -a stress_pids 478c2ecf20Sopenharmony_ciduration=5 488c2ecf20Sopenharmony_circ=0 498c2ecf20Sopenharmony_cisubsys_ctrl=cpuset 508c2ecf20Sopenharmony_cisysfs= 518c2ecf20Sopenharmony_ci 528c2ecf20Sopenharmony_ciwhile getopts c:d:hs: opt; do 538c2ecf20Sopenharmony_ci case $opt in 548c2ecf20Sopenharmony_ci c) 558c2ecf20Sopenharmony_ci subsys_ctrl=$OPTARG 568c2ecf20Sopenharmony_ci ;; 578c2ecf20Sopenharmony_ci d) 588c2ecf20Sopenharmony_ci duration=$OPTARG 598c2ecf20Sopenharmony_ci ;; 608c2ecf20Sopenharmony_ci h) 618c2ecf20Sopenharmony_ci echo "Usage $0 [ -s stress ] ... [ -d duration ] [-c controller] cmd args .." 628c2ecf20Sopenharmony_ci echo -e "\t default duration $duration seconds" 638c2ecf20Sopenharmony_ci echo -e "\t default controller $subsys_ctrl" 648c2ecf20Sopenharmony_ci exit 658c2ecf20Sopenharmony_ci ;; 668c2ecf20Sopenharmony_ci s) 678c2ecf20Sopenharmony_ci func=stress_$OPTARG 688c2ecf20Sopenharmony_ci if [ "x$(type -t $func)" != "xfunction" ] ; then 698c2ecf20Sopenharmony_ci echo "Unknown stress $OPTARG" 708c2ecf20Sopenharmony_ci exit 1 718c2ecf20Sopenharmony_ci fi 728c2ecf20Sopenharmony_ci stresses+=($func) 738c2ecf20Sopenharmony_ci ;; 748c2ecf20Sopenharmony_ci esac 758c2ecf20Sopenharmony_cidone 768c2ecf20Sopenharmony_cishift $((OPTIND - 1)) 778c2ecf20Sopenharmony_ci 788c2ecf20Sopenharmony_ciinit_and_check 798c2ecf20Sopenharmony_ci 808c2ecf20Sopenharmony_cifor s in ${stresses[*]} ; do 818c2ecf20Sopenharmony_ci $s & 828c2ecf20Sopenharmony_ci stress_pids+=($!) 838c2ecf20Sopenharmony_cidone 848c2ecf20Sopenharmony_ci 858c2ecf20Sopenharmony_ci 868c2ecf20Sopenharmony_citime=0 878c2ecf20Sopenharmony_cistart=$(date +%s) 888c2ecf20Sopenharmony_ci 898c2ecf20Sopenharmony_ciwhile [ $time -lt $duration ] ; do 908c2ecf20Sopenharmony_ci $* 918c2ecf20Sopenharmony_ci rc=$? 928c2ecf20Sopenharmony_ci [ $rc -eq 0 ] || break 938c2ecf20Sopenharmony_ci time=$(($(date +%s) - $start)) 948c2ecf20Sopenharmony_cidone 958c2ecf20Sopenharmony_ci 968c2ecf20Sopenharmony_cifor pid in ${stress_pids[*]} ; do 978c2ecf20Sopenharmony_ci kill -SIGTERM $pid 988c2ecf20Sopenharmony_ci wait $pid 998c2ecf20Sopenharmony_cidone 1008c2ecf20Sopenharmony_ci 1018c2ecf20Sopenharmony_ciexit $rc 102