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