1 #!/bin/bash 1 #!/bin/bash 2 # SPDX-License-Identifier: GPL-2.0 2 # SPDX-License-Identifier: GPL-2.0 3 3 4 # Kselftest framework requirement - SKIP code 4 # Kselftest framework requirement - SKIP code is 4. 5 ksft_skip=4 5 ksft_skip=4 6 6 7 stress_fork() 7 stress_fork() 8 { 8 { 9 while true ; do 9 while true ; do 10 /usr/bin/true 10 /usr/bin/true 11 sleep 0.01 11 sleep 0.01 12 done 12 done 13 } 13 } 14 14 15 stress_subsys() 15 stress_subsys() 16 { 16 { 17 local verb=+ 17 local verb=+ 18 while true ; do 18 while true ; do 19 echo $verb$subsys_ctrl >$sysfs 19 echo $verb$subsys_ctrl >$sysfs/cgroup.subtree_control 20 [ $verb = "+" ] && verb=- || v 20 [ $verb = "+" ] && verb=- || verb=+ 21 # incommensurable period with 21 # incommensurable period with other stresses 22 sleep 0.011 22 sleep 0.011 23 done 23 done 24 } 24 } 25 25 26 init_and_check() 26 init_and_check() 27 { 27 { 28 sysfs=`mount -t cgroup2 | head -1 | aw 28 sysfs=`mount -t cgroup2 | head -1 | awk '{ print $3 }'` 29 if [ ! -d "$sysfs" ]; then 29 if [ ! -d "$sysfs" ]; then 30 echo "Skipping: cgroup2 is not 30 echo "Skipping: cgroup2 is not mounted" >&2 31 exit $ksft_skip 31 exit $ksft_skip 32 fi 32 fi 33 33 34 if ! echo +$subsys_ctrl >$sysfs/cgroup 34 if ! echo +$subsys_ctrl >$sysfs/cgroup.subtree_control ; then 35 echo "Skipping: cannot enable 35 echo "Skipping: cannot enable $subsys_ctrl in $sysfs" >&2 36 exit $ksft_skip 36 exit $ksft_skip 37 fi 37 fi 38 38 39 if ! echo -$subsys_ctrl >$sysfs/cgroup 39 if ! echo -$subsys_ctrl >$sysfs/cgroup.subtree_control ; then 40 echo "Skipping: cannot disable 40 echo "Skipping: cannot disable $subsys_ctrl in $sysfs" >&2 41 exit $ksft_skip 41 exit $ksft_skip 42 fi 42 fi 43 } 43 } 44 44 45 declare -a stresses 45 declare -a stresses 46 declare -a stress_pids 46 declare -a stress_pids 47 duration=5 47 duration=5 48 rc=0 48 rc=0 49 subsys_ctrl=cpuset 49 subsys_ctrl=cpuset 50 sysfs= 50 sysfs= 51 51 52 while getopts c:d:hs: opt; do 52 while getopts c:d:hs: opt; do 53 case $opt in 53 case $opt in 54 c) 54 c) 55 subsys_ctrl=$OPTARG 55 subsys_ctrl=$OPTARG 56 ;; 56 ;; 57 d) 57 d) 58 duration=$OPTARG 58 duration=$OPTARG 59 ;; 59 ;; 60 h) 60 h) 61 echo "Usage $0 [ -s stress ] . 61 echo "Usage $0 [ -s stress ] ... [ -d duration ] [-c controller] cmd args .." 62 echo -e "\t default duration $ 62 echo -e "\t default duration $duration seconds" 63 echo -e "\t default controller 63 echo -e "\t default controller $subsys_ctrl" 64 exit 64 exit 65 ;; 65 ;; 66 s) 66 s) 67 func=stress_$OPTARG 67 func=stress_$OPTARG 68 if [ "x$(type -t $func)" != "x 68 if [ "x$(type -t $func)" != "xfunction" ] ; then 69 echo "Unknown stress $ 69 echo "Unknown stress $OPTARG" 70 exit 1 70 exit 1 71 fi 71 fi 72 stresses+=($func) 72 stresses+=($func) 73 ;; 73 ;; 74 esac 74 esac 75 done 75 done 76 shift $((OPTIND - 1)) 76 shift $((OPTIND - 1)) 77 77 78 init_and_check 78 init_and_check 79 79 80 for s in ${stresses[*]} ; do 80 for s in ${stresses[*]} ; do 81 $s & 81 $s & 82 stress_pids+=($!) 82 stress_pids+=($!) 83 done 83 done 84 84 85 85 86 time=0 86 time=0 87 start=$(date +%s) 87 start=$(date +%s) 88 88 89 while [ $time -lt $duration ] ; do 89 while [ $time -lt $duration ] ; do 90 $* 90 $* 91 rc=$? 91 rc=$? 92 [ $rc -eq 0 ] || break 92 [ $rc -eq 0 ] || break 93 time=$(($(date +%s) - $start)) 93 time=$(($(date +%s) - $start)) 94 done 94 done 95 95 96 for pid in ${stress_pids[*]} ; do 96 for pid in ${stress_pids[*]} ; do 97 kill -SIGTERM $pid 97 kill -SIGTERM $pid 98 wait $pid 98 wait $pid 99 done 99 done 100 100 101 exit $rc 101 exit $rc
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.